diff --git a/test/Analysis/DSGraph/2003-06-29-IncompleteTDPass.ll b/test/Analysis/DSGraph/2003-06-29-IncompleteTDPass.ll
index 0c462e1..4b919c1 100644
--- a/test/Analysis/DSGraph/2003-06-29-IncompleteTDPass.ll
+++ b/test/Analysis/DSGraph/2003-06-29-IncompleteTDPass.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=Ptr:HR
+; RUN: opt -analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=Ptr:HR
 
 
 
diff --git a/test/Analysis/DSGraph/2003-06-29-NodeCollapsing2.ll b/test/Analysis/DSGraph/2003-06-29-NodeCollapsing2.ll
index 99aae03..f357694 100644
--- a/test/Analysis/DSGraph/2003-06-29-NodeCollapsing2.ll
+++ b/test/Analysis/DSGraph/2003-06-29-NodeCollapsing2.ll
@@ -1,7 +1,7 @@
 ; This is the same testcase as 2003-06-29-NodeCollapsing2.ll, but it uses the 
 ; graph checker.
 ;
-; RUN: analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
+; RUN: opt -analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
 ;
 %T = type { int}
 
diff --git a/test/Analysis/DSGraph/2003-06-30-TopDownResolve.ll b/test/Analysis/DSGraph/2003-06-30-TopDownResolve.ll
index 6622eb2..f0cd849 100644
--- a/test/Analysis/DSGraph/2003-06-30-TopDownResolve.ll
+++ b/test/Analysis/DSGraph/2003-06-30-TopDownResolve.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=X:GM
+; RUN: opt -analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=X:GM
 
 %G = internal global int 5
 
diff --git a/test/Analysis/DSGraph/2003-07-01-FieldCollapse.ll b/test/Analysis/DSGraph/2003-07-01-FieldCollapse.ll
index 3f1893b..58ddc46 100644
--- a/test/Analysis/DSGraph/2003-07-01-FieldCollapse.ll
+++ b/test/Analysis/DSGraph/2003-07-01-FieldCollapse.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
+; RUN: opt -analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
 
 %X = internal global { int, short, short } { int 1, short 2, short 3 }
 
diff --git a/test/Analysis/DSGraph/2003-07-16-ConstantExprCollapse.ll b/test/Analysis/DSGraph/2003-07-16-ConstantExprCollapse.ll
index aec1e99..38e57b8 100644
--- a/test/Analysis/DSGraph/2003-07-16-ConstantExprCollapse.ll
+++ b/test/Analysis/DSGraph/2003-07-16-ConstantExprCollapse.ll
@@ -1,6 +1,6 @@
 ; This should cause the global node to collapse!!
 ; XFAIL: *
-; RUN: analyze %s -datastructure-gc --dsgc-check-flags=test:GAU
+; RUN: opt -analyze %s -datastructure-gc --dsgc-check-flags=test:GAU
 
 %Tree = type { int, %Tree*, %Tree* }
 %T5 = external global %Tree
diff --git a/test/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll b/test/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll
index 37f5038..3a58e05 100644
--- a/test/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll
+++ b/test/Analysis/DSGraph/2003-11-02-NodeCollapsing.ll
@@ -1,7 +1,7 @@
 ; This is the same testcase as 2003-06-29-NodeCollapsing2.ll, but it uses the 
 ; graph checker.
 ;
-; RUN: analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
+; RUN: opt -analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
 ;
 
 %S = type { double, int }
diff --git a/test/Analysis/DSGraph/2004-02-13-memcpy.ll b/test/Analysis/DSGraph/2004-02-13-memcpy.ll
index 105709f..3b06bae 100644
--- a/test/Analysis/DSGraph/2004-02-13-memcpy.ll
+++ b/test/Analysis/DSGraph/2004-02-13-memcpy.ll
@@ -1,5 +1,5 @@
-; RUN: analyze %s -datastructure-gc -dsgc-check-flags=Xn:SMR
-; RUN: analyze %s -datastructure-gc -dsgc-check-flags=X:SMR
+; RUN: opt -analyze %s -datastructure-gc -dsgc-check-flags=Xn:SMR
+; RUN: opt -analyze %s -datastructure-gc -dsgc-check-flags=X:SMR
 
 declare void %llvm.memcpy.i32(sbyte*, sbyte*, uint, uint)
 declare void %llvm.memmove.i32(sbyte*, sbyte*, uint, uint)
diff --git a/test/Analysis/DSGraph/2005-03-22-IncompleteGlobal.ll b/test/Analysis/DSGraph/2005-03-22-IncompleteGlobal.ll
index 0af1efa..1d32402 100644
--- a/test/Analysis/DSGraph/2005-03-22-IncompleteGlobal.ll
+++ b/test/Analysis/DSGraph/2005-03-22-IncompleteGlobal.ll
@@ -1,5 +1,5 @@
-; RUN: analyze %s -datastructure-gc  -dsgc-check-flags=G:GIM -dsgc-dspass=bu &&\
-; RUN: analyze %s -datastructure-gc  -dsgc-check-flags=G:GIM -dsgc-dspass=td
+; RUN: opt -analyze %s -datastructure-gc  -dsgc-check-flags=G:GIM -dsgc-dspass=bu &&\
+; RUN: opt -analyze %s -datastructure-gc  -dsgc-check-flags=G:GIM -dsgc-dspass=td
 
 %S = type { double, int }
 
diff --git a/test/Analysis/DSGraph/2006-03-27-LinkedCollapsed.ll b/test/Analysis/DSGraph/2006-03-27-LinkedCollapsed.ll
index 06af906..ce1ebb9 100644
--- a/test/Analysis/DSGraph/2006-03-27-LinkedCollapsed.ll
+++ b/test/Analysis/DSGraph/2006-03-27-LinkedCollapsed.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | analyze -datastructure
+; RUN: llvm-as < %s | opt -analyze -datastructure
 
 target endian = little
 target pointersize = 32
diff --git a/test/Analysis/DSGraph/2006-04-13-ZeroArrayStruct.ll b/test/Analysis/DSGraph/2006-04-13-ZeroArrayStruct.ll
index c12bb9e..0fa6ba8 100644
--- a/test/Analysis/DSGraph/2006-04-13-ZeroArrayStruct.ll
+++ b/test/Analysis/DSGraph/2006-04-13-ZeroArrayStruct.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | analyze -datastructure
+; RUN: llvm-as < %s | opt -analyze -datastructure
 
 ; ModuleID = 'bug3.bc'
 target endian = little
diff --git a/test/Analysis/DSGraph/2006-04-25-ZeroArrayStructUse.ll b/test/Analysis/DSGraph/2006-04-25-ZeroArrayStructUse.ll
index b8238f0..aa41920 100644
--- a/test/Analysis/DSGraph/2006-04-25-ZeroArrayStructUse.ll
+++ b/test/Analysis/DSGraph/2006-04-25-ZeroArrayStructUse.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -datastructure-gc -dsgc-check-flags=x:IA
+; RUN: opt -analyze %s -datastructure-gc -dsgc-check-flags=x:IA
 
 ; ModuleID = 'bug3.bc'
 target endian = little
diff --git a/test/Analysis/DSGraph/FunctionPointerTable-const.ll b/test/Analysis/DSGraph/FunctionPointerTable-const.ll
index 76c2265..4031a09 100644
--- a/test/Analysis/DSGraph/FunctionPointerTable-const.ll
+++ b/test/Analysis/DSGraph/FunctionPointerTable-const.ll
@@ -1,7 +1,7 @@
 ; FIXME: this should be SHM for bu, but change it for now since besides incompleteness
 ;        this is working
-; RUN: analyze %s -datastructure-gc -dsgc-dspass=bu -dsgc-check-flags=Y:SHIM && \
-; RUN: analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=P1:SHM,P2:SHM
+; RUN: opt -analyze %s -datastructure-gc -dsgc-dspass=bu -dsgc-check-flags=Y:SHIM && \
+; RUN: opt -analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-check-flags=P1:SHM,P2:SHM
 
 %G = internal constant [2 x int*(int*)*] [ 
   int*(int*)* %callee1, int*(int*)* %callee2
diff --git a/test/Analysis/DSGraph/GlobalsGraphFuncPtr.ll b/test/Analysis/DSGraph/GlobalsGraphFuncPtr.ll
index 99ac473..ea5c04e 100644
--- a/test/Analysis/DSGraph/GlobalsGraphFuncPtr.ll
+++ b/test/Analysis/DSGraph/GlobalsGraphFuncPtr.ll
@@ -5,7 +5,7 @@
 ; -- globals in GG pointed to by latter should be marked I, but not other nodes
 ;
 ; FIXME: KnownPtr should be just S.
-; RUN: analyze %s -datastructure-gc -dsgc-check-flags=KnownPtr:SI,UnknownPtr:SI -dsgc-dspass=bu
+; RUN: opt -analyze %s -datastructure-gc -dsgc-check-flags=KnownPtr:SI,UnknownPtr:SI -dsgc-dspass=bu
 
 %Z = internal global int 0
 %X = internal global int 0
diff --git a/test/Analysis/DSGraph/HardBUCase.ll b/test/Analysis/DSGraph/HardBUCase.ll
index 6d9aa05..318b4f2 100644
--- a/test/Analysis/DSGraph/HardBUCase.ll
+++ b/test/Analysis/DSGraph/HardBUCase.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -budatastructure -dont-print-ds
+; RUN: opt -analyze %s -budatastructure -dont-print-ds
 
 %MidFnTy = type void (\2*)
 
diff --git a/test/Analysis/DSGraph/PhysicalSubtyping.ll b/test/Analysis/DSGraph/PhysicalSubtyping.ll
index d9ac454..5957548 100644
--- a/test/Analysis/DSGraph/PhysicalSubtyping.ll
+++ b/test/Analysis/DSGraph/PhysicalSubtyping.ll
@@ -1,6 +1,6 @@
 ; Test to check for support for "physical subtyping"
 ;
-; RUN: analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
+; RUN: opt -analyze %s -datastructure-gc -dsgc-abort-if-any-collapsed
 ;
 %S = type { int }
 %T = type { int, float, double }
diff --git a/test/Analysis/DSGraph/SCCSimpleExample.ll b/test/Analysis/DSGraph/SCCSimpleExample.ll
index 3c71c34..825c579 100644
--- a/test/Analysis/DSGraph/SCCSimpleExample.ll
+++ b/test/Analysis/DSGraph/SCCSimpleExample.ll
@@ -1,5 +1,5 @@
 
-; RUN: analyze %s -datastructure-gc --dsgc-abort-if-merged=Y,BVal
+; RUN: opt -analyze %s -datastructure-gc --dsgc-abort-if-merged=Y,BVal
 
 implementation
 
diff --git a/test/Analysis/DSGraph/constant_globals.ll b/test/Analysis/DSGraph/constant_globals.ll
index f42aec9..2473d1d 100644
--- a/test/Analysis/DSGraph/constant_globals.ll
+++ b/test/Analysis/DSGraph/constant_globals.ll
@@ -1,5 +1,5 @@
 ; FIXME: A should just be SM
-; RUN: analyze %s -datastructure-gc -dsgc-dspass=bu -dsgc-check-flags=A:SIM
+; RUN: opt -analyze %s -datastructure-gc -dsgc-dspass=bu -dsgc-check-flags=A:SIM
 ; Constant globals should not mark stuff incomplete.  This should allow the 
 ; bu pass to resolve the indirect call immediately in "test", allowing %A to
 ; be marked complete and the store to happen.
diff --git a/test/Analysis/DSGraph/strcpy.ll b/test/Analysis/DSGraph/strcpy.ll
index 7cb2011..ae936d3 100644
--- a/test/Analysis/DSGraph/strcpy.ll
+++ b/test/Analysis/DSGraph/strcpy.ll
@@ -3,7 +3,7 @@
 ; has no defined way to check for this, so DSA can know that strcpy doesn't
 ; require merging the input arguments.
 
-; RUN: analyze %s -datastructure-gc --dsgc-abort-if-merged=A,B --dsgc-check-flags=A:ASM,B:ASR --dsgc-dspass=bu
+; RUN: opt -analyze %s -datastructure-gc --dsgc-abort-if-merged=A,B --dsgc-check-flags=A:ASM,B:ASR --dsgc-dspass=bu
 
 implementation
 
diff --git a/test/Analysis/Dominators/2003-05-12-UnreachableCode.ll b/test/Analysis/Dominators/2003-05-12-UnreachableCode.ll
index e1e71cd..d781eb5 100644
--- a/test/Analysis/Dominators/2003-05-12-UnreachableCode.ll
+++ b/test/Analysis/Dominators/2003-05-12-UnreachableCode.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -domset -disable-verify
+; RUN: opt -analyze %s -domset -disable-verify
 ;
 int %re_match_2() {
 ENTRY:
diff --git a/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll b/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll
index 4feee42..96099a8 100644
--- a/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll
+++ b/test/Analysis/LoopInfo/2003-05-15-NestingProblem.ll
@@ -1,7 +1,7 @@
 ; This testcase was incorrectly computing that the loopentry.7 loop was
 ; not a child of the loopentry.6 loop.
 ;
-; RUN: analyze %s -loops | grep "^            Loop Containing:  %loopentry.7"
+; RUN: opt -analyze %s -loops | grep "^            Loop Containing:  %loopentry.7"
 
 void %getAndMoveToFrontDecode() {		; No predecessors!
 	br label %endif.2
diff --git a/test/Transforms/DSAnalysis/arraymerge.ll b/test/Transforms/DSAnalysis/arraymerge.ll
index c4ac718..30f4583 100644
--- a/test/Transforms/DSAnalysis/arraymerge.ll
+++ b/test/Transforms/DSAnalysis/arraymerge.ll
@@ -2,7 +2,7 @@
 ; folded completely away if possible.  This is a very common case, so it should
 ; be efficient.
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 ;
 implementation
 
diff --git a/test/Transforms/DSAnalysis/arraytest.ll b/test/Transforms/DSAnalysis/arraytest.ll
index 521bd63..bb6c4c1 100644
--- a/test/Transforms/DSAnalysis/arraytest.ll
+++ b/test/Transforms/DSAnalysis/arraytest.ll
@@ -1,5 +1,5 @@
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 %crazy = type [2 x { [2 x sbyte], short } ]
 
 implementation
diff --git a/test/Transforms/DSAnalysis/badcases.ll b/test/Transforms/DSAnalysis/badcases.ll
index b841b6e..a977f23 100644
--- a/test/Transforms/DSAnalysis/badcases.ll
+++ b/test/Transforms/DSAnalysis/badcases.ll
@@ -1,6 +1,6 @@
 ; This file contains a list of situations where node folding should happen...
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 implementation
 
diff --git a/test/Transforms/DSAnalysis/basictest.ll b/test/Transforms/DSAnalysis/basictest.ll
index 615e021..a3583a1 100644
--- a/test/Transforms/DSAnalysis/basictest.ll
+++ b/test/Transforms/DSAnalysis/basictest.ll
@@ -1,6 +1,6 @@
 ; very simple test
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 implementation
 
diff --git a/test/Transforms/DSAnalysis/fieldmerge.ll b/test/Transforms/DSAnalysis/fieldmerge.ll
index 4dcefb7..a754d06 100644
--- a/test/Transforms/DSAnalysis/fieldmerge.ll
+++ b/test/Transforms/DSAnalysis/fieldmerge.ll
@@ -1,5 +1,5 @@
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 %str = type { int*, int* }
 
diff --git a/test/Transforms/DSAnalysis/goodcases.ll b/test/Transforms/DSAnalysis/goodcases.ll
index 1d545b3..f6d9ff9 100644
--- a/test/Transforms/DSAnalysis/goodcases.ll
+++ b/test/Transforms/DSAnalysis/goodcases.ll
@@ -1,6 +1,6 @@
 ; This file contains a list of cases where node folding should NOT happen
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 ;
 
 implementation
diff --git a/test/Transforms/DSAnalysis/indcalltest.ll b/test/Transforms/DSAnalysis/indcalltest.ll
index 16cb6be..1ec92d3 100644
--- a/test/Transforms/DSAnalysis/indcalltest.ll
+++ b/test/Transforms/DSAnalysis/indcalltest.ll
@@ -1,5 +1,5 @@
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 %G = global int 2		; <int*> [#uses=1]
 %H = global int* null
diff --git a/test/Transforms/DSAnalysis/misctests.ll b/test/Transforms/DSAnalysis/misctests.ll
index 29c7079..acdbabf 100644
--- a/test/Transforms/DSAnalysis/misctests.ll
+++ b/test/Transforms/DSAnalysis/misctests.ll
@@ -1,5 +1,5 @@
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 int* %test1(int *%A) {
 	%R = getelementptr int* %A, long 1
diff --git a/test/Transforms/DSAnalysis/physicalsubtype.ll b/test/Transforms/DSAnalysis/physicalsubtype.ll
index 2beb3ec..26fa511 100644
--- a/test/Transforms/DSAnalysis/physicalsubtype.ll
+++ b/test/Transforms/DSAnalysis/physicalsubtype.ll
@@ -1,6 +1,6 @@
 ; A test for "physical subtyping" used in some C programs...
 ;
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 ;
 %ST = type { int, int* }            ; "Subtype"
 %DT = type { int, int*, int }       ; "derived type"
diff --git a/test/Transforms/DSAnalysis/recursion.ll b/test/Transforms/DSAnalysis/recursion.ll
index 6acdd24..da075cd 100644
--- a/test/Transforms/DSAnalysis/recursion.ll
+++ b/test/Transforms/DSAnalysis/recursion.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 implementation   ; Functions:
 
diff --git a/test/Transforms/DSAnalysis/simplest-test.ll b/test/Transforms/DSAnalysis/simplest-test.ll
index b757403..b398c28 100644
--- a/test/Transforms/DSAnalysis/simplest-test.ll
+++ b/test/Transforms/DSAnalysis/simplest-test.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 void %foo(int* %X) {
 	store int 4, int* %X
diff --git a/test/Transforms/DSAnalysis/simpletest.ll b/test/Transforms/DSAnalysis/simpletest.ll
index 298aa83..80b9433 100644
--- a/test/Transforms/DSAnalysis/simpletest.ll
+++ b/test/Transforms/DSAnalysis/simpletest.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 implementation
 
diff --git a/test/Transforms/DSAnalysis/structpadding.ll b/test/Transforms/DSAnalysis/structpadding.ll
index 693c988..5b3c8b8 100644
--- a/test/Transforms/DSAnalysis/structpadding.ll
+++ b/test/Transforms/DSAnalysis/structpadding.ll
@@ -1,4 +1,4 @@
-; RUN: analyze %s -tddatastructure
+; RUN: opt -analyze %s -tddatastructure
 
 %str = type { int, int* }
 
diff --git a/tools/Makefile b/tools/Makefile
index 99e7396..649c655 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -9,8 +9,7 @@
 
 LEVEL := ..
 PARALLEL_DIRS := llvm-config llvm-as llvm-dis opt gccas llc llvm-link lli gccld\
-                 llvm-stub analyze llvm-extract llvm-nm llvm-prof llvm-ar \
-		 llvm-ranlib llvm-bcanalyzer llvmc llvm-ld llvm-db bugpoint \
-                 llvm2cpp
+                 llvm-stub llvm-extract llvm-nm llvm-prof llvm-ar llvm-ranlib \
+		 llvm-bcanalyzer llvmc llvm-ld llvm-db bugpoint llvm2cpp
 
 include $(LEVEL)/Makefile.common
diff --git a/tools/analyze/AnalysisWrappers.cpp b/tools/analyze/AnalysisWrappers.cpp
deleted file mode 100644
index b371d50..0000000
--- a/tools/analyze/AnalysisWrappers.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-//===- AnalysisWrappers.cpp - Wrappers around non-pass analyses -----------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines pass wrappers around LLVM analyses that don't make sense to
-// be passes.  It provides a nice standard pass interface to these classes so
-// that they can be printed out by analyze.
-//
-// These classes are separated out of analyze.cpp so that it is more clear which
-// code is the integral part of the analyze tool, and which part of the code is
-// just making it so more passes are available.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/CallSite.h"
-#include "llvm/Analysis/CallGraph.h"
-#include <iostream>
-using namespace llvm;
-
-namespace {
-  /// ExternalFunctionsPassedConstants - This pass prints out call sites to
-  /// external functions that are called with constant arguments.  This can be
-  /// useful when looking for standard library functions we should constant fold
-  /// or handle in alias analyses.
-  struct ExternalFunctionsPassedConstants : public ModulePass {
-    virtual bool runOnModule(Module &M) {
-      for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
-        if (I->isExternal()) {
-          bool PrintedFn = false;
-          for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
-               UI != E; ++UI)
-            if (Instruction *User = dyn_cast<Instruction>(*UI)) {
-              CallSite CS = CallSite::get(User);
-              if (CS.getInstruction()) {
-                for (CallSite::arg_iterator AI = CS.arg_begin(),
-                       E = CS.arg_end(); AI != E; ++AI)
-                  if (isa<Constant>(*AI)) {
-                    if (!PrintedFn) {
-                      std::cerr << "Function '" << I->getName() << "':\n";
-                      PrintedFn = true;
-                    }
-                    std::cerr << *User;
-                    break;
-                  }
-              }
-            }
-        }
-
-      return false;
-    }
-
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-    }
-  };
-
-  RegisterAnalysis<ExternalFunctionsPassedConstants>
-  P1("externalfnconstants", "Print external fn callsites passed constants");
-  
-  struct CallGraphPrinter : public ModulePass {
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-      AU.addRequired<CallGraph>();
-    }
-    virtual bool runOnModule(Module &M) { return false; }
-
-    virtual void print(std::ostream &OS, const Module *M) const {
-      getAnalysis<CallGraph>().print(OS, M);
-    }
-  };
-  
-  RegisterAnalysis<CallGraphPrinter>
-    P2("callgraph", "Print a call graph");
-}
diff --git a/tools/analyze/GraphPrinters.cpp b/tools/analyze/GraphPrinters.cpp
deleted file mode 100644
index 8826cd2..0000000
--- a/tools/analyze/GraphPrinters.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//===- GraphPrinters.cpp - DOT printers for various graph types -----------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines several printers for various different types of graphs used
-// by the LLVM infrastructure.  It uses the generic graph interface to convert
-// the graph into a .dot graph.  These graphs can then be processed with the
-// "dot" tool to convert them to postscript or some other suitable format.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Support/GraphWriter.h"
-#include "llvm/Pass.h"
-#include "llvm/Value.h"
-#include "llvm/Analysis/CallGraph.h"
-#include <fstream>
-using namespace llvm;
-
-template<typename GraphType>
-static void WriteGraphToFile(std::ostream &O, const std::string &GraphName,
-                             const GraphType &GT) {
-  std::string Filename = GraphName + ".dot";
-  O << "Writing '" << Filename << "'...";
-  std::ofstream F(Filename.c_str());
-
-  if (F.good())
-    WriteGraph(F, GT);
-  else
-    O << "  error opening file for writing!";
-  O << "\n";
-}
-
-
-//===----------------------------------------------------------------------===//
-//                              Call Graph Printer
-//===----------------------------------------------------------------------===//
-
-namespace llvm {
-  template<>
-  struct DOTGraphTraits<CallGraph*> : public DefaultDOTGraphTraits {
-    static std::string getGraphName(CallGraph *F) {
-      return "Call Graph";
-    }
-
-    static std::string getNodeLabel(CallGraphNode *Node, CallGraph *Graph) {
-      if (Node->getFunction())
-        return ((Value*)Node->getFunction())->getName();
-      else
-        return "Indirect call node";
-    }
-  };
-}
-
-
-namespace {
-  struct CallGraphPrinter : public ModulePass {
-    virtual bool runOnModule(Module &M) {
-      WriteGraphToFile(std::cerr, "callgraph", &getAnalysis<CallGraph>());
-      return false;
-    }
-
-    void print(std::ostream &OS) const {}
-
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.addRequired<CallGraph>();
-      AU.setPreservesAll();
-    }
-  };
-
-  RegisterAnalysis<CallGraphPrinter> P2("print-callgraph",
-                                        "Print Call Graph to 'dot' file");
-}
diff --git a/tools/analyze/Makefile b/tools/analyze/Makefile
deleted file mode 100644
index e3885a9..0000000
--- a/tools/analyze/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-##===- tools/analyze/Makefile ------------------------------*- Makefile -*-===##
-# 
-#                     The LLVM Compiler Infrastructure
-#
-# This file was developed by the LLVM research group and is distributed under
-# the University of Illinois Open Source License. See LICENSE.TXT for details.
-# 
-##===----------------------------------------------------------------------===##
-LEVEL = ../..
-TOOLNAME = analyze
-USEDLIBS = LLVMAsmParser.a LLVMBCReader.a LLVMAnalysis.a LLVMipa.a \
-           LLVMDataStructure \
-	   LLVMScalarOpts.a LLVMTransforms.a LLVMTarget.a LLVMScalarOpts.a \
-	   LLVMTransformUtils.a LLVMCore.a LLVMSupport.a LLVMbzip2.a LLVMSystem.a
-REQUIRES_EH := 1
-
-include $(LEVEL)/Makefile.common
diff --git a/tools/analyze/PrintSCC.cpp b/tools/analyze/PrintSCC.cpp
deleted file mode 100644
index c0adf5c..0000000
--- a/tools/analyze/PrintSCC.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//===- PrintSCC.cpp - Enumerate SCCs in some key graphs -------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file provides passes to print out SCCs in a CFG or a CallGraph.
-// Normally, you would not use these passes; instead, you would use the
-// scc_iterator directly to enumerate SCCs and process them in some way.  These
-// passes serve three purposes:
-//
-// (1) As a reference for how to use the scc_iterator.
-// (2) To print out the SCCs for a CFG or a CallGraph:
-//       analyze -cfgscc            to print the SCCs in each CFG of a module.
-//       analyze -cfgscc -stats     to print the #SCCs and the maximum SCC size.
-//       analyze -cfgscc -debug > /dev/null to watch the algorithm in action.
-//
-//     and similarly:
-//       analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph
-//
-// (3) To test the scc_iterator.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Pass.h"
-#include "llvm/Module.h"
-#include "llvm/Analysis/CallGraph.h"
-#include "llvm/Support/CFG.h"
-#include "llvm/ADT/SCCIterator.h"
-#include <iostream>
-using namespace llvm;
-
-namespace {
-  struct CFGSCC : public FunctionPass {
-    bool runOnFunction(Function& func);
-
-    void print(std::ostream &O, const Module* = 0) const { }
-
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-    }
-  };
-
-  struct CallGraphSCC : public ModulePass {
-    // run - Print out SCCs in the call graph for the specified module.
-    bool runOnModule(Module &M);
-
-    void print(std::ostream &O, const Module* = 0) const { }
-
-    // getAnalysisUsage - This pass requires the CallGraph.
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-      AU.addRequired<CallGraph>();
-    }
-  };
-
-  RegisterAnalysis<CFGSCC>
-  Y("cfgscc", "Print SCCs of each function CFG");
-
-  RegisterAnalysis<CallGraphSCC>
-  Z("callscc", "Print SCCs of the Call Graph");
-}
-
-bool CFGSCC::runOnFunction(Function &F) {
-  unsigned sccNum = 0;
-  std::cout << "SCCs for Function " << F.getName() << " in PostOrder:";
-  for (scc_iterator<Function*> SCCI = scc_begin(&F),
-         E = scc_end(&F); SCCI != E; ++SCCI) {
-    std::vector<BasicBlock*> &nextSCC = *SCCI;
-    std::cout << "\nSCC #" << ++sccNum << " : ";
-    for (std::vector<BasicBlock*>::const_iterator I = nextSCC.begin(),
-           E = nextSCC.end(); I != E; ++I)
-      std::cout << (*I)->getName() << ", ";
-    if (nextSCC.size() == 1 && SCCI.hasLoop())
-      std::cout << " (Has self-loop).";
-  }
-  std::cout << "\n";
-
-  return true;
-}
-
-
-// run - Print out SCCs in the call graph for the specified module.
-bool CallGraphSCC::runOnModule(Module &M) {
-  CallGraphNode* rootNode = getAnalysis<CallGraph>().getRoot();
-  unsigned sccNum = 0;
-  std::cout << "SCCs for the program in PostOrder:";
-  for (scc_iterator<CallGraphNode*> SCCI = scc_begin(rootNode),
-         E = scc_end(rootNode); SCCI != E; ++SCCI) {
-    const std::vector<CallGraphNode*> &nextSCC = *SCCI;
-    std::cout << "\nSCC #" << ++sccNum << " : ";
-    for (std::vector<CallGraphNode*>::const_iterator I = nextSCC.begin(),
-           E = nextSCC.end(); I != E; ++I)
-      std::cout << ((*I)->getFunction() ? (*I)->getFunction()->getName()
-                    : std::string("Indirect CallGraph node")) << ", ";
-    if (nextSCC.size() == 1 && SCCI.hasLoop())
-      std::cout << " (Has self-loop).";
-  }
-  std::cout << "\n";
-
-  return true;
-}
diff --git a/tools/analyze/analyze.cpp b/tools/analyze/analyze.cpp
deleted file mode 100644
index e6b2be5..0000000
--- a/tools/analyze/analyze.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-//===- analyze.cpp - The LLVM analyze utility -----------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This utility is designed to print out the results of running various analysis
-// passes on a program.  This is useful for understanding a program, or for
-// debugging an analysis pass.
-//
-//  analyze --help           - Output information about command line switches
-//  analyze --quiet          - Do not print analysis name before output
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Module.h"
-#include "llvm/PassManager.h"
-#include "llvm/Bytecode/Reader.h"
-#include "llvm/Assembly/Parser.h"
-#include "llvm/Analysis/Verifier.h"
-#include "llvm/Analysis/LinkAllAnalyses.h"
-#include "llvm/Target/TargetData.h"
-#include "llvm/Support/PassNameParser.h"
-#include "llvm/System/Signals.h"
-#include "llvm/Support/PluginLoader.h"
-#include "llvm/Support/Timer.h"
-#include "llvm/LinkAllVMCore.h"
-#include <algorithm>
-
-using namespace llvm;
-
-namespace {
-  cl::opt<std::string>
-  InputFilename(cl::Positional, cl::desc("<input file>"), cl::init("-"),
-                cl::value_desc("filename"));
-
-  cl::opt<bool> Quiet("q", cl::desc("Don't print analysis pass names"));
-  cl::alias    QuietA("quiet", cl::desc("Alias for -q"),
-                      cl::aliasopt(Quiet));
-
-  cl::opt<bool> NoVerify("disable-verify", cl::Hidden,
-                         cl::desc("Do not verify input module"));
-
-  // The AnalysesList is automatically populated with registered Passes by the
-  // PassNameParser.
-  //
-  cl::list<const PassInfo*, bool, FilteredPassNameParser<PassInfo::Analysis> >
-  AnalysesList(cl::desc("Analyses available:"));
-
-  Timer BytecodeLoadTimer("Bytecode Loader");
-}
-
-struct ModulePassPrinter : public ModulePass {
-  const PassInfo *PassToPrint;
-  ModulePassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
-
-  virtual bool runOnModule(Module &M) {
-    if (!Quiet) {
-      std::cout << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
-      getAnalysisID<Pass>(PassToPrint).print(std::cout, &M);
-    }
-
-    // Get and print pass...
-    return false;
-  }
-
-  virtual const char *getPassName() const { return "'Pass' Printer"; }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.addRequiredID(PassToPrint);
-    AU.setPreservesAll();
-  }
-};
-
-struct FunctionPassPrinter : public FunctionPass {
-  const PassInfo *PassToPrint;
-  FunctionPassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
-
-  virtual bool runOnFunction(Function &F) {
-    if (!Quiet) {
-      std::cout << "Printing analysis '" << PassToPrint->getPassName()
-		<< "' for function '" << F.getName() << "':\n";
-    }
-    // Get and print pass...
-    getAnalysisID<Pass>(PassToPrint).print(std::cout, F.getParent());
-    return false;
-  }
-
-  virtual const char *getPassName() const { return "FunctionPass Printer"; }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.addRequiredID(PassToPrint);
-    AU.setPreservesAll();
-  }
-};
-
-struct BasicBlockPassPrinter : public BasicBlockPass {
-  const PassInfo *PassToPrint;
-  BasicBlockPassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
-
-  virtual bool runOnBasicBlock(BasicBlock &BB) {
-    if (!Quiet) {
-      std::cout << "Printing Analysis info for BasicBlock '" << BB.getName()
-		<< "': Pass " << PassToPrint->getPassName() << ":\n";
-    }
-
-    // Get and print pass...
-    getAnalysisID<Pass>(PassToPrint).print(std::cout, BB.getParent()->getParent());
-    return false;
-  }
-
-  virtual const char *getPassName() const { return "BasicBlockPass Printer"; }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.addRequiredID(PassToPrint);
-    AU.setPreservesAll();
-  }
-};
-
-
-
-int main(int argc, char **argv) {
-  try {
-    cl::ParseCommandLineOptions(argc, argv, " llvm analysis printer tool\n");
-    sys::PrintStackTraceOnErrorSignal();
-
-    Module *CurMod = 0;
-    try {
-#if 0
-      TimeRegion RegionTimer(BytecodeLoadTimer);
-#endif
-      CurMod = ParseBytecodeFile(InputFilename);
-      if (!CurMod && !(CurMod = ParseAssemblyFile(InputFilename))){
-        std::cerr << argv[0] << ": input file didn't read correctly.\n";
-        return 1;
-      }
-    } catch (const ParseException &E) {
-      std::cerr << argv[0] << ": " << E.getMessage() << "\n";
-      return 1;
-    }
-
-    // Create a PassManager to hold and optimize the collection of passes we are
-    // about to build...
-    //
-    PassManager Passes;
-
-    // Add an appropriate TargetData instance for this module...
-    Passes.add(new TargetData(CurMod));
-
-    // Make sure the input LLVM is well formed.
-    if (!NoVerify)
-      Passes.add(createVerifierPass());
-
-    // Create a new optimization pass for each one specified on the command line
-    for (unsigned i = 0; i < AnalysesList.size(); ++i) {
-      const PassInfo *Analysis = AnalysesList[i];
-
-      if (Analysis->getNormalCtor()) {
-        Pass *P = Analysis->getNormalCtor()();
-        Passes.add(P);
-
-        if (BasicBlockPass *BBP = dynamic_cast<BasicBlockPass*>(P))
-          Passes.add(new BasicBlockPassPrinter(Analysis));
-        else if (FunctionPass *FP = dynamic_cast<FunctionPass*>(P))
-          Passes.add(new FunctionPassPrinter(Analysis));
-        else
-          Passes.add(new ModulePassPrinter(Analysis));
-
-      } else
-        std::cerr << argv[0] << ": cannot create pass: "
-                  << Analysis->getPassName() << "\n";
-    }
-
-    Passes.run(*CurMod);
-
-    delete CurMod;
-    return 0;
-
-  } catch (const std::string& msg) {
-    std::cerr << argv[0] << ": " << msg << "\n";
-  } catch (...) {
-    std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
-  }
-  return 1;
-}
diff --git a/tools/opt/Makefile b/tools/opt/Makefile
index f310639..9e4cddf 100644
--- a/tools/opt/Makefile
+++ b/tools/opt/Makefile
@@ -10,9 +10,9 @@
 TOOLNAME = opt
 REQUIRES_EH := 1
 
-USEDLIBS = LLVMBCReader.a LLVMBCWriter.a LLVMInstrumentation.a \
-	   LLVMScalarOpts.a LLVMipo.a LLVMipa.a LLVMDataStructure LLVMTransforms.a \
-	   LLVMTarget.a LLVMTransformUtils.a LLVMAnalysis.a LLVMCore.a LLVMSupport.a \
-	   LLVMbzip2.a LLVMSystem.a 
+USEDLIBS = LLVMAsmParser.a LLVMBCReader.a LLVMBCWriter.a LLVMInstrumentation.a \
+	   LLVMScalarOpts.a LLVMipo.a LLVMipa.a LLVMDataStructure \
+	   LLVMTransforms.a LLVMTarget.a LLVMTransformUtils.a LLVMAnalysis.a \
+	   LLVMCore.a LLVMSupport.a LLVMbzip2.a LLVMSystem.a 
 
 include $(LEVEL)/Makefile.common
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index 096506f..b67892b 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -8,11 +8,12 @@
 //===----------------------------------------------------------------------===//
 //
 // Optimizations may be specified an arbitrary number of times on the command
-// line, they are run in the order specified.
+// line, They are run in the order specified.
 //
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Module.h"
+#include "llvm/Assembly/Parser.h"
 #include "llvm/PassManager.h"
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Bytecode/WriteBytecodePass.h"
@@ -24,6 +25,8 @@
 #include "llvm/System/Signals.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/SystemUtils.h"
+#include "llvm/Support/Timer.h"
+#include "llvm/Analysis/LinkAllAnalyses.h"
 #include "llvm/Transforms/LinkAllPasses.h"
 #include "llvm/LinkAllVMCore.h"
 #include <fstream>
@@ -43,7 +46,8 @@
 // Other command line options...
 //
 static cl::opt<std::string>
-InputFilename(cl::Positional, cl::desc("<input bytecode>"), cl::init("-"));
+InputFilename(cl::Positional, cl::desc("<input bytecode file>"), 
+    cl::init("-"), cl::value_desc("filename"));
 
 static cl::opt<std::string>
 OutputFilename("o", cl::desc("Override output filename"),
@@ -68,6 +72,91 @@
 static cl::alias
 QuietA("quiet", cl::desc("Alias for -q"), cl::aliasopt(Quiet));
 
+static cl::opt<bool>
+AnalyzeOnly("analyze", cl::desc("Only perform analysis, no optimization"));
+
+// The AnalysesList is automatically populated with registered Passes by the
+// PassNameParser.
+static 
+  cl::list<const PassInfo*, bool, FilteredPassNameParser<PassInfo::Analysis> >
+  AnalysesList(cl::desc("Analyses available:"));
+
+static Timer BytecodeLoadTimer("Bytecode Loader");
+
+// ---------- Define Printers for module and function passes ------------
+namespace {
+
+struct ModulePassPrinter : public ModulePass {
+  const PassInfo *PassToPrint;
+  ModulePassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
+
+  virtual bool runOnModule(Module &M) {
+    if (!Quiet) {
+      std::cout << "Printing analysis '" << PassToPrint->getPassName() 
+                << "':\n";
+      getAnalysisID<Pass>(PassToPrint).print(std::cout, &M);
+    }
+
+    // Get and print pass...
+    return false;
+  }
+
+  virtual const char *getPassName() const { return "'Pass' Printer"; }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.addRequiredID(PassToPrint);
+    AU.setPreservesAll();
+  }
+};
+
+struct FunctionPassPrinter : public FunctionPass {
+  const PassInfo *PassToPrint;
+  FunctionPassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
+
+  virtual bool runOnFunction(Function &F) {
+    if (!Quiet) {
+      std::cout << "Printing analysis '" << PassToPrint->getPassName()
+		<< "' for function '" << F.getName() << "':\n";
+    }
+    // Get and print pass...
+    getAnalysisID<Pass>(PassToPrint).print(std::cout, F.getParent());
+    return false;
+  }
+
+  virtual const char *getPassName() const { return "FunctionPass Printer"; }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.addRequiredID(PassToPrint);
+    AU.setPreservesAll();
+  }
+};
+
+struct BasicBlockPassPrinter : public BasicBlockPass {
+  const PassInfo *PassToPrint;
+  BasicBlockPassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
+
+  virtual bool runOnBasicBlock(BasicBlock &BB) {
+    if (!Quiet) {
+      std::cout << "Printing Analysis info for BasicBlock '" << BB.getName()
+		<< "': Pass " << PassToPrint->getPassName() << ":\n";
+    }
+
+    // Get and print pass...
+    getAnalysisID<Pass>(PassToPrint).print(
+      std::cout, BB.getParent()->getParent());
+    return false;
+  }
+
+  virtual const char *getPassName() const { return "BasicBlockPass Printer"; }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.addRequiredID(PassToPrint);
+    AU.setPreservesAll();
+  }
+};
+
+} // anonymous namespace
+
 
 //===----------------------------------------------------------------------===//
 // main for opt
@@ -75,9 +164,63 @@
 int main(int argc, char **argv) {
   try {
     cl::ParseCommandLineOptions(argc, argv,
-                                " llvm .bc -> .bc modular optimizer\n");
+      " llvm .bc -> .bc modular optimizer and analysis printer \n");
     sys::PrintStackTraceOnErrorSignal();
 
+    if (AnalyzeOnly) {
+      Module *CurMod = 0;
+      try {
+#if 0
+        TimeRegion RegionTimer(BytecodeLoadTimer);
+#endif
+        CurMod = ParseBytecodeFile(InputFilename);
+        if (!CurMod && !(CurMod = ParseAssemblyFile(InputFilename))){
+          std::cerr << argv[0] << ": input file didn't read correctly.\n";
+          return 1;
+        }
+      } catch (const ParseException &E) {
+        std::cerr << argv[0] << ": " << E.getMessage() << "\n";
+        return 1;
+      }
+
+      // Create a PassManager to hold and optimize the collection of passes we 
+      // are about to build...
+      PassManager Passes;
+
+      // Add an appropriate TargetData instance for this module...
+      Passes.add(new TargetData(CurMod));
+
+      // Make sure the input LLVM is well formed.
+      if (!NoVerify)
+        Passes.add(createVerifierPass());
+
+      // Create a new optimization pass for each one specified on the 
+      // command line
+      for (unsigned i = 0; i < AnalysesList.size(); ++i) {
+        const PassInfo *Analysis = AnalysesList[i];
+
+        if (Analysis->getNormalCtor()) {
+          Pass *P = Analysis->getNormalCtor()();
+          Passes.add(P);
+
+          if (BasicBlockPass *BBP = dynamic_cast<BasicBlockPass*>(P))
+            Passes.add(new BasicBlockPassPrinter(Analysis));
+          else if (FunctionPass *FP = dynamic_cast<FunctionPass*>(P))
+            Passes.add(new FunctionPassPrinter(Analysis));
+          else
+            Passes.add(new ModulePassPrinter(Analysis));
+
+        } else
+          std::cerr << argv[0] << ": cannot create pass: "
+                    << Analysis->getPassName() << "\n";
+      }
+
+      Passes.run(*CurMod);
+
+      delete CurMod;
+      return 0;
+    }
+
     // Allocate a full target machine description only if necessary...
     // FIXME: The choice of target should be controllable on the command line.
     std::auto_ptr<TargetMachine> target;
@@ -169,6 +312,7 @@
     Passes.run(*M.get());
 
     return 0;
+
   } catch (const std::string& msg) {
     std::cerr << argv[0] << ": " << msg << "\n";
   } catch (...) {
