Change this pass constructor to just accept a const TargetMachine * and
use INITIALIZE_TM_PASS, that way we can get rid of the dummy
constructor. The pass will still fail when calling the default
constructor leading to TM == nullptr, this is no different than before
but is more in line what other codegen passes are doing and avoids the
dummy constructor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279598
91177308-0d34-0410-b5e6-
96231b3b80d8
typedef SmallVector<VariableDbgInfo, 4> VariableDbgInfoMapTy;
VariableDbgInfoMapTy VariableDbgInfos;
- MachineModuleInfo(); // DUMMY CONSTRUCTOR, DO NOT CALL.
// Real constructor.
- MachineModuleInfo(const MCAsmInfo &MAI, const MCRegisterInfo &MRI,
- const MCObjectFileInfo *MOFI);
+ explicit MachineModuleInfo(const TargetMachine *TM = nullptr);
~MachineModuleInfo() override;
// Initialization and Finalization
raw_pwrite_stream &OS,
bool DisableVerify = true) override;
- /// Add MachineModuleInfo pass to pass manager.
- MachineModuleInfo &addMachineModuleInfo(PassManagerBase &PM) const;
-
/// Add MachineFunctionAnalysis pass to pass manager.
void addMachineFunctionAnalysis(PassManagerBase &PM,
MachineFunctionInitializer *MFInitializer) const;
});
}
-MachineModuleInfo &
-LLVMTargetMachine::addMachineModuleInfo(PassManagerBase &PM) const {
- MachineModuleInfo *MMI = new MachineModuleInfo(*getMCAsmInfo(),
- *getMCRegisterInfo(),
- getObjFileLowering());
- PM.add(MMI);
- return *MMI;
-}
-
void LLVMTargetMachine::addMachineFunctionAnalysis(PassManagerBase &PM,
MachineFunctionInitializer *MFInitializer) const {
PM.add(new MachineFunctionAnalysis(*this, MFInitializer));
PassConfig->addISelPrepare();
- MachineModuleInfo &MMI = TM->addMachineModuleInfo(PM);
+ MachineModuleInfo *MMI = new MachineModuleInfo(TM);
+ PM.add(MMI);
TM->addMachineFunctionAnalysis(PM, MFInitializer);
// Enable FastISel with -fast, but allow that to be overridden.
PassConfig->setInitialized();
- return &MMI.getContext();
+ return &MMI->getContext();
}
bool LLVMTargetMachine::addPassesToEmitFile(
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Target/TargetLoweringObjectFile.h"
+#include "llvm/Target/TargetMachine.h"
using namespace llvm;
using namespace llvm::dwarf;
// Handle the Pass registration stuff necessary to use DataLayout's.
-INITIALIZE_PASS(MachineModuleInfo, "machinemoduleinfo",
- "Machine Module Information", false, false)
+INITIALIZE_TM_PASS(MachineModuleInfo, "machinemoduleinfo",
+ "Machine Module Information", false, false)
char MachineModuleInfo::ID = 0;
// Out of line virtual method.
//===----------------------------------------------------------------------===//
-MachineModuleInfo::MachineModuleInfo(const MCAsmInfo &MAI,
- const MCRegisterInfo &MRI,
- const MCObjectFileInfo *MOFI)
- : ImmutablePass(ID), Context(&MAI, &MRI, MOFI, nullptr, false) {
+MachineModuleInfo::MachineModuleInfo(const TargetMachine *TM)
+ : ImmutablePass(ID), Context(TM->getMCAsmInfo(), TM->getMCRegisterInfo(),
+ TM->getObjFileLowering(), nullptr, false) {
initializeMachineModuleInfoPass(*PassRegistry::getPassRegistry());
}
-MachineModuleInfo::MachineModuleInfo()
- : ImmutablePass(ID), Context(nullptr, nullptr, nullptr) {
- llvm_unreachable("This MachineModuleInfo constructor should never be called, "
- "MMI should always be explicitly constructed by "
- "LLVMTargetMachine");
-}
-
MachineModuleInfo::~MachineModuleInfo() {
}
LLVMTargetMachine &LLVMTM = static_cast<LLVMTargetMachine&>(*Target);
TargetPassConfig &TPC = *LLVMTM.createPassConfig(PM);
PM.add(&TPC);
- LLVMTM.addMachineModuleInfo(PM);
+ PM.add(new MachineModuleInfo(&LLVMTM));
LLVMTM.addMachineFunctionAnalysis(PM, MIR.get());
TPC.printAndVerify("");
if (!F)
return nullptr;
+ PM.add(new MachineModuleInfo(&TM));
const LLVMTargetMachine &LLVMTM = static_cast<const LLVMTargetMachine&>(TM);
- LLVMTM.addMachineModuleInfo(PM);
LLVMTM.addMachineFunctionAnalysis(PM, MIR.get());
return M;