diff options
Diffstat (limited to 'llvm/lib/LTO/LTOCodeGenerator.cpp')
-rw-r--r-- | llvm/lib/LTO/LTOCodeGenerator.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 4f779d4390b..a1d4d7bd101 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -299,7 +299,7 @@ bool LTOCodeGenerator::determineTarget() { if (TargetMach) return true; - std::string TripleStr = MergedModule->getTargetTriple(); + TripleStr = MergedModule->getTargetTriple(); if (TripleStr.empty()) { TripleStr = sys::getDefaultTargetTriple(); MergedModule->setTargetTriple(TripleStr); @@ -308,8 +308,8 @@ bool LTOCodeGenerator::determineTarget() { // create target machine from info for merged modules std::string ErrMsg; - const Target *march = TargetRegistry::lookupTarget(TripleStr, ErrMsg); - if (!march) { + MArch = TargetRegistry::lookupTarget(TripleStr, ErrMsg); + if (!MArch) { emitError(ErrMsg); return false; } @@ -329,12 +329,16 @@ bool LTOCodeGenerator::determineTarget() { MCpu = "cyclone"; } - TargetMach.reset(march->createTargetMachine(TripleStr, MCpu, FeatureStr, - Options, RelocModel, - CodeModel::Default, CGOptLevel)); + TargetMach = createTargetMachine(); return true; } +std::unique_ptr<TargetMachine> LTOCodeGenerator::createTargetMachine() { + return std::unique_ptr<TargetMachine>( + MArch->createTargetMachine(TripleStr, MCpu, FeatureStr, Options, + RelocModel, CodeModel::Default, CGOptLevel)); +} + void LTOCodeGenerator::applyScopeRestrictions() { if (ScopeRestrictionsDone || !ShouldInternalize) return; @@ -473,9 +477,9 @@ bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> Out) { // parallelism level 1. This is achieved by having splitCodeGen return the // original module at parallelism level 1 which we then assign back to // MergedModule. - MergedModule = splitCodeGen( - std::move(MergedModule), Out, {}, MCpu, FeatureStr, Options, RelocModel, - CodeModel::Default, CGOptLevel, FileType, ShouldRestoreGlobalsLinkage); + MergedModule = splitCodeGen(std::move(MergedModule), Out, {}, + [&]() { return createTargetMachine(); }, FileType, + ShouldRestoreGlobalsLinkage); // If statistics were requested, print them out after codegen. if (llvm::AreStatisticsEnabled()) |