Fix comments, help messages.
[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   if (OptLevel > 1)
294     MPM.add(createFunctionInliningPass());      // Inline small functions
295   if (OptLevel > 2)
296     MPM.add(createArgumentPromotionPass());   // Scalarize uninlined fn args
297   if (!DisableSimplifyLibCalls)
298     MPM.add(createSimplifyLibCallsPass());    // Library Call Optimizations
299   MPM.add(createInstructionCombiningPass());  // Cleanup for scalarrepl.
300   MPM.add(createJumpThreadingPass());         // Thread jumps.
301   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
302   MPM.add(createScalarReplAggregatesPass());  // Break up aggregate allocas
303   MPM.add(createInstructionCombiningPass());  // Combine silly seq's
304   MPM.add(createCondPropagationPass());       // Propagate conditionals
305   MPM.add(createTailCallEliminationPass());   // Eliminate tail calls
306   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
307   MPM.add(createReassociatePass());           // Reassociate expressions
308   MPM.add(createLoopRotatePass());            // Rotate Loop
309   MPM.add(createLICMPass());                  // Hoist loop invariants
310   MPM.add(createLoopUnswitchPass());
311   MPM.add(createLoopIndexSplitPass());        // Split loop index
312   MPM.add(createInstructionCombiningPass());  
313   MPM.add(createIndVarSimplifyPass());        // Canonicalize indvars
314   MPM.add(createLoopDeletionPass());          // Delete dead loops
315   if (OptLevel > 1)
316     MPM.add(createLoopUnrollPass());          // Unroll small loops
317   MPM.add(createInstructionCombiningPass());  // Clean up after the unroller
318   MPM.add(createGVNPass());                   // Remove redundancies
319   MPM.add(createMemCpyOptPass());             // Remove memcpy / form memset
320   MPM.add(createSCCPPass());                  // Constant prop with SCCP
321   
322   // Run instcombine after redundancy elimination to exploit opportunities
323   // opened up by them.
324   MPM.add(createInstructionCombiningPass());
325   MPM.add(createCondPropagationPass());       // Propagate conditionals
326   MPM.add(createDeadStoreEliminationPass());  // Delete dead stores
327   MPM.add(createAggressiveDCEPass());   // Delete dead instructions
328   MPM.add(createCFGSimplificationPass());     // Merge & remove BBs
329   
330   if (UnitAtATime) {
331     MPM.add(createStripDeadPrototypesPass());   // Get rid of dead prototypes
332     MPM.add(createDeadTypeEliminationPass());   // Eliminate dead types
333   }
334   
335   if (OptLevel > 1 && UnitAtATime)
336     MPM.add(createConstantMergePass());       // Merge dup global constants 
337   
338   return;
339 }
340
341 void AddStandardCompilePasses(PassManager &PM) {
342   PM.add(createVerifierPass());                  // Verify that input is correct
343
344   addPass(PM, createLowerSetJmpPass());          // Lower llvm.setjmp/.longjmp
345
346   // If the -strip-debug command line option was specified, do it.
347   if (StripDebug)
348     addPass(PM, createStripSymbolsPass(true));
349
350   if (DisableOptimizations) return;
351
352   addPass(PM, createRaiseAllocationsPass());     // call %malloc -> malloc inst
353   addPass(PM, createCFGSimplificationPass());    // Clean up disgusting code
354   addPass(PM, createPromoteMemoryToRegisterPass());// Kill useless allocas
355   addPass(PM, createGlobalOptimizerPass());      // Optimize out global vars
356   addPass(PM, createGlobalDCEPass());            // Remove unused fns and globs
357   addPass(PM, createIPConstantPropagationPass());// IP Constant Propagation
358   addPass(PM, createDeadArgEliminationPass());   // Dead argument elimination
359   addPass(PM, createInstructionCombiningPass()); // Clean up after IPCP & DAE
360   addPass(PM, createCFGSimplificationPass());    // Clean up after IPCP & DAE
361
362   addPass(PM, createPruneEHPass());              // Remove dead EH info
363
364   if (!DisableInline)
365     addPass(PM, createFunctionInliningPass());   // Inline small functions
366   addPass(PM, createArgumentPromotionPass());    // Scalarize uninlined fn args
367
368   addPass(PM, createSimplifyLibCallsPass());     // Library Call Optimizations
369   addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
370   addPass(PM, createJumpThreadingPass());        // Thread jumps.
371   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
372   addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
373   addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
374   addPass(PM, createCondPropagationPass());      // Propagate conditionals
375
376   addPass(PM, createTailCallEliminationPass());  // Eliminate tail calls
377   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
378   addPass(PM, createReassociatePass());          // Reassociate expressions
379   addPass(PM, createLoopRotatePass());
380   addPass(PM, createLICMPass());                 // Hoist loop invariants
381   addPass(PM, createLoopUnswitchPass());         // Unswitch loops.
382   addPass(PM, createLoopIndexSplitPass());       // Index split loops.
383   // FIXME : Removing instcombine causes nestedloop regression.
384   addPass(PM, createInstructionCombiningPass());
385   addPass(PM, createIndVarSimplifyPass());       // Canonicalize indvars
386   addPass(PM, createLoopDeletionPass());         // Delete dead loops
387   addPass(PM, createLoopUnrollPass());           // Unroll small loops
388   addPass(PM, createInstructionCombiningPass()); // Clean up after the unroller
389   addPass(PM, createGVNPass());                  // Remove redundancies
390   addPass(PM, createMemCpyOptPass());            // Remove memcpy / form memset
391   addPass(PM, createSCCPPass());                 // Constant prop with SCCP
392
393   // Run instcombine after redundancy elimination to exploit opportunities
394   // opened up by them.
395   addPass(PM, createInstructionCombiningPass());
396   addPass(PM, createCondPropagationPass());      // Propagate conditionals
397
398   addPass(PM, createDeadStoreEliminationPass()); // Delete dead stores
399   addPass(PM, createAggressiveDCEPass());        // Delete dead instructions
400   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
401   addPass(PM, createStripDeadPrototypesPass());  // Get rid of dead prototypes
402   addPass(PM, createDeadTypeEliminationPass());  // Eliminate dead types
403   addPass(PM, createConstantMergePass());        // Merge dup global constants
404 }
405
406 } // anonymous namespace
407
408
409 //===----------------------------------------------------------------------===//
410 // main for opt
411 //
412 int main(int argc, char **argv) {
413   llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
414   try {
415     cl::ParseCommandLineOptions(argc, argv,
416       "llvm .bc -> .bc modular optimizer and analysis printer\n");
417     sys::PrintStackTraceOnErrorSignal();
418
419     // Allocate a full target machine description only if necessary.
420     // FIXME: The choice of target should be controllable on the command line.
421     std::auto_ptr<TargetMachine> target;
422
423     std::string ErrorMessage;
424
425     // Load the input module...
426     std::auto_ptr<Module> M;
427     if (MemoryBuffer *Buffer
428           = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage)) {
429       M.reset(ParseBitcodeFile(Buffer, &ErrorMessage));
430       delete Buffer;
431     }
432     
433     if (M.get() == 0) {
434       cerr << argv[0] << ": ";
435       if (ErrorMessage.size())
436         cerr << ErrorMessage << "\n";
437       else
438         cerr << "bitcode didn't read correctly.\n";
439       return 1;
440     }
441
442     // Figure out what stream we are supposed to write to...
443     // FIXME: cout is not binary!
444     std::ostream *Out = &std::cout;  // Default to printing to stdout...
445     if (OutputFilename != "-") {
446       if (!Force && std::ifstream(OutputFilename.c_str())) {
447         // If force is not specified, make sure not to overwrite a file!
448         cerr << argv[0] << ": error opening '" << OutputFilename
449              << "': file exists!\n"
450              << "Use -f command line argument to force output\n";
451         return 1;
452       }
453       std::ios::openmode io_mode = std::ios::out | std::ios::trunc |
454                                    std::ios::binary;
455       Out = new std::ofstream(OutputFilename.c_str(), io_mode);
456
457       if (!Out->good()) {
458         cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
459         return 1;
460       }
461
462       // Make sure that the Output file gets unlinked from the disk if we get a
463       // SIGINT
464       sys::RemoveFileOnSignal(sys::Path(OutputFilename));
465     }
466
467     // If the output is set to be emitted to standard out, and standard out is a
468     // console, print out a warning message and refuse to do it.  We don't
469     // impress anyone by spewing tons of binary goo to a terminal.
470     if (!Force && !NoOutput && CheckBitcodeOutputToConsole(Out,!Quiet)) {
471       NoOutput = true;
472     }
473
474     // Create a PassManager to hold and optimize the collection of passes we are
475     // about to build...
476     //
477     PassManager Passes;
478
479     // Add an appropriate TargetData instance for this module...
480     Passes.add(new TargetData(M.get()));
481
482     FunctionPassManager *FPasses = NULL;
483     if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
484       FPasses = new FunctionPassManager(new ExistingModuleProvider(M.get()));
485       FPasses->add(new TargetData(M.get()));
486     }
487       
488     // If the -strip-debug command line option was specified, add it.  If
489     // -std-compile-opts was also specified, it will handle StripDebug.
490     if (StripDebug && !StandardCompileOpts)
491       addPass(Passes, createStripSymbolsPass(true));
492
493     // Create a new optimization pass for each one specified on the command line
494     for (unsigned i = 0; i < PassList.size(); ++i) {
495       // Check to see if -std-compile-opts was specified before this option.  If
496       // so, handle it.
497       if (StandardCompileOpts && 
498           StandardCompileOpts.getPosition() < PassList.getPosition(i)) {
499         AddStandardCompilePasses(Passes);
500         StandardCompileOpts = false;
501       }
502       
503       if (OptLevelO1 && OptLevelO1.getPosition() < PassList.getPosition(i)) {
504         AddOptimizationPasses(Passes, *FPasses, 1);
505         OptLevelO1 = false;
506       }
507
508       if (OptLevelO2 && OptLevelO2.getPosition() < PassList.getPosition(i)) {
509         AddOptimizationPasses(Passes, *FPasses, 2);
510         OptLevelO2 = false;
511       }
512
513       if (OptLevelO3 && OptLevelO3.getPosition() < PassList.getPosition(i)) {
514         AddOptimizationPasses(Passes, *FPasses, 3);
515         OptLevelO3 = false;
516       }
517
518       const PassInfo *PassInf = PassList[i];
519       Pass *P = 0;
520       if (PassInf->getNormalCtor())
521         P = PassInf->getNormalCtor()();
522       else
523         cerr << argv[0] << ": cannot create pass: "
524              << PassInf->getPassName() << "\n";
525       if (P) {
526         addPass(Passes, P);
527         
528         if (AnalyzeOnly) {
529           if (dynamic_cast<BasicBlockPass*>(P))
530             Passes.add(new BasicBlockPassPrinter(PassInf));
531           else if (dynamic_cast<LoopPass*>(P))
532             Passes.add(new  LoopPassPrinter(PassInf));
533           else if (dynamic_cast<FunctionPass*>(P))
534             Passes.add(new FunctionPassPrinter(PassInf));
535           else if (dynamic_cast<CallGraphSCCPass*>(P))
536             Passes.add(new CallGraphSCCPassPrinter(PassInf));
537           else
538             Passes.add(new ModulePassPrinter(PassInf));
539         }
540       }
541       
542       if (PrintEachXForm)
543         Passes.add(new PrintModulePass(&cerr));
544     }
545     
546     // If -std-compile-opts was specified at the end of the pass list, add them.
547     if (StandardCompileOpts) {
548       AddStandardCompilePasses(Passes);
549       StandardCompileOpts = false;
550     }    
551
552     if (OptLevelO1) {
553         AddOptimizationPasses(Passes, *FPasses, 1);
554       }
555
556     if (OptLevelO2) {
557         AddOptimizationPasses(Passes, *FPasses, 2);
558       }
559
560     if (OptLevelO3) {
561         AddOptimizationPasses(Passes, *FPasses, 3);
562       }
563
564     if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
565       for (Module::iterator I = M.get()->begin(), E = M.get()->end();
566            I != E; ++I)
567         FPasses->run(*I);
568     }
569
570     // Check that the module is well formed on completion of optimization
571     if (!NoVerify && !VerifyEach)
572       Passes.add(createVerifierPass());
573
574     // Write bitcode out to disk or cout as the last step...
575     if (!NoOutput && !AnalyzeOnly)
576       Passes.add(CreateBitcodeWriterPass(*Out));
577
578     // Now that we have all of the passes ready, run them.
579     Passes.run(*M.get());
580
581     // Delete the ofstream.
582     if (Out != &std::cout) 
583       delete Out;
584     return 0;
585
586   } catch (const std::string& msg) {
587     cerr << argv[0] << ": " << msg << "\n";
588   } catch (...) {
589     cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
590   }
591   llvm_shutdown();
592   return 1;
593 }