Thanks Dan!<br><br><div class="gmail_quote">On Sun, Feb 28, 2010 at 1:41 AM, Dan Gohman <span dir="ltr"><<a href="mailto:gohman@apple.com">gohman@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Author: djg<br>
Date: Sat Feb 27 18:41:59 2010<br>
New Revision: 97357<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=97357&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=97357&view=rev</a><br>
Log:<br>
Add a flag to addPassesToEmit* to disable the Verifier pass run<br>
after LSR, so that clients can opt in.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/Target/TargetMachine.h<br>
    llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp<br>
    llvm/trunk/lib/Target/CBackend/CBackend.cpp<br>
    llvm/trunk/lib/Target/CBackend/CTargetMachine.h<br>
    llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp<br>
    llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h<br>
    llvm/trunk/lib/Target/MSIL/MSILWriter.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/Target/TargetMachine.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetMachine.h (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetMachine.h Sat Feb 27 18:41:59 2010<br>
@@ -190,7 +190,8 @@<br>
   virtual bool addPassesToEmitFile(PassManagerBase &,<br>
                                    formatted_raw_ostream &,<br>
                                    CodeGenFileType,<br>
-                                   CodeGenOpt::Level) {<br>
+                                   CodeGenOpt::Level,<br>
+                                   bool DisableVerify = true) {<br>
     return true;<br>
   }<br>
<br>
@@ -202,7 +203,8 @@<br>
   ///<br>
   virtual bool addPassesToEmitMachineCode(PassManagerBase &,<br>
                                           JITCodeEmitter &,<br>
-                                          CodeGenOpt::Level) {<br>
+                                          CodeGenOpt::Level,<br>
+                                          bool DisableVerify = true) {<br>
     return true;<br>
   }<br>
<br>
@@ -212,7 +214,8 @@<br>
   virtual bool WantsWholeFile() const { return false; }<br>
   virtual bool addPassesToEmitWholeFile(PassManager &, formatted_raw_ostream &,<br>
                                         CodeGenFileType,<br>
-                                        CodeGenOpt::Level) {<br>
+                                        CodeGenOpt::Level,<br>
+                                        bool DisableVerify = true) {<br>
     return true;<br>
   }<br>
 };<br>
@@ -227,7 +230,8 @@<br>
   /// addCommonCodeGenPasses - Add standard LLVM codegen passes used for<br>
   /// both emitting to assembly files or machine code output.<br>
   ///<br>
-  bool addCommonCodeGenPasses(PassManagerBase &, CodeGenOpt::Level);<br>
+  bool addCommonCodeGenPasses(PassManagerBase &, CodeGenOpt::Level,<br>
+                              bool DisableVerify);<br>
<br>
 private:<br>
   virtual void setCodeModelForJIT();<br>
@@ -242,7 +246,8 @@<br>
   virtual bool addPassesToEmitFile(PassManagerBase &PM,<br>
                                    formatted_raw_ostream &Out,<br>
                                    CodeGenFileType FileType,<br>
-                                   CodeGenOpt::Level);<br>
+                                   CodeGenOpt::Level,<br>
+                                   bool DisableVerify = true);<br>
<br>
   /// addPassesToEmitMachineCode - Add passes to the specified pass manager to<br>
   /// get machine code emitted.  This uses a JITCodeEmitter object to handle<br>
@@ -252,7 +257,8 @@<br>
   ///<br>
   virtual bool addPassesToEmitMachineCode(PassManagerBase &PM,<br>
                                           JITCodeEmitter &MCE,<br>
-                                          CodeGenOpt::Level);<br>
+                                          CodeGenOpt::Level,<br>
+                                          bool DisableVerify = true);<br>
<br>
   /// Target-Independent Code Generator Pass Configuration Options.<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Sat Feb 27 18:41:59 2010<br>
@@ -115,9 +115,10 @@<br>
 bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,<br>
                                             formatted_raw_ostream &Out,<br>
                                             CodeGenFileType FileType,<br>
-                                            CodeGenOpt::Level OptLevel) {<br>
+                                            CodeGenOpt::Level OptLevel,<br>
+                                            bool DisableVerify) {<br>
   // Add common CodeGen passes.<br>
-  if (addCommonCodeGenPasses(PM, OptLevel))<br>
+  if (addCommonCodeGenPasses(PM, OptLevel, DisableVerify))<br>
     return true;<br>
<br>
   OwningPtr<MCContext> Context(new MCContext());<br>
@@ -193,12 +194,13 @@<br>
 ///<br>
 bool LLVMTargetMachine::addPassesToEmitMachineCode(PassManagerBase &PM,<br>
                                                    JITCodeEmitter &JCE,<br>
-                                                   CodeGenOpt::Level OptLevel) {<br>
+                                                   CodeGenOpt::Level OptLevel,<br>
+                                                   bool DisableVerify) {<br>
   // Make sure the code model is set.<br>
   setCodeModelForJIT();<br>
<br>
   // Add common CodeGen passes.<br>
-  if (addCommonCodeGenPasses(PM, OptLevel))<br>
+  if (addCommonCodeGenPasses(PM, OptLevel, DisableVerify))<br>
     return true;<br>
<br>
   addCodeEmitter(PM, OptLevel, JCE);<br>
@@ -221,9 +223,15 @@<br>
 /// emitting to assembly files or machine code output.<br>
 ///<br>
 bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,<br>
-                                               CodeGenOpt::Level OptLevel) {<br>
+                                               CodeGenOpt::Level OptLevel,<br>
+                                               bool DisableVerify) {<br>
   // Standard LLVM-Level Passes.<br>
<br>
+  // Before running any passes, run the verifier to determine if the input<br>
+  // coming from the front-end and/or optimizer is valid.<br>
+  if (!DisableVerify)<br>
+    PM.add(createVerifierPass());<br>
+<br>
   // Optionally, tun split-GEPs and no-load GVN.<br>
   if (EnableSplitGEPGVN) {<br>
     PM.add(createGEPSplitterPass());<br>
@@ -235,9 +243,6 @@<br>
     PM.add(createLoopStrengthReducePass(getTargetLowering()));<br>
     if (PrintLSR)<br>
       PM.add(createPrintFunctionPass("\n\n*** Code after LSR ***\n", &dbgs()));<br>
-#ifndef NDEBUG<br>
-    PM.add(createVerifierPass());<br>
-#endif<br>
   }<br>
<br>
   // Turn exception handling constructs into something the code generators can<br>
@@ -277,6 +282,11 @@<br>
                                    "*** Final LLVM Code input to ISel ***\n",<br>
                                    &dbgs()));<br>
<br>
+  // All passes which modify the LLVM IR are now complete; run the verifier<br>
+  // to ensure that the IR is valid.<br>
+  if (!DisableVerify)<br>
+    PM.add(createVerifierPass());<br>
+<br>
   // Standard Lower-Level Passes.<br>
<br>
   // Set up a MachineFunction for the rest of CodeGen to work on.<br>
<br>
Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)<br>
+++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Sat Feb 27 18:41:59 2010<br>
@@ -3544,7 +3544,8 @@<br>
 bool CTargetMachine::addPassesToEmitWholeFile(PassManager &PM,<br>
                                               formatted_raw_ostream &o,<br>
                                               CodeGenFileType FileType,<br>
-                                              CodeGenOpt::Level OptLevel) {<br>
+                                              CodeGenOpt::Level OptLevel,<br>
+                                              bool DisableVerify) {<br>
   if (FileType != TargetMachine::CGFT_AssemblyFile) return true;<br>
<br>
   PM.add(createGCLoweringPass());<br>
<br>
Modified: llvm/trunk/lib/Target/CBackend/CTargetMachine.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CTargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CTargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/CBackend/CTargetMachine.h (original)<br>
+++ llvm/trunk/lib/Target/CBackend/CTargetMachine.h Sat Feb 27 18:41:59 2010<br>
@@ -27,7 +27,8 @@<br>
   virtual bool addPassesToEmitWholeFile(PassManager &PM,<br>
                                         formatted_raw_ostream &Out,<br>
                                         CodeGenFileType FileType,<br>
-                                        CodeGenOpt::Level OptLevel);<br>
+                                        CodeGenOpt::Level OptLevel,<br>
+                                        bool DisableVerify);<br>
<br>
   virtual const TargetData *getTargetData() const { return 0; }<br>
 };<br>
<br>
Modified: llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp (original)<br>
+++ llvm/trunk/lib/Target/CppBackend/CPPBackend.cpp Sat Feb 27 18:41:59 2010<br>
@@ -2009,7 +2009,8 @@<br>
 bool CPPTargetMachine::addPassesToEmitWholeFile(PassManager &PM,<br>
                                                 formatted_raw_ostream &o,<br>
                                                 CodeGenFileType FileType,<br>
-                                                CodeGenOpt::Level OptLevel) {<br>
+                                                CodeGenOpt::Level OptLevel,<br>
+                                                bool DisableVerify) {<br>
   if (FileType != TargetMachine::CGFT_AssemblyFile) return true;<br>
   PM.add(new CppWriter(o));<br>
   return false;<br>
<br>
Modified: llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h (original)<br>
+++ llvm/trunk/lib/Target/CppBackend/CPPTargetMachine.h Sat Feb 27 18:41:59 2010<br>
@@ -30,7 +30,8 @@<br>
   virtual bool addPassesToEmitWholeFile(PassManager &PM,<br>
                                         formatted_raw_ostream &Out,<br>
                                         CodeGenFileType FileType,<br>
-                                        CodeGenOpt::Level OptLevel);<br>
+                                        CodeGenOpt::Level OptLevel,<br>
+                                        bool DisableVerify);<br>
<br>
   virtual const TargetData *getTargetData() const { return 0; }<br>
 };<br>
<br>
Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.cpp?rev=97357&r1=97356&r2=97357&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.cpp?rev=97357&r1=97356&r2=97357&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/MSIL/MSILWriter.cpp (original)<br>
+++ llvm/trunk/lib/Target/MSIL/MSILWriter.cpp Sat Feb 27 18:41:59 2010<br>
@@ -38,7 +38,8 @@<br>
     virtual bool addPassesToEmitWholeFile(PassManager &PM,<br>
                                           formatted_raw_ostream &Out,<br>
                                           CodeGenFileType FileType,<br>
-                                          CodeGenOpt::Level OptLevel);<br>
+                                          CodeGenOpt::Level OptLevel,<br>
+                                          bool DisableVerify);<br>
<br>
     virtual const TargetData *getTargetData() const { return 0; }<br>
   };<br>
@@ -1688,7 +1689,8 @@<br>
 bool MSILTarget::addPassesToEmitWholeFile(PassManager &PM,<br>
                                           formatted_raw_ostream &o,<br>
                                           CodeGenFileType FileType,<br>
-                                          CodeGenOpt::Level OptLevel)<br>
+                                          CodeGenOpt::Level OptLevel,<br>
+                                          bool DisableVerify)<br>
 {<br>
   if (FileType != TargetMachine::CGFT_AssemblyFile) return true;<br>
   MSILWriter* Writer = new MSILWriter(o);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br>