From 2d643ef32891859ec73b6eea2959748f5ebc3af7 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 11 Aug 2010 00:15:13 +0000 Subject: Make it possible to set the cpu used for codegen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110759 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/gold/gold-plugin.cpp | 6 ++++++ tools/lto/LTOCodeGenerator.cpp | 7 ++++++- tools/lto/LTOCodeGenerator.h | 2 ++ tools/lto/lto.cpp | 8 ++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index d649ccb048..db0db3b5b2 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -70,6 +70,7 @@ namespace options { static std::vector pass_through; static std::string extra_library_path; static std::string triple; + static std::string mcpu; // Additional options to pass into the code generator. // Note: This array will contain all plugin options which are not claimed // as plugin exclusive to pass to the code generator. @@ -85,6 +86,8 @@ namespace options { if (opt == "generate-api-file") { generate_api_file = true; + } else if (opt.startswith("mcpu=")) { + mcpu = opt.substr(strlen("mcpu=")); } else if (opt.startswith("as=")) { if (!as_path.empty()) { (*message)(LDPL_WARNING, "Path to as specified twice. " @@ -413,6 +416,9 @@ static ld_plugin_status all_symbols_read_hook(void) { } lto_codegen_set_assembler_args(cg, &as_args_p[0], as_args_p.size()); } + if (!options::mcpu.empty()) + lto_codegen_set_cpu(cg, options::mcpu.c_str()); + // Pass through extra options to the code generator. if (!options::extra.empty()) { for (std::vector::iterator it = options::extra.begin(); diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index 7850b5d6d2..b69bcc35a7 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -119,6 +119,11 @@ bool LTOCodeGenerator::setCodePICModel(lto_codegen_model model, return true; } +void LTOCodeGenerator::setCpu(const char* mCpu) +{ + _mCpu = mCpu; +} + void LTOCodeGenerator::setAssemblerPath(const char* path) { if ( _assemblerPath ) @@ -314,7 +319,7 @@ bool LTOCodeGenerator::determineTarget(std::string& errMsg) // construct LTModule, hand over ownership of module and target SubtargetFeatures Features; - Features.getDefaultSubtargetFeatures("" /* cpu */, llvm::Triple(Triple)); + Features.getDefaultSubtargetFeatures(_mCpu, llvm::Triple(Triple)); std::string FeatureStr = Features.getString(); _target = march->createTargetMachine(Triple, FeatureStr); } diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h index 9086befc26..71593a5039 100644 --- a/tools/lto/LTOCodeGenerator.h +++ b/tools/lto/LTOCodeGenerator.h @@ -36,6 +36,7 @@ struct LTOCodeGenerator { bool addModule(struct LTOModule*, std::string& errMsg); bool setDebugInfo(lto_debug_model, std::string& errMsg); bool setCodePICModel(lto_codegen_model, std::string& errMsg); + void setCpu(const char *cpu); void setAssemblerPath(const char* path); void setAssemblerArgs(const char** args, int nargs); void addMustPreserveSymbol(const char* sym); @@ -63,6 +64,7 @@ private: llvm::MemoryBuffer* _nativeObjectFile; std::vector _codegenOptions; llvm::sys::Path* _assemblerPath; + std::string _mCpu; std::vector _assemblerArgs; }; diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index 703447b499..a7ce2a07bb 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -210,6 +210,14 @@ bool lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model model) return cg->setCodePICModel(model, sLastErrorString); } +// +// sets the cpu to generate code for +// +void lto_codegen_set_cpu(lto_code_gen_t cg, const char* cpu) +{ + return cg->setCpu(cpu); +} + // // sets the path to the assembler tool // -- cgit v1.2.3