Turn on the AddReadAttrs pass.
[oota-llvm.git] / tools / opt / opt.cpp
1 //===- opt.cpp - The LLVM Modular Optimizer -------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Optimizations may be specified an arbitrary number of times on the command
11 // line, They are run in the order specified.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/Module.h"
16 #include "llvm/ModuleProvider.h"
17 #include "llvm/PassManager.h"
18 #include "llvm/CallGraphSCCPass.h"
19 #include "llvm/Bitcode/ReaderWriter.h"
20 #include "llvm/Assembly/PrintModulePass.h"
21 #include "llvm/Analysis/Verifier.h"
22 #include "llvm/Analysis/LoopPass.h"
23 #include "llvm/Analysis/CallGraph.h"
24 #include "llvm/Target/TargetData.h"
25 #include "llvm/Target/TargetMachine.h"
26 #include "llvm/Support/PassNameParser.h"
27 #include "llvm/System/Signals.h"
28 #include "llvm/Support/ManagedStatic.h"
29 #include "llvm/Support/MemoryBuffer.h"
30 #include "llvm/Support/PluginLoader.h"
31 #include "llvm/Support/Streams.h"
32 #include "llvm/Support/SystemUtils.h"
33 #include "llvm/LinkAllPasses.h"
34 #include "llvm/LinkAllVMCore.h"
35 #include <iostream>
36 #include <fstream>
37 #include <memory>
38 #include <algorithm>
39 using namespace llvm;
40
41 // The OptimizationList is automatically populated with registered Passes by the
42 // PassNameParser.
43 //
44 static cl::list<const PassInfo*, bool, PassNameParser>
45 PassList(cl::desc("Optimizations available:"));
46
47 // Other command line options...
48 //
49 static cl::opt<std::string>
50 InputFilename(cl::Positional, cl::desc("<input bitcode file>"), 
51     cl::init("-"), cl::value_desc("filename"));
52
53 static cl::opt<std::string>
54 OutputFilename("o", cl::desc("Override output filename"),
55                cl::value_desc("filename"), cl::init("-"));
56
57 static cl::opt<bool>
58 Force("f", cl::desc("Overwrite output files"));
59
60 static cl::opt<bool>
61 PrintEachXForm("p", cl::desc("Print module after each transformation"));
62
63 static cl::opt<bool>
64 NoOutput("disable-output",
65          cl::desc("Do not write result bitcode file"), cl::Hidden);
66
67 static cl::opt<bool>
68 NoVerify("disable-verify", cl::desc("Do not verify result module"), cl::Hidden);
69
70 static cl::opt<bool>
71 VerifyEach("verify-each", cl::desc("Verify after each transform"));
72
73 static cl::opt<bool>
74 StripDebug("strip-debug",
75            cl::desc("Strip debugger symbol info from translation unit"));
76
77 static cl::opt<bool>
78 DisableInline("disable-inlining", cl::desc("Do not run the inliner pass"));
79
80 static cl::opt<bool> 
81 DisableOptimizations("disable-opt", 
82                      cl::desc("Do not run any optimization passes"));
83
84 static cl::opt<bool>
85 StandardCompileOpts("std-compile-opts", 
86                    cl::desc("Include the standard compile time optimizations"));
87
88 static cl::opt<bool>
89 OptLevelO1("O1",
90            cl::desc("Optimization level 1. Similar to llvm-gcc -O1"));
91
92 static cl::opt<bool>
93 OptLevelO2("O2",
94            cl::desc("Optimization level 2. Similar to llvm-gcc -O2"));
95
96 static cl::opt<bool>
97 OptLevelO3("O3",
98            cl::desc("Optimization level 3. Similar to llvm-gcc -O3"));
99
100 static cl::opt<bool>
101 UnitAtATime("funit-at-a-time",
102             cl::desc("Enable IPO. This is same as llvm-gcc's -funit-at-a-time"));
103
104 static cl::opt<bool>
105 DisableSimplifyLibCalls("disable-simplify-libcalls",
106                         cl::desc("Disable simplify-libcalls"));
107
108 static cl::opt<bool>
109 Quiet("q", cl::desc("Obsolete option"), cl::Hidden);
110
111 static cl::alias
112 QuietA("quiet", cl::desc("Alias for -q"), cl::aliasopt(Quiet));
113
114 static cl::opt<bool>
115 AnalyzeOnly("analyze", cl::desc("Only perform analysis, no optimization"));
116
117 // ---------- Define Printers for module and function passes ------------
118 namespace {
119
120 struct CallGraphSCCPassPrinter : public CallGraphSCCPass {
121   static char ID;
122   const PassInfo *PassToPrint;
123   CallGraphSCCPassPrinter(const PassInfo *PI) : 
124     CallGraphSCCPass((intptr_t)&ID), PassToPrint(PI) {}
125
126   virtual bool runOnSCC(const std::vector<CallGraphNode *>&SCC) {
127     if (!Quiet) {
128       cout << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
129
130       for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
131         Function *F = SCC[i]->getFunction();
132         if (F) 
133           getAnalysisID<Pass>(PassToPrint).print(cout, F->getParent());
134       }
135     }
136     // Get and print pass...
137     return false;
138   }
139   
140   virtual const char *getPassName() const { return "'Pass' Printer"; }
141
142   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
143     AU.addRequiredID(PassToPrint);
144     AU.setPreservesAll();
145   }
146 };
147
148 char CallGraphSCCPassPrinter::ID = 0;
149
150 struct ModulePassPrinter : public ModulePass {
151   static char ID;
152   const PassInfo *PassToPrint;
153   ModulePassPrinter(const PassInfo *PI) : ModulePass((intptr_t)&ID),
154                                           PassToPrint(PI) {}
155
156   virtual bool runOnModule(Module &M) {
157     if (!Quiet) {
158       cout << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
159       getAnalysisID<Pass>(PassToPrint).print(cout, &M);
160     }
161
162     // Get and print pass...
163     return false;
164   }
165
166   virtual const char *getPassName() const { return "'Pass' Printer"; }
167
168   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
169     AU.addRequiredID(PassToPrint);
170     AU.setPreservesAll();
171   }
172 };
173
174 char ModulePassPrinter::ID = 0;
175 struct FunctionPassPrinter : public FunctionPass {
176   const PassInfo *PassToPrint;
177   static char ID;
178   FunctionPassPrinter(const PassInfo *PI) : FunctionPass((intptr_t)&ID),
179                                             PassToPrint(PI) {}
180
181   virtual bool runOnFunction(Function &F) {
182     if (!Quiet) { 
183       cout << "Printing analysis '" << PassToPrint->getPassName()
184            << "' for function '" << F.getName() << "':\n";
185     }
186     // Get and print pass...
187     getAnalysisID<Pass>(PassToPrint).print(cout, F.getParent());
188     return false;
189   }
190
191   virtual const char *getPassName() const { return "FunctionPass Printer"; }
192
193   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
194     AU.addRequiredID(PassToPrint);
195     AU.setPreservesAll();
196   }
197 };
198
199 char FunctionPassPrinter::ID = 0;
200
201 struct LoopPassPrinter : public LoopPass {
202   static char ID;
203   const PassInfo *PassToPrint;
204   LoopPassPrinter(const PassInfo *PI) : 
205     LoopPass((intptr_t)&ID), PassToPrint(PI) {}
206
207   virtual bool runOnLoop(Loop *L, LPPassManager &LPM) {
208     if (!Quiet) {
209       cout << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
210       getAnalysisID<Pass>(PassToPrint).print(cout, 
211                                   L->getHeader()->getParent()->getParent());
212     }
213     // Get and print pass...
214     return false;
215   }
216   
217   virtual const char *getPassName() const { return "'Pass' Printer"; }
218
219   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
220     AU.addRequiredID(PassToPrint);
221     AU.setPreservesAll();
222   }
223 };
224
225 char LoopPassPrinter::ID = 0;
226
227 struct BasicBlockPassPrinter : public BasicBlockPass {
228   const PassInfo *PassToPrint;
229   static char ID;
230   BasicBlockPassPrinter(const PassInfo *PI) 
231     : BasicBlockPass((intptr_t)&ID), PassToPrint(PI) {}
232
233   virtual bool runOnBasicBlock(BasicBlock &BB) {
234     if (!Quiet) {
235       cout << "Printing Analysis info for BasicBlock '" << BB.getName()
236            << "': Pass " << PassToPrint->getPassName() << ":\n";
237     }
238
239     // Get and print pass...
240     getAnalysisID<Pass>(PassToPrint).print(cout, BB.getParent()->getParent());
241     return false;
242   }
243
244   virtual const char *getPassName() const { return "BasicBlockPass Printer"; }
245
246   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
247     AU.addRequiredID(PassToPrint);
248     AU.setPreservesAll();
249   }
250 };
251
252 char BasicBlockPassPrinter::ID = 0;
253 inline void addPass(PassManager &PM, Pass *P) {
254   // Add the pass to the pass manager...
255   PM.add(P);
256
257   // If we are verifying all of the intermediate steps, add the verifier...
258   if (VerifyEach) PM.add(createVerifierPass());
259 }
260
261 /// AddOptimizationPasses - This routine adds optimization passes 
262 /// based on selected optimization level, OptLevel. This routine 
263 /// duplicates llvm-gcc behaviour.
264 ///
265 /// OptLevel - Optimization Level
266   void AddOptimizationPasses(PassManager &MPM, FunctionPassManager &FPM,
267                              unsigned OptLevel) {
268
269   if (OptLevel == 0) 
270     return;
271
272   FPM.add(createCFGSimplificationPass());
273   if (OptLevel == 1)
274     FPM.add(createPromoteMemoryToRegisterPass());
275   else
276     FPM.add(createScalarReplAggregatesPass());
277   FPM.add(createInstructionCombiningPass());
278
279   if (UnitAtATime)
280     MPM.add(createRaiseAllocationsPass());      // call %malloc -> malloc inst
281   MPM.add(createCFGSimplificationPass());       // Clean up disgusting code
282   MPM.add(createPromoteMemoryToRegisterPass()); // Kill useless allocas
283   if (UnitAtATime) {
284     MPM.add(createGlobalOptimizerPass());       // OptLevel out global vars
285     MPM.add(createGlobalDCEPass());             // Remove unused fns and globs
286     MPM.add(createIPConstantPropagationPass()); // IP Constant Propagation
287     MPM.add(createDeadArgEliminationPass());    // Dead argument elimination
288   }
289   MPM.add(createInstructionCombiningPass());    // Clean up after IPCP & DAE
290   MPM.add(createCFGSimplificationPass());       // Clean up after IPCP & DAE
291   if (UnitAtATime) {
292     MPM.add(createPruneEHPass());               // Remove dead EH info
293     MPM.add(createAddReadAttrsPass());          // Set readonly/readnone attrs
294   }
295   if (OptLevel > 1)
296     MPM.add(createFunctionInliningPass());      // Inline small functions
297   if (OptLevel > 2)
298     MPM.add(createArgumentPromotionPass());   // Scalarize uninlined fn args
299   if (!DisableSimplifyLibCalls)
300     MPM.add(createSimplifyLibCallsPass());    // Library Call Optimizations
301   MPM.add(createInstructionCombiningPass());  // Cleanup for scalarrepl.
302   MPM.add(createJumpThreadingPass());         // Thread jumps.
303   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
304   MPM.add(createScalarReplAggregatesPass());  // Break up aggregate allocas
305   MPM.add(createInstructionCombiningPass());  // Combine silly seq's
306   MPM.add(createCondPropagationPass());       // Propagate conditionals
307   MPM.add(createTailCallEliminationPass());   // Eliminate tail calls
308   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
309   MPM.add(createReassociatePass());           // Reassociate expressions
310   MPM.add(createLoopRotatePass());            // Rotate Loop
311   MPM.add(createLICMPass());                  // Hoist loop invariants
312   MPM.add(createLoopUnswitchPass());
313   MPM.add(createLoopIndexSplitPass());        // Split loop index
314   MPM.add(createInstructionCombiningPass());  
315   MPM.add(createIndVarSimplifyPass());        // Canonicalize indvars
316   MPM.add(createLoopDeletionPass());          // Delete dead loops
317   if (OptLevel > 1)
318     MPM.add(createLoopUnrollPass());          // Unroll small loops
319   MPM.add(createInstructionCombiningPass());  // Clean up after the unroller
320   MPM.add(createGVNPass());                   // Remove redundancies
321   MPM.add(createMemCpyOptPass());             // Remove memcpy / form memset
322   MPM.add(createSCCPPass());                  // Constant prop with SCCP
323   
324   // Run instcombine after redundancy elimination to exploit opportunities
325   // opened up by them.
326   MPM.add(createInstructionCombiningPass());
327   MPM.add(createCondPropagationPass());       // Propagate conditionals
328   MPM.add(createDeadStoreEliminationPass());  // Delete dead stores
329   MPM.add(createAggressiveDCEPass());   // Delete dead instructions
330   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
331   
332   if (UnitAtATime) {
333     MPM.add(createStripDeadPrototypesPass());   // Get rid of dead prototypes
334     MPM.add(createDeadTypeEliminationPass());   // Eliminate dead types
335   }
336   
337   if (OptLevel > 1 && UnitAtATime)
338     MPM.add(createConstantMergePass());       // Merge dup global constants 
339   
340   return;
341 }
342
343 void AddStandardCompilePasses(PassManager &PM) {
344   PM.add(createVerifierPass());                  // Verify that input is correct
345
346   addPass(PM, createLowerSetJmpPass());          // Lower llvm.setjmp/.longjmp
347
348   // If the -strip-debug command line option was specified, do it.
349   if (StripDebug)
350     addPass(PM, createStripSymbolsPass(true));
351
352   if (DisableOptimizations) return;
353
354   addPass(PM, createRaiseAllocationsPass());     // call %malloc -> malloc inst
355   addPass(PM, createCFGSimplificationPass());    // Clean up disgusting code
356   addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
357   addPass(PM, createGlobalOptimizerPass());      // Optimize out global vars
358   addPass(PM, createGlobalDCEPass());            // Remove unused fns and globs
359   addPass(PM, createIPConstantPropagationPass());// IP Constant Propagation
360   addPass(PM, createDeadArgEliminationPass());   // Dead argument elimination
361   addPass(PM, createInstructionCombiningPass()); // Clean up after IPCP & DAE
362   addPass(PM, createCFGSimplificationPass());    // Clean up after IPCP & DAE
363
364   addPass(PM, createPruneEHPass());              // Remove dead EH info
365   addPass(PM, createAddReadAttrsPass());         // Set readonly/readnone attrs
366
367   if (!DisableInline)
368     addPass(PM, createFunctionInliningPass());   // Inline small functions
369   addPass(PM, createArgumentPromotionPass());    // Scalarize uninlined fn args
370
371   addPass(PM, createSimplifyLibCallsPass());     // Library Call Optimizations
372   addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
373   addPass(PM, createJumpThreadingPass());        // Thread jumps.
374   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
375   addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
376   addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
377   addPass(PM, createCondPropagationPass());      // Propagate conditionals
378
379   addPass(PM, createTailCallEliminationPass());  // Eliminate tail calls
380   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
381   addPass(PM, createReassociatePass());          // Reassociate expressions
382   addPass(PM, createLoopRotatePass());
383   addPass(PM, createLICMPass());                 // Hoist loop invariants
384   addPass(PM, createLoopUnswitchPass());         // Unswitch loops.
385   addPass(PM, createLoopIndexSplitPass());       // Index split loops.
386   // FIXME : Removing instcombine causes nestedloop regression.
387   addPass(PM, createInstructionCombiningPass());
388   addPass(PM, createIndVarSimplifyPass());       // Canonicalize indvars
389   addPass(PM, createLoopDeletionPass());         // Delete dead loops
390   addPass(PM, createLoopUnrollPass());           // Unroll small loops
391   addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller
392   addPass(PM, createGVNPass());                  // Remove redundancies
393   addPass(PM, createMemCpyOptPass());            // Remove memcpy / form memset
394   addPass(PM, createSCCPPass());                 // Constant prop with SCCP
395
396   // Run instcombine after redundancy elimination to exploit opportunities
397   // opened up by them.
398   addPass(PM, createInstructionCombiningPass());
399   addPass(PM, createCondPropagationPass());      // Propagate conditionals
400
401   addPass(PM, createDeadStoreEliminationPass()); // Delete dead stores
402   addPass(PM, createAggressiveDCEPass());        // Delete dead instructions
403   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
404   addPass(PM, createStripDeadPrototypesPass());  // Get rid of dead prototypes
405   addPass(PM, createDeadTypeEliminationPass());  // Eliminate dead types
406   addPass(PM, createConstantMergePass());        // Merge dup global constants
407 }
408
409 } // anonymous namespace
410
411
412 //===----------------------------------------------------------------------===//
413 // main for opt
414 //
415 int main(int argc, char **argv) {
416   llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
417   try {
418     cl::ParseCommandLineOptions(argc, argv,
419       "llvm .bc -> .bc modular optimizer and analysis printer\n");
420     sys::PrintStackTraceOnErrorSignal();
421
422     // Allocate a full target machine description only if necessary.
423     // FIXME: The choice of target should be controllable on the command line.
424     std::auto_ptr<TargetMachine> target;
425
426     std::string ErrorMessage;
427
428     // Load the input module...
429     std::auto_ptr<Module> M;
430     if (MemoryBuffer *Buffer
431           = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage)) {
432       M.reset(ParseBitcodeFile(Buffer, &ErrorMessage));
433       delete Buffer;
434     }
435     
436     if (M.get() == 0) {
437       cerr << argv[0] << ": ";
438       if (ErrorMessage.size())
439         cerr << ErrorMessage << "\n";
440       else
441         cerr << "bitcode didn't read correctly.\n";
442       return 1;
443     }
444
445     // Figure out what stream we are supposed to write to...
446     // FIXME: cout is not binary!
447     std::ostream *Out = &std::cout;  // Default to printing to stdout...
448     if (OutputFilename != "-") {
449       if (!Force && std::ifstream(OutputFilename.c_str())) {
450         // If force is not specified, make sure not to overwrite a file!
451         cerr << argv[0] << ": error opening '" << OutputFilename
452              << "': file exists!\n"
453              << "Use -f command line argument to force output\n";
454         return 1;
455       }
456       std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
457                                    std::ios::binary;
458       Out = new std::ofstream(OutputFilename.c_str(), io_mode);
459
460       if (!Out->good()) {
461         cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
462         return 1;
463       }
464
465       // Make sure that the Output file gets unlinked from the disk if we get a
466       // SIGINT
467       sys::RemoveFileOnSignal(sys::Path(OutputFilename));
468     }
469
470     // If the output is set to be emitted to standard out, and standard out is a
471     // console, print out a warning message and refuse to do it.  We don't
472     // impress anyone by spewing tons of binary goo to a terminal.
473     if (!Force && !NoOutput && CheckBitcodeOutputToConsole(Out,!Quiet)) {
474       NoOutput = true;
475     }
476
477     // Create a PassManager to hold and optimize the collection of passes we are
478     // about to build...
479     //
480     PassManager Passes;
481
482     // Add an appropriate TargetData instance for this module...
483     Passes.add(new TargetData(M.get()));
484
485     FunctionPassManager *FPasses = NULL;
486     if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
487       FPasses = new FunctionPassManager(new ExistingModuleProvider(M.get()));
488       FPasses->add(new TargetData(M.get()));
489     }
490       
491     // If the -strip-debug command line option was specified, add it.  If
492     // -std-compile-opts was also specified, it will handle StripDebug.
493     if (StripDebug && !StandardCompileOpts)
494       addPass(Passes, createStripSymbolsPass(true));
495
496     // Create a new optimization pass for each one specified on the command line
497     for (unsigned i = 0; i < PassList.size(); ++i) {
498       // Check to see if -std-compile-opts was specified before this option.  If
499       // so, handle it.
500       if (StandardCompileOpts && 
501           StandardCompileOpts.getPosition() < PassList.getPosition(i)) {
502         AddStandardCompilePasses(Passes);
503         StandardCompileOpts = false;
504       }
505       
506       if (OptLevelO1 && OptLevelO1.getPosition() < PassList.getPosition(i)) {
507         AddOptimizationPasses(Passes, *FPasses, 1);
508         OptLevelO1 = false;
509       }
510
511       if (OptLevelO2 && OptLevelO2.getPosition() < PassList.getPosition(i)) {
512         AddOptimizationPasses(Passes, *FPasses, 2);
513         OptLevelO2 = false;
514       }
515
516       if (OptLevelO3 && OptLevelO3.getPosition() < PassList.getPosition(i)) {
517         AddOptimizationPasses(Passes, *FPasses, 3);
518         OptLevelO3 = false;
519       }
520
521       const PassInfo *PassInf = PassList[i];
522       Pass *P = 0;
523       if (PassInf->getNormalCtor())
524         P = PassInf->getNormalCtor()();
525       else
526         cerr << argv[0] << ": cannot create pass: "
527              << PassInf->getPassName() << "\n";
528       if (P) {
529         addPass(Passes, P);
530         
531         if (AnalyzeOnly) {
532           if (dynamic_cast<BasicBlockPass*>(P))
533             Passes.add(new BasicBlockPassPrinter(PassInf));
534           else if (dynamic_cast<LoopPass*>(P))
535             Passes.add(new  LoopPassPrinter(PassInf));
536           else if (dynamic_cast<FunctionPass*>(P))
537             Passes.add(new FunctionPassPrinter(PassInf));
538           else if (dynamic_cast<CallGraphSCCPass*>(P))
539             Passes.add(new CallGraphSCCPassPrinter(PassInf));
540           else
541             Passes.add(new ModulePassPrinter(PassInf));
542         }
543       }
544       
545       if (PrintEachXForm)
546         Passes.add(new PrintModulePass(&cerr));
547     }
548     
549     // If -std-compile-opts was specified at the end of the pass list, add them.
550     if (StandardCompileOpts) {
551       AddStandardCompilePasses(Passes);
552       StandardCompileOpts = false;
553     }    
554
555     if (OptLevelO1) {
556         AddOptimizationPasses(Passes, *FPasses, 1);
557       }
558
559     if (OptLevelO2) {
560         AddOptimizationPasses(Passes, *FPasses, 2);
561       }
562
563     if (OptLevelO3) {
564         AddOptimizationPasses(Passes, *FPasses, 3);
565       }
566
567     if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
568       for (Module::iterator I = M.get()->begin(), E = M.get()->end();
569            I != E; ++I)
570         FPasses->run(*I);
571     }
572
573     // Check that the module is well formed on completion of optimization
574     if (!NoVerify && !VerifyEach)
575       Passes.add(createVerifierPass());
576
577     // Write bitcode out to disk or cout as the last step...
578     if (!NoOutput && !AnalyzeOnly)
579       Passes.add(CreateBitcodeWriterPass(*Out));
580
581     // Now that we have all of the passes ready, run them.
582     Passes.run(*M.get());
583
584     // Delete the ofstream.
585     if (Out != &std::cout) 
586       delete Out;
587     return 0;
588
589   } catch (const std::string& msg) {
590     cerr << argv[0] << ": " << msg << "\n";
591   } catch (...) {
592     cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
593   }
594   llvm_shutdown();
595   return 1;
596 }