Index: include/llvm/LTO/Config.h =================================================================== --- include/llvm/LTO/Config.h +++ include/llvm/LTO/Config.h @@ -14,6 +14,7 @@ #ifndef LLVM_LTO_CONFIG_H #define LLVM_LTO_CONFIG_H +#include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/IR/DiagnosticInfo.h" #include "llvm/Support/CodeGen.h" #include "llvm/Target/TargetMachine.h" @@ -44,6 +45,7 @@ TargetMachine::CodeGenFileType CGFileType = TargetMachine::CGFT_ObjectFile; unsigned OptLevel = 2; bool DisableVerify = false; + std::unique_ptr TLII; /// Use the new pass manager bool UseNewPM = false; Index: lib/LTO/LTOBackend.cpp =================================================================== --- lib/LTO/LTOBackend.cpp +++ lib/LTO/LTOBackend.cpp @@ -179,6 +179,11 @@ // Register the AA manager first so that our version is the one used. FAM.registerPass([&] { return std::move(AA); }); + if (Conf.TLII) { + FAM.registerPass([&] { return TargetLibraryAnalysis(*Conf.TLII); }); + MAM.registerPass([&] { return TargetLibraryAnalysis(*Conf.TLII); }); + } + // Register all the basic analyses with the managers. PB.registerModuleAnalyses(MAM); PB.registerCGSCCAnalyses(CGAM); @@ -268,7 +273,11 @@ passes.add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis())); PassManagerBuilder PMB; - PMB.LibraryInfo = new TargetLibraryInfoImpl(Triple(TM->getTargetTriple())); + if (Conf.TLII) + // The PassManagerBuilder destructor deletes the LibraryInfo. + PMB.LibraryInfo = Conf.TLII.release(); + else + PMB.LibraryInfo = new TargetLibraryInfoImpl(Triple(TM->getTargetTriple())); PMB.Inliner = createFunctionInliningPass(); PMB.ExportSummary = ExportSummary; PMB.ImportSummary = ImportSummary;