[llvm] r247735 - Reapply "LTO: Disable extra verify runs in release builds"

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 15 16:05:59 PDT 2015


Author: dexonsmith
Date: Tue Sep 15 18:05:59 2015
New Revision: 247735

URL: http://llvm.org/viewvc/llvm-project?rev=247735&view=rev
Log:
Reapply "LTO: Disable extra verify runs in release builds"

This reverts commit r247730, effectively reapplying r247729.  This time
I have an lld commit ready to follow.

Added:
    llvm/trunk/test/LTO/X86/disable-verify.ll
Modified:
    llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h
    llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
    llvm/trunk/tools/llvm-lto/llvm-lto.cpp
    llvm/trunk/tools/lto/lto.cpp

Modified: llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h?rev=247735&r1=247734&r2=247735&view=diff
==============================================================================
--- llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h (original)
+++ llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h Tue Sep 15 18:05:59 2015
@@ -110,9 +110,9 @@ struct LTOCodeGenerator {
   /// \note It is up to the linker to remove the intermediate object file.  Do
   /// not try to remove the object file in LTOCodeGenerator's destructor as we
   /// don't who (LTOCodeGenerator or the obj file) will last longer.
-  bool compile_to_file(const char **Name, bool DisableInline,
-                       bool DisableGVNLoadPRE, bool DisableVectorization,
-                       std::string &ErrMsg);
+  bool compile_to_file(const char **Name, bool DisableVerify,
+                       bool DisableInline, bool DisableGVNLoadPRE,
+                       bool DisableVectorization, std::string &ErrMsg);
 
   /// As with compile_to_file(), this function compiles the merged module into
   /// single object file. Instead of returning the object-file-path to the
@@ -120,13 +120,13 @@ struct LTOCodeGenerator {
   /// to the caller. This function should delete intermediate object file once
   /// its content is brought to memory. Return NULL if the compilation was not
   /// successful.
-  std::unique_ptr<MemoryBuffer> compile(bool DisableInline,
+  std::unique_ptr<MemoryBuffer> compile(bool DisableVerify, bool DisableInline,
                                         bool DisableGVNLoadPRE,
                                         bool DisableVectorization,
                                         std::string &errMsg);
 
   /// Optimizes the merged module.  Returns true on success.
-  bool optimize(bool DisableInline, bool DisableGVNLoadPRE,
+  bool optimize(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE,
                 bool DisableVectorization, std::string &ErrMsg);
 
   /// Compiles the merged optimized module into a single object file. It brings

Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=247735&r1=247734&r2=247735&view=diff
==============================================================================
--- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)
+++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Tue Sep 15 18:05:59 2015
@@ -265,20 +265,24 @@ LTOCodeGenerator::compileOptimized(std::
   return std::move(*BufferOrErr);
 }
 
-bool LTOCodeGenerator::compile_to_file(const char **Name, bool DisableInline,
+bool LTOCodeGenerator::compile_to_file(const char **Name, bool DisableVerify,
+                                       bool DisableInline,
                                        bool DisableGVNLoadPRE,
                                        bool DisableVectorization,
                                        std::string &ErrMsg) {
-  if (!optimize(DisableInline, DisableGVNLoadPRE, DisableVectorization, ErrMsg))
+  if (!optimize(DisableVerify, DisableInline, DisableGVNLoadPRE,
+                DisableVectorization, ErrMsg))
     return false;
 
   return compileOptimizedToFile(Name, ErrMsg);
 }
 
 std::unique_ptr<MemoryBuffer>
-LTOCodeGenerator::compile(bool DisableInline, bool DisableGVNLoadPRE,
-                          bool DisableVectorization, std::string &ErrMsg) {
-  if (!optimize(DisableInline, DisableGVNLoadPRE, DisableVectorization, ErrMsg))
+LTOCodeGenerator::compile(bool DisableVerify, bool DisableInline,
+                          bool DisableGVNLoadPRE, bool DisableVectorization,
+                          std::string &ErrMsg) {
+  if (!optimize(DisableVerify, DisableInline, DisableGVNLoadPRE,
+                DisableVectorization, ErrMsg))
     return nullptr;
 
   return compileOptimized(ErrMsg);
@@ -459,7 +463,8 @@ void LTOCodeGenerator::applyScopeRestric
 }
 
 /// Optimize merged modules using various IPO passes
-bool LTOCodeGenerator::optimize(bool DisableInline, bool DisableGVNLoadPRE,
+bool LTOCodeGenerator::optimize(bool DisableVerify, bool DisableInline,
+                                bool DisableGVNLoadPRE,
                                 bool DisableVectorization,
                                 std::string &ErrMsg) {
   if (!this->determineTarget(ErrMsg))
@@ -486,8 +491,8 @@ bool LTOCodeGenerator::optimize(bool Dis
     PMB.Inliner = createFunctionInliningPass();
   PMB.LibraryInfo = new TargetLibraryInfoImpl(TargetTriple);
   PMB.OptLevel = OptLevel;
-  PMB.VerifyInput = true;
-  PMB.VerifyOutput = true;
+  PMB.VerifyInput = !DisableVerify;
+  PMB.VerifyOutput = !DisableVerify;
 
   PMB.populateLTOPassManager(passes);
 

Added: llvm/trunk/test/LTO/X86/disable-verify.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/LTO/X86/disable-verify.ll?rev=247735&view=auto
==============================================================================
--- llvm/trunk/test/LTO/X86/disable-verify.ll (added)
+++ llvm/trunk/test/LTO/X86/disable-verify.ll Tue Sep 15 18:05:59 2015
@@ -0,0 +1,18 @@
+; RUN: llvm-as < %s >%t.bc
+; RUN: llvm-lto -debug-pass=Arguments -exported-symbol=_f -o /dev/null %t.bc 2>&1 -disable-verify | FileCheck %s
+; RUN: llvm-lto -debug-pass=Arguments -exported-symbol=_f -o /dev/null %t.bc 2>&1 | FileCheck %s -check-prefix=VERIFY
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.10.0"
+
+; -disable-verify should disable verification from the optimization pipeline.
+; CHECK: Pass Arguments: -verify -internalize
+; CHECK-NOT: -verify
+
+; VERIFY: Pass Arguments: -verify -internalize
+; VERIFY: Pass Arguments: {{.*}} -verify {{.*}} -verify
+
+define void @f() {
+entry:
+  ret void
+}

Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=247735&r1=247734&r2=247735&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
+++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Tue Sep 15 18:05:59 2015
@@ -36,6 +36,10 @@ OptLevel("O",
          cl::ZeroOrMore,
          cl::init('2'));
 
+static cl::opt<bool> DisableVerify(
+    "disable-verify", cl::init(false),
+    cl::desc("Do not run the verifier during the optimization pipeline"));
+
 static cl::opt<bool>
 DisableInline("disable-inlining", cl::init(false),
   cl::desc("Do not run the inliner pass"));
@@ -248,7 +252,7 @@ int main(int argc, char **argv) {
 
   if (!OutputFilename.empty()) {
     std::string ErrorInfo;
-    if (!CodeGen.optimize(DisableInline, DisableGVNLoadPRE,
+    if (!CodeGen.optimize(DisableVerify, DisableInline, DisableGVNLoadPRE,
                           DisableLTOVectorization, ErrorInfo)) {
       errs() << argv[0] << ": error optimizing the code: " << ErrorInfo << "\n";
       return 1;
@@ -285,7 +289,7 @@ int main(int argc, char **argv) {
 
     std::string ErrorInfo;
     const char *OutputName = nullptr;
-    if (!CodeGen.compile_to_file(&OutputName, DisableInline,
+    if (!CodeGen.compile_to_file(&OutputName, DisableVerify, DisableInline,
                                  DisableGVNLoadPRE, DisableLTOVectorization,
                                  ErrorInfo)) {
       errs() << argv[0]

Modified: llvm/trunk/tools/lto/lto.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=247735&r1=247734&r2=247735&view=diff
==============================================================================
--- llvm/trunk/tools/lto/lto.cpp (original)
+++ llvm/trunk/tools/lto/lto.cpp Tue Sep 15 18:05:59 2015
@@ -43,6 +43,16 @@ static cl::opt<bool>
 DisableLTOVectorization("disable-lto-vectorization", cl::init(false),
   cl::desc("Do not run loop or slp vectorization during LTO"));
 
+#ifdef NDEBUG
+static bool VerifyByDefault = false;
+#else
+static bool VerifyByDefault = true;
+#endif
+
+static cl::opt<bool> DisableVerify(
+    "disable-llvm-verifier", cl::init(!VerifyByDefault),
+    cl::desc("Don't run the LLVM verifier during the optimization pipeline"));
+
 // Holds most recent error string.
 // *** Not thread safe ***
 static std::string sLastErrorString;
@@ -321,8 +331,9 @@ bool lto_codegen_write_merged_modules(lt
 const void *lto_codegen_compile(lto_code_gen_t cg, size_t *length) {
   maybeParseOptions(cg);
   LibLTOCodeGenerator *CG = unwrap(cg);
-  CG->NativeObjectFile = CG->compile(DisableInline, DisableGVNLoadPRE,
-                                     DisableLTOVectorization, sLastErrorString);
+  CG->NativeObjectFile =
+      CG->compile(DisableVerify, DisableInline, DisableGVNLoadPRE,
+                  DisableLTOVectorization, sLastErrorString);
   if (!CG->NativeObjectFile)
     return nullptr;
   *length = CG->NativeObjectFile->getBufferSize();
@@ -331,9 +342,8 @@ const void *lto_codegen_compile(lto_code
 
 bool lto_codegen_optimize(lto_code_gen_t cg) {
   maybeParseOptions(cg);
-  return !unwrap(cg)->optimize(DisableInline,
-                               DisableGVNLoadPRE, DisableLTOVectorization,
-                               sLastErrorString);
+  return !unwrap(cg)->optimize(DisableVerify, DisableInline, DisableGVNLoadPRE,
+                               DisableLTOVectorization, sLastErrorString);
 }
 
 const void *lto_codegen_compile_optimized(lto_code_gen_t cg, size_t *length) {
@@ -349,7 +359,7 @@ const void *lto_codegen_compile_optimize
 bool lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) {
   maybeParseOptions(cg);
   return !unwrap(cg)->compile_to_file(
-      name, DisableInline, DisableGVNLoadPRE,
+      name, DisableVerify, DisableInline, DisableGVNLoadPRE,
       DisableLTOVectorization, sLastErrorString);
 }
 




More information about the llvm-commits mailing list