[llvm-commits] [llvm] r53249 - in /llvm/trunk/tools/lto: LTOCodeGenerator.cpp LTOCodeGenerator.h lto.cpp

Nick Kledzik kledzik at apple.com
Tue Jul 8 14:14:10 PDT 2008


Author: kledzik
Date: Tue Jul  8 16:14:10 2008
New Revision: 53249

URL: http://llvm.org/viewvc/llvm-project?rev=53249&view=rev
Log:
fix dangling pointer and argv off by one errors.  Add support for --disable-inlining

Modified:
    llvm/trunk/tools/lto/LTOCodeGenerator.cpp
    llvm/trunk/tools/lto/LTOCodeGenerator.h
    llvm/trunk/tools/lto/lto.cpp

Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=53249&r1=53248&r2=53249&view=diff

==============================================================================
--- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
+++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Tue Jul  8 16:14:10 2008
@@ -23,6 +23,7 @@
 #include "llvm/DerivedTypes.h"
 #include "llvm/ModuleProvider.h"
 #include "llvm/Bitcode/ReaderWriter.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/Support/Mangler.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -52,6 +53,8 @@
 
 using namespace llvm;
 
+static cl::opt<bool> DisableInline("disable-inlining",
+  cl::desc("Do not run the inliner pass"));
 
 
 const char* LTOCodeGenerator::getVersionString()
@@ -334,17 +337,10 @@
             break;
     }
 
-    for (unsigned opt_index = 0, opt_size = _codegenOptions.size();
-         opt_index < opt_size; ++opt_index) {
-      std::vector<const char *> cgOpts;
-      std::string &optString = _codegenOptions[opt_index];
-      for (std::string Opt = getToken(optString);
-           !Opt.empty(); Opt = getToken(optString))
-        cgOpts.push_back(Opt.c_str());
-     
-      int pseudo_argc = cgOpts.size()-1;
-      cl::ParseCommandLineOptions(pseudo_argc, (char**)&cgOpts[0]);
-     }
+    // if options were requested, set them
+    if ( !_codegenOptions.empty() )
+        cl::ParseCommandLineOptions(_codegenOptions.size(), 
+                                                (char**)&_codegenOptions[0]);
 
     // Instantiate the pass manager to organize the passes.
     PassManager passes;
@@ -375,7 +371,8 @@
     // function pointers.  When this happens, we often have to resolve varargs
     // calls, etc, so let instcombine do this.
     passes.add(createInstructionCombiningPass());
-    passes.add(createFunctionInliningPass());     // Inline small functions
+    if (!DisableInline)
+        passes.add(createFunctionInliningPass()); // Inline small functions
     passes.add(createPruneEHPass());              // Remove dead EH info
     passes.add(createGlobalDCEPass());            // Remove dead functions
 
@@ -454,4 +451,15 @@
 }
 
 
-
+/// Optimize merged modules using various IPO passes
+void LTOCodeGenerator::setCodeGenDebugOptions(const char* options)
+{
+    std::string ops(options);
+    for (std::string o = getToken(ops); !o.empty(); o = getToken(ops)) {
+        // ParseCommandLineOptions() expects argv[0] to be program name.
+        // Lazily add that.
+        if ( _codegenOptions.empty() ) 
+            _codegenOptions.push_back("libLTO");
+        _codegenOptions.push_back(strdup(o.c_str()));
+    }
+}

Modified: llvm/trunk/tools/lto/LTOCodeGenerator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.h?rev=53249&r1=53248&r2=53249&view=diff

==============================================================================
--- llvm/trunk/tools/lto/LTOCodeGenerator.h (original)
+++ llvm/trunk/tools/lto/LTOCodeGenerator.h Tue Jul  8 16:14:10 2008
@@ -39,9 +39,7 @@
     bool                writeMergedModules(const char* path, 
                                                            std::string& errMsg);
     const void*         compile(size_t* length, std::string& errMsg);
-    void                setCodeGenDebugOptions(const char *opts) {
-                          _codegenOptions.push_back(std::string(opts)); 
-                        }
+    void                setCodeGenDebugOptions(const char *opts); 
 private:
     bool                generateAssemblyCode(std::ostream& out, 
                                                         std::string& errMsg);
@@ -59,7 +57,7 @@
     lto_codegen_model           _codeModel;
     StringSet                   _mustPreserveSymbols;
     llvm::MemoryBuffer*         _nativeObjectFile;
-    llvm::SmallVector<std::string, 4> _codegenOptions;
+    std::vector<const char*>    _codegenOptions;
 };
 
 #endif // LTO_CODE_GENERATOR_H

Modified: llvm/trunk/tools/lto/lto.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=53249&r1=53248&r2=53249&view=diff

==============================================================================
--- llvm/trunk/tools/lto/lto.cpp (original)
+++ llvm/trunk/tools/lto/lto.cpp Tue Jul  8 16:14:10 2008
@@ -237,6 +237,10 @@
     return cg->compile(length, sLastErrorString);
 }
 
+
+//
+// Used to pass extra options to the code generator
+//
 extern void
 lto_codegen_debug_options(lto_code_gen_t cg, const char * opt)
 {





More information about the llvm-commits mailing list