Skip to content

Commit 979c275

Browse files
authored
[IR] Store Triple in Module (NFC) (llvm#129868)
The module currently stores the target triple as a string. This means that any code that wants to actually use the triple first has to instantiate a Triple, which is somewhat expensive. The change in llvm#121652 caused a moderate compile-time regression due to this. While it would be easy enough to work around, I think that architecturally, it makes more sense to store the parsed Triple in the module, so that it can always be directly queried. For this change, I've opted not to add any magic conversions between std::string and Triple for backwards-compatibilty purses, and instead write out needed Triple()s or str()s explicitly. This is because I think a decent number of them should be changed to work on Triple as well, to avoid unnecessary conversions back and forth. The only interesting part in this patch is that the default triple is Triple("") instead of Triple() to preserve existing behavior. The former defaults to using the ELF object format instead of unknown object format. We should fix that as well.
1 parent f01e760 commit 979c275

File tree

111 files changed

+244
-241
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+244
-241
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ static void setCommandLineOpts(const CodeGenOptions &CodeGenOpts) {
595595
void EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
596596
// Create the TargetMachine for generating code.
597597
std::string Error;
598-
std::string Triple = TheModule->getTargetTriple();
598+
std::string Triple = TheModule->getTargetTriple().str();
599599
const llvm::Target *TheTarget = TargetRegistry::lookupTarget(Triple, Error);
600600
if (!TheTarget) {
601601
if (MustCreateTM)

clang/lib/CodeGen/CodeGenAction.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,7 @@ CodeGenAction::loadModule(MemoryBufferRef MBRef) {
10321032
// linker using merged object file.
10331033
if (!Bm) {
10341034
auto M = std::make_unique<llvm::Module>("empty", *VMContext);
1035-
M->setTargetTriple(CI.getTargetOpts().Triple);
1035+
M->setTargetTriple(Triple(CI.getTargetOpts().Triple));
10361036
return M;
10371037
}
10381038
Expected<std::unique_ptr<llvm::Module>> MOrErr =
@@ -1123,10 +1123,10 @@ void CodeGenAction::ExecuteAction() {
11231123
return;
11241124

11251125
const TargetOptions &TargetOpts = CI.getTargetOpts();
1126-
if (TheModule->getTargetTriple() != TargetOpts.Triple) {
1126+
if (TheModule->getTargetTriple().str() != TargetOpts.Triple) {
11271127
Diagnostics.Report(SourceLocation(), diag::warn_fe_override_module)
11281128
<< TargetOpts.Triple;
1129-
TheModule->setTargetTriple(TargetOpts.Triple);
1129+
TheModule->setTargetTriple(Triple(TargetOpts.Triple));
11301130
}
11311131

11321132
EmbedObject(TheModule.get(), CodeGenOpts, Diagnostics);

clang/lib/CodeGen/ModuleBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ namespace {
151151
void Initialize(ASTContext &Context) override {
152152
Ctx = &Context;
153153

154-
M->setTargetTriple(Ctx->getTargetInfo().getTriple().getTriple());
154+
M->setTargetTriple(Ctx->getTargetInfo().getTriple());
155155
M->setDataLayout(Ctx->getTargetInfo().getDataLayoutString());
156156
const auto &SDKVersion = Ctx->getTargetInfo().getSDKVersion();
157157
if (!SDKVersion.empty())

clang/lib/CodeGen/ObjectFilePCHContainerWriter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ class PCHContainerGenerator : public ASTConsumer {
255255
if (Diags.hasErrorOccurred())
256256
return;
257257

258-
M->setTargetTriple(Ctx.getTargetInfo().getTriple().getTriple());
258+
M->setTargetTriple(Ctx.getTargetInfo().getTriple());
259259
M->setDataLayout(Ctx.getTargetInfo().getDataLayoutString());
260260

261261
// PCH files don't have a signature field in the control block,
@@ -274,7 +274,7 @@ class PCHContainerGenerator : public ASTConsumer {
274274
// Ensure the target exists.
275275
std::string Error;
276276
auto Triple = Ctx.getTargetInfo().getTriple();
277-
if (!llvm::TargetRegistry::lookupTarget(Triple.getTriple(), Error))
277+
if (!llvm::TargetRegistry::lookupTarget(Triple, Error))
278278
llvm::report_fatal_error(llvm::Twine(Error));
279279

280280
// Emit the serialized Clang AST into its own section.

clang/lib/Interpreter/DeviceOffload.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ llvm::Expected<llvm::StringRef> IncrementalCUDADeviceParser::GeneratePTX() {
8383
std::error_code());
8484
llvm::TargetOptions TO = llvm::TargetOptions();
8585
llvm::TargetMachine *TargetMachine = Target->createTargetMachine(
86-
PTU.TheModule->getTargetTriple(), TargetOpts.CPU, "", TO,
86+
PTU.TheModule->getTargetTriple().str(), TargetOpts.CPU, "", TO,
8787
llvm::Reloc::Model::PIC_);
8888
PTU.TheModule->setDataLayout(TargetMachine->createDataLayout());
8989

clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ static std::string OptLLVM(const std::string &IR, CodeGenOptLevel OLvl) {
127127
ErrorAndExit(E);
128128

129129
std::unique_ptr<TargetMachine> TM(TheTarget->createTargetMachine(
130-
M->getTargetTriple(), codegen::getCPUStr(), codegen::getFeaturesStr(),
131-
Options, codegen::getExplicitRelocModel(),
130+
M->getTargetTriple().str(), codegen::getCPUStr(),
131+
codegen::getFeaturesStr(), Options, codegen::getExplicitRelocModel(),
132132
codegen::getExplicitCodeModel(), OLvl));
133133
if (!TM)
134134
ErrorAndExit("Could not create target machine");

clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -627,11 +627,11 @@ Expected<StringRef> compileModule(Module &M, OffloadKind Kind) {
627627
return createStringError(Msg);
628628

629629
auto Options =
630-
codegen::InitTargetOptionsFromCodeGenFlags(Triple(M.getTargetTriple()));
630+
codegen::InitTargetOptionsFromCodeGenFlags(M.getTargetTriple());
631631
StringRef CPU = "";
632632
StringRef Features = "";
633633
std::unique_ptr<TargetMachine> TM(
634-
T->createTargetMachine(M.getTargetTriple(), CPU, Features, Options,
634+
T->createTargetMachine(M.getTargetTriple().str(), CPU, Features, Options,
635635
Reloc::PIC_, M.getCodeModel()));
636636

637637
if (M.getDataLayout().isDefault())
@@ -650,7 +650,7 @@ Expected<StringRef> compileModule(Module &M, OffloadKind Kind) {
650650
auto OS = std::make_unique<llvm::raw_fd_ostream>(FD, true);
651651

652652
legacy::PassManager CodeGenPasses;
653-
TargetLibraryInfoImpl TLII(Triple(M.getTargetTriple()));
653+
TargetLibraryInfoImpl TLII(M.getTargetTriple());
654654
CodeGenPasses.add(new TargetLibraryInfoWrapperPass(TLII));
655655
if (TM->addPassesToEmitFile(CodeGenPasses, *OS, nullptr,
656656
CodeGenFileType::ObjectFile))
@@ -674,8 +674,8 @@ wrapDeviceImages(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers,
674674

675675
LLVMContext Context;
676676
Module M("offload.wrapper.module", Context);
677-
M.setTargetTriple(
678-
Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple()));
677+
M.setTargetTriple(Triple(
678+
Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple())));
679679

680680
switch (Kind) {
681681
case OFK_OpenMP:

clang/unittests/Interpreter/InterpreterExtensionsTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class InterpreterExtensionsTest : public InterpreterTestBase {
6161
TT.setOS(llvm::Triple::UnknownOS);
6262

6363
std::string UnusedErr;
64-
return llvm::TargetRegistry::lookupTarget(TT.str(), UnusedErr);
64+
return llvm::TargetRegistry::lookupTarget(TT, UnusedErr);
6565
}
6666
};
6767

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,10 +1389,10 @@ void CodeGenAction::executeAction() {
13891389
// given on the command-line).
13901390
llvm::TargetMachine &targetMachine = ci.getTargetMachine();
13911391

1392-
const std::string &theTriple = targetMachine.getTargetTriple().str();
1392+
const llvm::Triple &theTriple = targetMachine.getTargetTriple();
13931393

13941394
if (llvmModule->getTargetTriple() != theTriple) {
1395-
diags.Report(clang::diag::warn_fe_override_module) << theTriple;
1395+
diags.Report(clang::diag::warn_fe_override_module) << theTriple.str();
13961396
}
13971397

13981398
// Always set the triple and data layout, to make sure they match and are set.

lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ EmulateInstructionMIPS::EmulateInstructionMIPS(
6767
std::string Status;
6868
llvm::Triple triple = arch.GetTriple();
6969
const llvm::Target *target =
70-
llvm::TargetRegistry::lookupTarget(triple.getTriple(), Status);
70+
llvm::TargetRegistry::lookupTarget(triple, Status);
7171

7272
/*
7373
* If we fail to get the target then we haven't registered it. The
@@ -84,7 +84,7 @@ EmulateInstructionMIPS::EmulateInstructionMIPS(
8484
LLVMInitializeMipsAsmPrinter();
8585
LLVMInitializeMipsTargetMC();
8686
LLVMInitializeMipsDisassembler();
87-
target = llvm::TargetRegistry::lookupTarget(triple.getTriple(), Status);
87+
target = llvm::TargetRegistry::lookupTarget(triple, Status);
8888
}
8989
#endif
9090

0 commit comments

Comments
 (0)