From c0346c0fdc7a30c85cd9c00801522ebedd83abe5 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sat, 22 Aug 2015 02:25:53 +0000 Subject: [PATCH] LTO: Maintain target triple, FeatureStr and CGOptLevel in the module or LTOCodeGenerator. This makes it easier to create new TargetMachines on demand. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245781 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/LTO/LTOCodeGenerator.h | 4 ++- lib/LTO/LTOCodeGenerator.cpp | 40 ++++++++++++++++------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/include/llvm/LTO/LTOCodeGenerator.h b/include/llvm/LTO/LTOCodeGenerator.h index 1676530a972..33ac009c796 100644 --- a/include/llvm/LTO/LTOCodeGenerator.h +++ b/include/llvm/LTO/LTOCodeGenerator.h @@ -77,7 +77,7 @@ struct LTOCodeGenerator { void setCpu(const char *mCpu) { MCpu = mCpu; } void setAttr(const char *mAttr) { MAttr = mAttr; } - void setOptLevel(unsigned optLevel) { OptLevel = optLevel; } + void setOptLevel(unsigned optLevel); void setShouldInternalize(bool Value) { ShouldInternalize = Value; } void setShouldEmbedUselists(bool Value) { ShouldEmbedUselists = Value; } @@ -166,10 +166,12 @@ private: StringSet MustPreserveSymbols; StringSet AsmUndefinedRefs; std::vector CodegenOptions; + std::string FeatureStr; std::string MCpu; std::string MAttr; std::string NativeObjectPath; TargetOptions Options; + CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default; unsigned OptLevel = 2; lto_diagnostic_handler_t DiagHandler = nullptr; void *DiagContext = nullptr; diff --git a/lib/LTO/LTOCodeGenerator.cpp b/lib/LTO/LTOCodeGenerator.cpp index efeac033850..7b06eadc2cd 100644 --- a/lib/LTO/LTOCodeGenerator.cpp +++ b/lib/LTO/LTOCodeGenerator.cpp @@ -164,6 +164,24 @@ void LTOCodeGenerator::setDebugInfo(lto_debug_model debug) { llvm_unreachable("Unknown debug format!"); } +void LTOCodeGenerator::setOptLevel(unsigned level) { + OptLevel = level; + switch (OptLevel) { + case 0: + CGOptLevel = CodeGenOpt::None; + break; + case 1: + CGOptLevel = CodeGenOpt::Less; + break; + case 2: + CGOptLevel = CodeGenOpt::Default; + break; + case 3: + CGOptLevel = CodeGenOpt::Aggressive; + break; + } +} + bool LTOCodeGenerator::writeMergedModules(const char *path, std::string &errMsg) { if (!determineTarget(errMsg)) @@ -279,8 +297,10 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) { return true; std::string TripleStr = IRLinker.getModule()->getTargetTriple(); - if (TripleStr.empty()) + if (TripleStr.empty()) { TripleStr = sys::getDefaultTargetTriple(); + IRLinker.getModule()->setTargetTriple(TripleStr); + } llvm::Triple Triple(TripleStr); // create target machine from info for merged modules @@ -292,7 +312,7 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) { // the default set of features. SubtargetFeatures Features(MAttr); Features.getDefaultSubtargetFeatures(Triple); - std::string FeatureStr = Features.getString(); + FeatureStr = Features.getString(); // Set a default CPU for Darwin triples. if (MCpu.empty() && Triple.isOSDarwin()) { if (Triple.getArch() == llvm::Triple::x86_64) @@ -303,22 +323,6 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) { MCpu = "cyclone"; } - CodeGenOpt::Level CGOptLevel; - switch (OptLevel) { - case 0: - CGOptLevel = CodeGenOpt::None; - break; - case 1: - CGOptLevel = CodeGenOpt::Less; - break; - case 2: - CGOptLevel = CodeGenOpt::Default; - break; - case 3: - CGOptLevel = CodeGenOpt::Aggressive; - break; - } - TargetMach.reset(march->createTargetMachine(TripleStr, MCpu, FeatureStr, Options, RelocModel, CodeModel::Default, CGOptLevel)); -- 2.34.1