diff options
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h')
-rw-r--r-- | contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h b/contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h index 0ee595b5b5ce..fa900affb214 100644 --- a/contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h +++ b/contrib/llvm-project/llvm/include/llvm/CodeGen/MachineModuleInfo.h @@ -54,8 +54,8 @@ class Module; //===----------------------------------------------------------------------===// /// This class can be derived from and used by targets to hold private /// target-specific information for each Module. Objects of type are -/// accessed/created with MMI::getInfo and destroyed when the MachineModuleInfo -/// is destroyed. +/// accessed/created with MachineModuleInfo::getObjFileInfo and destroyed when +/// the MachineModuleInfo is destroyed. /// class MachineModuleInfoImpl { public: @@ -83,6 +83,9 @@ class MachineModuleInfo { /// This is the MCContext used for the entire code generator. MCContext Context; + // This is an external context, that if assigned, will be used instead of the + // internal context. + MCContext *ExternalContext = nullptr; /// This is the LLVM Module being worked on. const Module *TheModule; @@ -149,6 +152,9 @@ class MachineModuleInfo { public: explicit MachineModuleInfo(const LLVMTargetMachine *TM = nullptr); + explicit MachineModuleInfo(const LLVMTargetMachine *TM, + MCContext *ExtContext); + MachineModuleInfo(MachineModuleInfo &&MMII); ~MachineModuleInfo(); @@ -158,8 +164,12 @@ public: const LLVMTargetMachine &getTarget() const { return TM; } - const MCContext &getContext() const { return Context; } - MCContext &getContext() { return Context; } + const MCContext &getContext() const { + return ExternalContext ? *ExternalContext : Context; + } + MCContext &getContext() { + return ExternalContext ? *ExternalContext : Context; + } const Module *getModule() const { return TheModule; } @@ -251,6 +261,12 @@ public: return Personalities; } /// \} + + // MMI owes MCContext. It should never be invalidated. + bool invalidate(Module &, const PreservedAnalyses &, + ModuleAnalysisManager::Invalidator &) { + return false; + } }; // End class MachineModuleInfo class MachineModuleInfoWrapperPass : public ImmutablePass { @@ -260,6 +276,9 @@ public: static char ID; // Pass identification, replacement for typeid explicit MachineModuleInfoWrapperPass(const LLVMTargetMachine *TM = nullptr); + explicit MachineModuleInfoWrapperPass(const LLVMTargetMachine *TM, + MCContext *ExtContext); + // Initialization and Finalization bool doInitialization(Module &) override; bool doFinalization(Module &) override; |