diff options
author | Devang Patel <dpatel@apple.com> | 2008-07-03 22:53:14 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2008-07-03 22:53:14 +0000 |
commit | a93ae711a91dd151ca4d28e4172e0de89d1594f3 (patch) | |
tree | ce345679fb8069e4bea6a3d9204d868044aac42e /tools/lto | |
parent | a122f2f51e4cc9edc5f1c4020e51909b585a0f90 (diff) | |
download | external_llvm-a93ae711a91dd151ca4d28e4172e0de89d1594f3.zip external_llvm-a93ae711a91dd151ca4d28e4172e0de89d1594f3.tar.gz external_llvm-a93ae711a91dd151ca4d28e4172e0de89d1594f3.tar.bz2 |
Provide a hook to set the code generation debug options to investigate lto failures.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53119 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto')
-rw-r--r-- | tools/lto/LTOCodeGenerator.cpp | 14 | ||||
-rw-r--r-- | tools/lto/LTOCodeGenerator.h | 6 | ||||
-rw-r--r-- | tools/lto/lto.cpp | 6 |
3 files changed, 24 insertions, 2 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index d82279d..a07247e 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -40,6 +40,7 @@ #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Config/config.h" @@ -116,7 +117,6 @@ bool LTOCodeGenerator::setCodePICModel(lto_codegen_model model, return true; } - void LTOCodeGenerator::addMustPreserveSymbol(const char* sym) { _mustPreserveSymbols[sym] = 1; @@ -334,6 +334,18 @@ bool LTOCodeGenerator::generateAssemblyCode(std::ostream& out, std::string& errM 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]); + } + // Instantiate the pass manager to organize the passes. PassManager passes; diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h index eab076e..24a2ba3 100644 --- a/tools/lto/LTOCodeGenerator.h +++ b/tools/lto/LTOCodeGenerator.h @@ -17,6 +17,7 @@ #include "llvm/Linker.h" #include "llvm/ADT/StringMap.h" +#include "llvm/ADT/SmallVector.h" #include <string> @@ -38,7 +39,9 @@ public: 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)); + } private: bool generateAssemblyCode(std::ostream& out, std::string& errMsg); @@ -56,6 +59,7 @@ private: lto_codegen_model _codeModel; StringSet _mustPreserveSymbols; llvm::MemoryBuffer* _nativeObjectFile; + llvm::SmallVector<std::string, 4> _codegenOptions; }; #endif // LTO_CODE_GENERATOR_H diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index f60f7b5..b674f31 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -237,5 +237,11 @@ lto_codegen_compile(lto_code_gen_t cg, size_t* length) return cg->compile(length, sLastErrorString); } +extern void +lto_codegen_debug_options(lto_code_gen_t cg, const char * opt) +{ + cg->setCodeGenDebugOptions(opt); +} + |