https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/226837
getModuleMetadata had a single caller, which invoked it immediately after Initialize. Pass the module to Initialize and fold it in. Co-Authored-By: Claude Opus 5 <[email protected]> >From e10e760418d7e791832474a1139f684810570f7e Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Sun, 27 Sep 2026 10:15:08 +0200 Subject: [PATCH] CodeGen: Merge TargetLoweringObjectFile::getModuleMetadata into Initialize getModuleMetadata had a single caller, which invoked it immediately after Initialize. Pass the module to Initialize and fold it in. Co-Authored-By: Claude Opus 5 <[email protected]> --- .../CodeGen/TargetLoweringObjectFileImpl.h | 35 +++++++----- .../llvm/Target/TargetLoweringObjectFile.h | 19 +++---- llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 - llvm/lib/CodeGen/MachineModuleInfo.cpp | 4 +- .../CodeGen/TargetLoweringObjectFileImpl.cpp | 54 +++++++++++-------- .../AArch64/AArch64TargetObjectFile.cpp | 5 +- .../Target/AArch64/AArch64TargetObjectFile.h | 3 +- llvm/lib/Target/ARM/ARMTargetObjectFile.cpp | 11 ++-- llvm/lib/Target/ARM/ARMTargetObjectFile.h | 5 +- llvm/lib/Target/AVR/AVRTargetObjectFile.cpp | 5 +- llvm/lib/Target/AVR/AVRTargetObjectFile.h | 3 +- llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp | 5 +- llvm/lib/Target/CSKY/CSKYTargetObjectFile.h | 3 +- .../Hexagon/HexagonTargetObjectFile.cpp | 5 +- .../Target/Hexagon/HexagonTargetObjectFile.h | 3 +- .../Target/Lanai/LanaiTargetObjectFile.cpp | 6 +-- llvm/lib/Target/Lanai/LanaiTargetObjectFile.h | 3 +- llvm/lib/Target/M68k/M68kTargetObjectFile.cpp | 5 +- llvm/lib/Target/M68k/M68kTargetObjectFile.h | 3 +- llvm/lib/Target/Mips/MipsTargetObjectFile.cpp | 5 +- llvm/lib/Target/Mips/MipsTargetObjectFile.h | 3 +- .../Target/PowerPC/PPCTargetObjectFile.cpp | 8 +-- llvm/lib/Target/PowerPC/PPCTargetObjectFile.h | 3 +- .../Target/RISCV/RISCVTargetObjectFile.cpp | 30 +++++------ llvm/lib/Target/RISCV/RISCVTargetObjectFile.h | 5 +- .../Target/Sparc/SparcTargetObjectFile.cpp | 5 +- llvm/lib/Target/Sparc/SparcTargetObjectFile.h | 3 +- llvm/lib/Target/TargetLoweringObjectFile.cpp | 7 +-- llvm/lib/Target/VE/VETargetMachine.cpp | 5 +- .../WebAssemblyTargetObjectFile.cpp | 5 +- .../WebAssembly/WebAssemblyTargetObjectFile.h | 3 +- .../Target/XCore/XCoreTargetObjectFile.cpp | 8 +-- llvm/lib/Target/XCore/XCoreTargetObjectFile.h | 3 +- llvm/unittests/CodeGen/TestAsmPrinter.cpp | 3 +- llvm/unittests/CodeGen/TestAsmPrinter.h | 4 ++ llvm/unittests/CodeGen/X86MCInstLowerTest.cpp | 4 +- .../DebugInfo/DWARF/DwarfGenerator.cpp | 3 +- .../DebugInfo/DWARF/DwarfGenerator.h | 4 ++ 38 files changed, 164 insertions(+), 126 deletions(-) diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h index e76a1ac1720579..72a10441842cb1 100644 --- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h +++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h @@ -47,12 +47,11 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile { public: ~TargetLoweringObjectFileELF() override = default; - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; - - void getModuleMetadata(Module &M) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; /// Emit Obj-C garbage collection and linker options. - void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override; + void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override; void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &DL, const MCSymbol *Sym, @@ -63,7 +62,8 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile { const MCSymbol *Sym, const MachineModuleInfo *MMI) const; - void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override; + void emitLinkerDirectives(MCStreamer &Streamer, + const Module &M) const override; /// Given a constant with the SectionKind, return a section that it should be /// placed in. @@ -141,15 +141,17 @@ class LLVM_ABI TargetLoweringObjectFileMachO : public TargetLoweringObjectFile { TargetLoweringObjectFileMachO(); ~TargetLoweringObjectFileMachO() override = default; - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *getStaticDtorSection(unsigned Priority, const MCSymbol *KeySym) const override; /// Emit the module flags that specify the garbage collection information. - void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override; + void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override; - void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override; + void emitLinkerDirectives(MCStreamer &Streamer, + const Module &M) const override; MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; @@ -192,7 +194,8 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile { public: ~TargetLoweringObjectFileCOFF() override = default; - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; @@ -209,9 +212,10 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile { const Function &F) const override; /// Emit Obj-C garbage collection and linker options. - void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override; + void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override; - void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override; + void emitLinkerDirectives(MCStreamer &Streamer, + const Module &M) const override; MCSection *getStaticCtorSection(unsigned Priority, const MCSymbol *KeySym) const override; @@ -238,7 +242,8 @@ class LLVM_ABI TargetLoweringObjectFileWasm : public TargetLoweringObjectFile { TargetLoweringObjectFileWasm() = default; ~TargetLoweringObjectFileWasm() override = default; - void getModuleMetadata(Module &M) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; @@ -266,7 +271,8 @@ class LLVM_ABI TargetLoweringObjectFileXCOFF : public TargetLoweringObjectFile { static MCSymbol *getEHInfoTableSymbol(const MachineFunction *MF); - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference, const Function &F) const override; @@ -328,7 +334,8 @@ class LLVM_ABI TargetLoweringObjectFileGOFF : public TargetLoweringObjectFile { TargetLoweringObjectFileGOFF(); ~TargetLoweringObjectFileGOFF() override = default; - void getModuleMetadata(Module &M) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference, const Function &F) const override; diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h index 3cce5974e67057..3ac4663b8d4c7d 100644 --- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h +++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h @@ -80,29 +80,30 @@ class LLVM_ABI TargetLoweringObjectFile : public MCObjectFileInfo { /// This method must be called before any actual lowering is done. This /// specifies the current context for codegen, and gives the lowering - /// implementations a chance to set up their default sections. - virtual void Initialize(MCContext &ctx, const TargetMachine &TM); + /// implementations a chance to set up their default sections and to inspect + /// the module-level metadata the platform cares about. + virtual void Initialize(MCContext &ctx, const TargetMachine &TM, + const Module &M); virtual void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM, const MCSymbol *Sym, const MachineModuleInfo *MMI) const; /// Emit the module-level metadata that the platform cares about. - virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {} + virtual void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const { + } /// Emit Call Graph Profile metadata. - void emitCGProfileMetadata(MCStreamer &Streamer, Module &M) const; + void emitCGProfileMetadata(MCStreamer &Streamer, const Module &M) const; /// Emit pseudo_probe_desc metadata. - void emitPseudoProbeDescMetadata(MCStreamer &Streamer, Module &M, + void emitPseudoProbeDescMetadata(MCStreamer &Streamer, const Module &M, std::function<void(MCStreamer &Streamer)> COMDATSymEmitter = nullptr) const; /// Process linker options metadata and emit platform-specific bits. - virtual void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const {} - - /// Get the module-level metadata that the platform cares about. - virtual void getModuleMetadata(Module &M) {} + virtual void emitLinkerDirectives(MCStreamer &Streamer, + const Module &M) const {} /// Given a constant with the SectionKind, return a section that it should be /// placed in. diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index bd929901612f97..750e5e756e0ee0 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -531,8 +531,6 @@ bool AsmPrinter::doInitialization(Module &M) { AddrLabelSymbols = nullptr; - TM.getObjFileLowering()->getModuleMetadata(M); - // On AIX, we delay emitting any section information until // after emitting the .file pseudo-op. This allows additional // information (such as the embedded command line) to be associated diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp index cc7958e59f6809..d5c091f62cb587 100644 --- a/llvm/lib/CodeGen/MachineModuleInfo.cpp +++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp @@ -220,7 +220,7 @@ bool MachineModuleInfoWrapperPass::doInitialization(Module &M) { }); MMI.getTarget().verifyOptionsConsistency(M); MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(), - MMI.getTarget()); + MMI.getTarget(), M); return false; } @@ -247,6 +247,6 @@ MachineModuleAnalysis::run(Module &M, ModuleAnalysisManager &) { }); MMI.getTarget().verifyOptionsConsistency(M); MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(), - MMI.getTarget()); + MMI.getTarget(), M); return Result(MMI); } diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 68ff80ae1d376d..79f0b3e8c620f2 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -82,8 +82,8 @@ static cl::opt<bool> JumpTableInFunctionSection( "jumptable-in-function-section", cl::Hidden, cl::init(false), cl::desc("Putting Jump Table in function section")); -static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags, - StringRef &Section) { +static void GetObjCImageInfo(const Module &M, unsigned &Version, + unsigned &Flags, StringRef &Section) { SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags; M.getModuleFlagsMetadata(ModuleFlags); @@ -121,8 +121,9 @@ static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags, //===----------------------------------------------------------------------===// void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, - const TargetMachine &TgtM) { - TargetLoweringObjectFile::Initialize(Ctx, TgtM); + const TargetMachine &TgtM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TgtM, M); const CodeModel::Model CM = TgtM.getCodeModel(); InitializeELF(TgtM.Options.UseInitArray); @@ -306,9 +307,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, default: break; } -} -void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) { SmallVector<GlobalValue *, 4> Vec; collectUsedGlobalVariables(M, Vec, false); for (GlobalValue *GV : Vec) @@ -317,7 +316,7 @@ void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) { } void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer, - Module &M) const { + const Module &M) const { auto &C = getContext(); emitLinkerDirectives(Streamer, M); @@ -380,7 +379,7 @@ void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer, } void TargetLoweringObjectFileELF::emitLinkerDirectives(MCStreamer &Streamer, - Module &M) const { + const Module &M) const { auto &C = getContext(); if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) { auto *S = C.getELFSection(".linker-options", ELF::SHT_LLVM_LINKER_OPTIONS, @@ -1314,8 +1313,9 @@ TargetLoweringObjectFileMachO::TargetLoweringObjectFileMachO() { } void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFile::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TM, M); if (TM.getRelocationModel() == Reloc::Static) { StaticCtorSection = Ctx.getMachOSection("__TEXT", "__constructor", 0, SectionKind::getData()); @@ -1348,7 +1348,7 @@ MCSection *TargetLoweringObjectFileMachO::getStaticDtorSection( } void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer, - Module &M) const { + const Module &M) const { // Emit the linker options if present. emitLinkerDirectives(Streamer, M); @@ -1386,8 +1386,8 @@ void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer, Streamer.addBlankLine(); } -void TargetLoweringObjectFileMachO::emitLinkerDirectives(MCStreamer &Streamer, - Module &M) const { +void TargetLoweringObjectFileMachO::emitLinkerDirectives( + MCStreamer &Streamer, const Module &M) const { if (auto *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) { for (const auto *Option : LinkerOptions->operands()) { SmallVector<std::string, 4> StrOptions; @@ -1948,7 +1948,7 @@ bool TargetLoweringObjectFileCOFF::shouldPutJumpTableInFunctionSection( } void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer, - Module &M) const { + const Module &M) const { emitLinkerDirectives(Streamer, M); unsigned Version = 0; @@ -1980,8 +1980,8 @@ void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer, }); } -void TargetLoweringObjectFileCOFF::emitLinkerDirectives( - MCStreamer &Streamer, Module &M) const { +void TargetLoweringObjectFileCOFF::emitLinkerDirectives(MCStreamer &Streamer, + const Module &M) const { if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) { // Emit the linker options to the linker .drectve section. According to the // spec, this section is a space-separated string containing flags for @@ -2040,8 +2040,9 @@ void TargetLoweringObjectFileCOFF::emitLinkerDirectives( } void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFile::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TM, M); const Triple &T = TM.getTargetTriple(); if (T.isWindowsMSVCEnvironment() || T.isWindowsItaniumEnvironment()) { StaticCtorSection = @@ -2298,7 +2299,11 @@ static unsigned getWasmSectionFlags(SectionKind K, bool Retain) { return Flags; } -void TargetLoweringObjectFileWasm::getModuleMetadata(Module &M) { +void TargetLoweringObjectFileWasm::Initialize(MCContext &Ctx, + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TM, M); + SmallVector<GlobalValue *, 4> Vec; collectUsedGlobalVariables(M, Vec, false); for (GlobalValue *GV : Vec) @@ -2711,8 +2716,9 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForConstant( } void TargetLoweringObjectFileXCOFF::Initialize(MCContext &Ctx, - const TargetMachine &TgtM) { - TargetLoweringObjectFile::Initialize(Ctx, TgtM); + const TargetMachine &TgtM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TgtM, M); TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_datarel | (TgtM.getTargetTriple().isArch32Bit() ? dwarf::DW_EH_PE_sdata4 @@ -2858,7 +2864,11 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForLSDA( //===----------------------------------------------------------------------===// TargetLoweringObjectFileGOFF::TargetLoweringObjectFileGOFF() = default; -void TargetLoweringObjectFileGOFF::getModuleMetadata(Module &M) { +void TargetLoweringObjectFileGOFF::Initialize(MCContext &Ctx, + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFile::Initialize(Ctx, TM, M); + // Construct the default names for the root SD and the ADA PR symbol. StringRef FileName = sys::path::stem(M.getSourceFileName()); if (FileName.size() > 1 && FileName.starts_with('<') && diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp index 2d01b321ce013a..b94e46a7445ef1 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp @@ -28,8 +28,9 @@ static cl::opt<bool> EmitAArch64DebugTLSLocation( cl::Hidden); void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); PLTPCRelativeSpecifier = AArch64::S_PLT; SupportIndirectSymViaGOTPCRel = true; SupportDebugThreadLocalLocation = EmitAArch64DebugTLSLocation; diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h index 78c0c22da8d1b7..70263ff29ff16c 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h +++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h @@ -17,7 +17,8 @@ namespace llvm { /// This implementation is used for AArch64 ELF targets (Linux in particular). class AArch64_ELFTargetObjectFile : public TargetLoweringObjectFileELF { - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; public: const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV, diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp index 44040be9c8db9e..f9a1db871902d4 100644 --- a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp +++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp @@ -33,14 +33,14 @@ ARMElfTargetObjectFile::ARMElfTargetObjectFile() { SupportIndirectSymViaGOTPCRel = true; } -void ARMElfTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { +void ARMElfTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) { const ARMBaseTargetMachine &ARM_TM = static_cast<const ARMBaseTargetMachine &>(TM); bool genExecuteOnly = ARM_TM.getMCSubtargetInfo().hasFeature(ARM::FeatureExecuteOnly); - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); // Make code section unreadable when in execute-only mode if (genExecuteOnly) { @@ -53,12 +53,7 @@ void ARMElfTargetObjectFile::Initialize(MCContext &Ctx, TextSection = Ctx.getELFSection(".text", Type, Flags, 0, "", false, 0U, nullptr); } -} - -void ARMElfTargetObjectFile::getModuleMetadata(Module &M) { - TargetLoweringObjectFileELF::getModuleMetadata(M); - const auto &ARM_TM = static_cast<const ARMBaseTargetMachine &>(*TM); bool isAAPCS_ABI = ARM_TM.getEffectiveABI(M) == ARM::ARMABI::ARM_ABI_AAPCS; InitializeELF(isAAPCS_ABI); diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.h b/llvm/lib/Target/ARM/ARMTargetObjectFile.h index 02cd138cf5c04d..eab097978a7942 100644 --- a/llvm/lib/Target/ARM/ARMTargetObjectFile.h +++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.h @@ -18,9 +18,8 @@ namespace llvm { class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF { public: ARMElfTargetObjectFile(); - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; - - void getModuleMetadata(Module &M) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCRegister getStaticBase() const override; diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp index 8cab0f3ba95b4b..c67de44ccf37eb 100644 --- a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp +++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp @@ -18,8 +18,9 @@ #include "AVR.h" namespace llvm { -void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) { - Base::Initialize(Ctx, TM); +void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) { + Base::Initialize(Ctx, TM, M); ProgmemDataSection = Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC); Progmem1DataSection = diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.h b/llvm/lib/Target/AVR/AVRTargetObjectFile.h index 609849b4402957..10034bd39f4b6e 100644 --- a/llvm/lib/Target/AVR/AVRTargetObjectFile.h +++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.h @@ -18,7 +18,8 @@ class AVRTargetObjectFile : public TargetLoweringObjectFileELF { typedef TargetLoweringObjectFileELF Base; public: - void Initialize(MCContext &ctx, const TargetMachine &TM) override; + void Initialize(MCContext &ctx, const TargetMachine &TM, + const Module &M) override; MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp index b5592d34ca54b1..b5c9d2d4508bcb 100644 --- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp +++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp @@ -14,8 +14,9 @@ using namespace llvm; void CSKYELFTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; PersonalityEncoding = diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h index a82f2681c12aef..387580c00ce00b 100644 --- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h +++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h @@ -16,7 +16,8 @@ namespace llvm { class CSKYELFTargetObjectFile : public TargetLoweringObjectFileELF { public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; }; } // namespace llvm diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp index 0212dffa386457..dac3786b213ad4 100644 --- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp +++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp @@ -110,8 +110,9 @@ static const char *getSectionSuffixForSize(unsigned Size) { } void HexagonTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); SmallDataSection = getContext().getELFSection(".sdata", ELF::SHT_PROGBITS, diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h index 550aac72346f3d..aed5b649f6b99b 100644 --- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h +++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h @@ -17,7 +17,8 @@ namespace llvm { class HexagonTargetObjectFile : public TargetLoweringObjectFileELF { public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp index 472ee41b35599d..243653493b08c2 100644 --- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp +++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp @@ -22,9 +22,9 @@ static cl::opt<unsigned> SSThreshold( cl::desc("Small data and bss section threshold size (default=0)"), cl::init(0)); -void LanaiTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); +void LanaiTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); SmallDataSection = getContext().getELFSection( ".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC); diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h index ade56f9d6bccf5..083823d13491b1 100644 --- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h +++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h @@ -22,7 +22,8 @@ class LanaiTargetObjectFile : public TargetLoweringObjectFileELF { const TargetMachine &TM) const; public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; /// Return true if this global address should be placed into small data/bss /// section. diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp index 5aed6b8fe38e1c..8dd91c83c35d3e 100644 --- a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp +++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp @@ -32,8 +32,9 @@ static cl::opt<unsigned> SSThreshold( cl::init(8)); void M68kELFTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); InitializeELF(TM.Options.UseInitArray); // FIXME do we need `.sdata` and `.sbss` explicitly? diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.h b/llvm/lib/Target/M68k/M68kTargetObjectFile.h index 3d145aa434750b..0df600a3e3e726 100644 --- a/llvm/lib/Target/M68k/M68kTargetObjectFile.h +++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.h @@ -22,7 +22,8 @@ class M68kELFTargetObjectFile : public TargetLoweringObjectFileELF { MCSection *SmallBSSSection; public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; }; } // end namespace llvm diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp index 3ca44a2ab3e378..3caa2fa731756b 100644 --- a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp +++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp @@ -40,8 +40,9 @@ EmbeddedData("membedded-data", cl::Hidden, " sections if possible: .rodata, .sdata, .data ."), cl::init(false)); -void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){ - TargetLoweringObjectFileELF::Initialize(Ctx, TM); +void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); SmallDataSection = getContext().getELFSection( ".sdata", ELF::SHT_PROGBITS, diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.h b/llvm/lib/Target/Mips/MipsTargetObjectFile.h index 09ec2a9f920958..2618b18c5c5c4e 100644 --- a/llvm/lib/Target/Mips/MipsTargetObjectFile.h +++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.h @@ -24,7 +24,8 @@ class MipsTargetObjectFile : public TargetLoweringObjectFileELF { explicit MipsTargetObjectFile(bool UseSmallSection) : UseSmallSection(UseSmallSection) {} - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; /// Return true if this global address should be placed into small data/bss /// section. diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp index 29e4286cf4adab..6df78f6bdec589 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp @@ -14,10 +14,10 @@ using namespace llvm; -void -PPC64LinuxTargetObjectFile:: -Initialize(MCContext &Ctx, const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); +void PPC64LinuxTargetObjectFile::Initialize(MCContext &Ctx, + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); } MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal( diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h index 78a5840c87c721..75e23d714fcb80 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h +++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h @@ -19,7 +19,8 @@ namespace llvm { /// 64-bit PowerPC Linux. class PPC64LinuxTargetObjectFile : public TargetLoweringObjectFileELF { - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp index 9f3666f1a2ff69..0df0189b681bac 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp @@ -24,8 +24,9 @@ unsigned RISCVELFTargetObjectFile::getTextSectionAlignment() const { } void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); PLTPCRelativeSpecifier = ELF::R_RISCV_PLT32; SupportIndirectSymViaGOTPCRel = true; @@ -44,6 +45,17 @@ void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx, ".srodata.cst16", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 16); SmallROData32Section = getContext().getELFSection( ".srodata.cst32", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 32); + + SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags; + M.getModuleFlagsMetadata(ModuleFlags); + + for (const auto &MFE : ModuleFlags) { + StringRef Key = MFE.Key->getString(); + if (Key == "SmallDataLimit") { + SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue(); + break; + } + } } const MCExpr *RISCVELFTargetObjectFile::getIndirectSymViaGOTPCRel( @@ -139,20 +151,6 @@ MCSection *RISCVELFTargetObjectFile::SelectSectionForGlobal( return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, Kind, TM); } -void RISCVELFTargetObjectFile::getModuleMetadata(Module &M) { - TargetLoweringObjectFileELF::getModuleMetadata(M); - SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags; - M.getModuleFlagsMetadata(ModuleFlags); - - for (const auto &MFE : ModuleFlags) { - StringRef Key = MFE.Key->getString(); - if (Key == "SmallDataLimit") { - SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue(); - break; - } - } -} - /// Return true if this constant should be placed into small data section. bool RISCVELFTargetObjectFile::isConstantInSmallSection( const DataLayout &DL, const Constant *CN) const { diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h index db03a0546079da..902f6b5a342ac5 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h +++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h @@ -27,7 +27,8 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF { public: unsigned getTextSectionAlignment() const override; - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; /// Return true if this global address should be placed into small data/bss /// section. @@ -44,8 +45,6 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF { const Constant *C, Align &Alignment, const Function *F) const override; - void getModuleMetadata(Module &M) override; - bool isInSmallSection(uint64_t Size) const; const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV, diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp index b1919647590828..507319a8dbc367 100644 --- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp +++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp @@ -16,8 +16,9 @@ using namespace llvm; void SparcELFTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); } const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference( diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h index 28ab139180423c..54202c8f92e2fd 100644 --- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h +++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h @@ -20,7 +20,8 @@ class SparcELFTargetObjectFile : public TargetLoweringObjectFileELF { public: SparcELFTargetObjectFile() = default; - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; const MCExpr *getTTypeGlobalReference(const GlobalValue *GV, unsigned Encoding, diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp index b94c374e1dbd59..a596a645a56eaf 100644 --- a/llvm/lib/Target/TargetLoweringObjectFile.cpp +++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp @@ -40,7 +40,8 @@ using namespace llvm; /// done. This specifies the current context for codegen, and gives the /// lowering implementations a chance to set up their default sections. void TargetLoweringObjectFile::Initialize(MCContext &ctx, - const TargetMachine &TM) { + const TargetMachine &TM, + const Module &M) { // `Initialize` can be called more than once. delete Mang; Mang = new Mangler(); @@ -148,7 +149,7 @@ void TargetLoweringObjectFile::emitPersonalityValue( const MachineModuleInfo *MMI) const {} void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer, - Module &M) const { + const Module &M) const { MCContext &C = getContext(); SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags; M.getModuleFlagsMetadata(ModuleFlags); @@ -194,7 +195,7 @@ void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer, } void TargetLoweringObjectFile::emitPseudoProbeDescMetadata( - MCStreamer &Streamer, Module &M, + MCStreamer &Streamer, const Module &M, std::function<void(MCStreamer &Streamer)> COMDATSymEmitter) const { NamedMDNode *FuncInfo = M.getNamedMetadata(PseudoProbeDescMetadataName); if (!FuncInfo) diff --git a/llvm/lib/Target/VE/VETargetMachine.cpp b/llvm/lib/Target/VE/VETargetMachine.cpp index ae61da2fb441bf..af561ae1b5ba31 100644 --- a/llvm/lib/Target/VE/VETargetMachine.cpp +++ b/llvm/lib/Target/VE/VETargetMachine.cpp @@ -41,8 +41,9 @@ static Reloc::Model getEffectiveRelocModel(std::optional<Reloc::Model> RM) { namespace { class VEELFTargetObjectFile : public TargetLoweringObjectFileELF { - void Initialize(MCContext &Ctx, const TargetMachine &TM) override { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); InitializeELF(TM.Options.UseInitArray); } }; diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp index 22dee6e874ada0..af428bdeade323 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp @@ -17,7 +17,8 @@ using namespace llvm; void WebAssemblyTargetObjectFile::Initialize(MCContext &Ctx, - const TargetMachine &TM) { - TargetLoweringObjectFileWasm::Initialize(Ctx, TM); + const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileWasm::Initialize(Ctx, TM, M); InitializeWasm(); } diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h index f46bb2040a7d4b..c87f30fe23d7f9 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h @@ -21,7 +21,8 @@ namespace llvm { class WebAssemblyTargetObjectFile final : public TargetLoweringObjectFileWasm { public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; }; } // end namespace llvm diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp index 5a8a4d396a1da9..68babb7dcba0a6 100644 --- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp +++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp @@ -16,9 +16,9 @@ using namespace llvm; - -void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){ - TargetLoweringObjectFileELF::Initialize(Ctx, TM); +void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) { + TargetLoweringObjectFileELF::Initialize(Ctx, TM, M); BSSSection = Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS, ELF::SHF_ALLOC | ELF::SHF_WRITE | @@ -60,7 +60,7 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){ // TextSection - see MObjectFileInfo.cpp // StaticCtorSection - see MObjectFileInfo.cpp // StaticDtorSection - see MObjectFileInfo.cpp - } +} static unsigned getXCoreSectionType(SectionKind K) { if (K.isBSS()) diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h index f9b895795c94a1..1fe571e4b295a9 100644 --- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h +++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h @@ -22,7 +22,8 @@ static const unsigned CodeModelLargeSize = 256; MCSection *DataRelROSectionLarge; public: - void Initialize(MCContext &Ctx, const TargetMachine &TM) override; + void Initialize(MCContext &Ctx, const TargetMachine &TM, + const Module &M) override; MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.cpp b/llvm/unittests/CodeGen/TestAsmPrinter.cpp index 8d30e457178fc4..f39ad8c089a3fe 100644 --- a/llvm/unittests/CodeGen/TestAsmPrinter.cpp +++ b/llvm/unittests/CodeGen/TestAsmPrinter.cpp @@ -59,7 +59,8 @@ llvm::Error TestAsmPrinter::init(const Target *TheTarget, StringRef TripleName, MC.reset(new MCContext(TheTriple, TM->getMCAsmInfo(), TM->getMCRegisterInfo(), TM->getMCSubtargetInfo())); - TM->getObjFileLowering()->Initialize(*MC, *TM); + M = std::make_unique<Module>("TestAsmPrinter", Context); + TM->getObjFileLowering()->Initialize(*MC, *TM, *M); MC->setObjectFileInfo(TM->getObjFileLowering()); MS = new StrictMock<MockMCStreamer>(MC.get()); diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.h b/llvm/unittests/CodeGen/TestAsmPrinter.h index 372214a55fcfeb..3f859f95bcd51a 100644 --- a/llvm/unittests/CodeGen/TestAsmPrinter.h +++ b/llvm/unittests/CodeGen/TestAsmPrinter.h @@ -10,6 +10,8 @@ #define LLVM_UNITTESTS_CODEGEN_TESTASMPRINTER_H #include "llvm/BinaryFormat/Dwarf.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" #include "llvm/MC/MCStreamer.h" #include "gmock/gmock.h" @@ -51,6 +53,8 @@ class TestAsmPrinter { std::unique_ptr<MCContext> MC; MockMCStreamer *MS = nullptr; // Owned by AsmPrinter std::unique_ptr<TargetMachine> TM; + LLVMContext Context; + std::unique_ptr<Module> M; std::unique_ptr<AsmPrinter> Asm; /// Private constructor; call TestAsmPrinter::create(...) diff --git a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp index 32d77d16c32728..e6073cf84996d3 100644 --- a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp +++ b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp @@ -55,7 +55,7 @@ class X86MCInstLowerTest : public testing::Test { MC.reset(new MCContext(TM->getTargetTriple(), TM->getMCAsmInfo(), TM->getMCRegisterInfo(), TM->getMCSubtargetInfo())); MC->setObjectFileInfo(TM->getObjFileLowering()); - TM->getObjFileLowering()->Initialize(*MC, *TM); + TM->getObjFileLowering()->Initialize(*MC, *TM, *M); MC->setObjectFileInfo(TM->getObjFileLowering()); // Use a new MCContext for AsmPrinter for testing. @@ -131,7 +131,7 @@ class X86MCInstLowerTest : public testing::Test { TM->getMCRegisterInfo(), TM->getMCSubtargetInfo())); MCFoo->setObjectFileInfo(TM->getObjFileLowering()); - TM->getObjFileLowering()->Initialize(*MCFoo, *TM); + TM->getObjFileLowering()->Initialize(*MCFoo, *TM, *M); MCFoo->setObjectFileInfo(TM->getObjFileLowering()); } diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp index 65e3fc234b8d66..e5a03ef6b0a671 100644 --- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp @@ -489,8 +489,9 @@ llvm::Error dwarfgen::Generator::init(Triple TheTriple, uint16_t V) { inconvertibleErrorCode()); MC.reset(new MCContext(TheTriple, *MAI, *MRI, *MSTI)); + M = std::make_unique<Module>("dwarfgen", Context); TLOF = TM->getObjFileLowering(); - TLOF->Initialize(*MC, *TM); + TLOF->Initialize(*MC, *TM, *M); MC->setObjectFileInfo(TLOF); MCE = TheTarget->createMCCodeEmitter(*MII, *MC); diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h index c617c67ee98b30..3d2d255015b5bc 100644 --- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h +++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h @@ -17,6 +17,8 @@ #include "llvm/ADT/StringRef.h" #include "llvm/CodeGen/DIE.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" #include "llvm/MC/MCTargetOptions.h" #include "llvm/Support/Error.h" @@ -255,6 +257,8 @@ class Generator { MCCodeEmitter *MCE; // Owned by MCStreamer MCStreamer *MS; // Owned by AsmPrinter std::unique_ptr<TargetMachine> TM; + LLVMContext Context; + std::unique_ptr<Module> M; TargetLoweringObjectFile *TLOF; // Owned by TargetMachine; std::unique_ptr<AsmPrinter> Asm; BumpPtrAllocator Allocator; _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
