6060#include " llvm/Transforms/IPO/Internalize.h"
6161#include " llvm/Transforms/IPO/WholeProgramDevirt.h"
6262#include " llvm/Transforms/ObjCARC.h"
63+ #include " llvm/Transforms/Utils/ModuleUtils.h"
6364#include " llvm/Transforms/Utils/FunctionImportUtils.h"
6465
6566#include < numeric>
@@ -578,7 +579,8 @@ void ThinLTOCodeGenerator::crossReferenceSymbol(StringRef Name) {
578579}
579580
580581// TargetMachine factory
581- std::unique_ptr<TargetMachine> TargetMachineBuilder::create () const {
582+ std::unique_ptr<TargetMachine>
583+ TargetMachineBuilder::create (const StringRef TargetABI) const {
582584 std::string ErrMsg;
583585 const Target *TheTarget =
584586 TargetRegistry::lookupTarget (TheTriple.str (), ErrMsg);
@@ -588,7 +590,7 @@ std::unique_ptr<TargetMachine> TargetMachineBuilder::create() const {
588590
589591 // Use MAttr as the default set of features.
590592 SubtargetFeatures Features (MAttr);
591- Features.getDefaultSubtargetFeatures (TheTriple);
593+ Features.getDefaultSubtargetFeatures (TheTriple, TargetABI );
592594 std::string FeatureStr = Features.getString ();
593595
594596 std::unique_ptr<TargetMachine> TM (
@@ -914,10 +916,10 @@ void ThinLTOCodeGenerator::internalize(Module &TheModule,
914916 */
915917void ThinLTOCodeGenerator::optimize (Module &TheModule) {
916918 initTMBuilder (TMBuilder, Triple (TheModule.getTargetTriple ()));
917-
919+ StringRef TargetABI = llvm::getTargetABIMD (TheModule);
918920 // Optimize now
919- optimizeModule (TheModule, *TMBuilder.create (), OptLevel, Freestanding ,
920- DebugPassManager, nullptr );
921+ optimizeModule (TheModule, *TMBuilder.create (TargetABI ), OptLevel,
922+ Freestanding, DebugPassManager, nullptr );
921923}
922924
923925// / Write out the generated object file, either from CacheEntryPath or from
@@ -992,8 +994,10 @@ void ThinLTOCodeGenerator::run() {
992994 auto TheModule = loadModuleFromInput (Mod.get (), Context, false ,
993995 /* IsImporting*/ false );
994996
997+ StringRef TargetABI = llvm::getTargetABIMD (*TheModule);
995998 // CodeGen
996- auto OutputBuffer = codegenModule (*TheModule, *TMBuilder.create ());
999+ auto OutputBuffer =
1000+ codegenModule (*TheModule, *TMBuilder.create (TargetABI));
9971001 if (SavedObjectsDirectoryPath.empty ())
9981002 ProducedBinaries[count] = std::move (OutputBuffer);
9991003 else
@@ -1181,10 +1185,11 @@ void ThinLTOCodeGenerator::run() {
11811185 saveTempBitcode (*TheModule, SaveTempsDir, count, " .0.original.bc" );
11821186
11831187 auto &ImportList = ImportLists[ModuleIdentifier];
1188+ StringRef TargetABI = llvm::getTargetABIMD (*TheModule);
11841189 // Run the main process now, and generates a binary
11851190 auto OutputBuffer = ProcessThinLTOModule (
1186- *TheModule, *Index, ModuleMap, *TMBuilder.create (), ImportList ,
1187- ExportList, GUIDPreservedSymbols,
1191+ *TheModule, *Index, ModuleMap, *TMBuilder.create (TargetABI) ,
1192+ ImportList, ExportList, GUIDPreservedSymbols,
11881193 ModuleToDefinedGVSummaries[ModuleIdentifier], CacheOptions,
11891194 DisableCodeGen, SaveTempsDir, Freestanding, OptLevel, count,
11901195 DebugPassManager);
0 commit comments