summaryrefslogtreecommitdiff
path: root/tools/lto/LTOCodeGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lto/LTOCodeGenerator.cpp')
-rw-r--r--tools/lto/LTOCodeGenerator.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index d82279d494..a07247e28e 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;