MachineModuleInfo: Avoid dummy constructor, use INITIALIZE_TM_PASS

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
This commit is contained in:
Matthias Braun 2016-08-24 00:42:05 +00:00
parent 7374d9083b
commit 43f89c5079
6 changed files with 13 additions and 32 deletions

View File

@ -200,10 +200,8 @@ public:
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

View File

@ -313,9 +313,6 @@ public:
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;

View File

@ -102,15 +102,6 @@ TargetIRAnalysis LLVMTargetMachine::getTargetIRAnalysis() {
});
}
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));
@ -150,7 +141,8 @@ addPassesToGenerateCode(LLVMTargetMachine *TM, PassManagerBase &PM,
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.
@ -189,7 +181,7 @@ addPassesToGenerateCode(LLVMTargetMachine *TM, PassManagerBase &PM,
PassConfig->setInitialized();
return &MMI.getContext();
return &MMI->getContext();
}
bool LLVMTargetMachine::addPassesToEmitFile(

View File

@ -23,11 +23,13 @@
#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",
INITIALIZE_TM_PASS(MachineModuleInfo, "machinemoduleinfo",
"Machine Module Information", false, false)
char MachineModuleInfo::ID = 0;
@ -186,20 +188,12 @@ void MMIAddrLabelMapCallbackPtr::allUsesReplacedWith(Value *V2) {
//===----------------------------------------------------------------------===//
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() {
}

View File

@ -450,7 +450,7 @@ static int compileModule(char **argv, LLVMContext &Context) {
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("");

View File

@ -69,8 +69,8 @@ std::unique_ptr<Module> parseMIR(LLVMContext &Context,
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;