diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h index 44eac6bb2ba33..d6498345f25c8 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -35,23 +35,23 @@ class GISelChangeObserver; /// to transfer BuilderState between different kinds of MachineIRBuilders. struct MachineIRBuilderState { /// MachineFunction under construction. - MachineFunction *MF; + MachineFunction *MF = nullptr; /// Information used to access the description of the opcodes. - const TargetInstrInfo *TII; + const TargetInstrInfo *TII = nullptr; /// Information used to verify types are consistent and to create virtual registers. - MachineRegisterInfo *MRI; + MachineRegisterInfo *MRI = nullptr; /// Debug location to be set to any instruction we create. DebugLoc DL; /// \name Fields describing the insertion point. /// @{ - MachineBasicBlock *MBB; + MachineBasicBlock *MBB = nullptr; MachineBasicBlock::iterator II; /// @} - GISelChangeObserver *Observer; + GISelChangeObserver *Observer = nullptr; - GISelCSEInfo *CSEInfo; + GISelCSEInfo *CSEInfo = nullptr; }; class DstOp { @@ -238,8 +238,16 @@ class MachineIRBuilder { /// Some constructors for easy use. MachineIRBuilder() = default; MachineIRBuilder(MachineFunction &MF) { setMF(MF); } - MachineIRBuilder(MachineInstr &MI) : MachineIRBuilder(*MI.getMF()) { + + MachineIRBuilder(MachineBasicBlock &MBB, MachineBasicBlock::iterator InsPt) { + setMF(*MBB.getParent()); + setInsertPt(MBB, InsPt); + } + + MachineIRBuilder(MachineInstr &MI) : + MachineIRBuilder(*MI.getParent(), MI.getIterator()) { setInstr(MI); + setDebugLoc(MI.getDebugLoc()); } virtual ~MachineIRBuilder() = default; diff --git a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp index a9bfc11d0aa68..1d7be54de3b04 100644 --- a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp @@ -169,6 +169,7 @@ Legalizer::legalizeMachineFunction(MachineFunction &MF, const LegalizerInfo &LI, ArrayRef AuxObservers, LostDebugLocObserver &LocObserver, MachineIRBuilder &MIRBuilder) { + MIRBuilder.setMF(MF); MachineRegisterInfo &MRI = MF.getRegInfo(); // Populate worklists. diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index c38d08f41e685..3a6d499c9cde5 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -87,7 +87,6 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF, MachineIRBuilder &Builder) : MIRBuilder(Builder), MRI(MF.getRegInfo()), LI(*MF.getSubtarget().getLegalizerInfo()), Observer(Observer) { - MIRBuilder.setMF(MF); MIRBuilder.setChangeObserver(Observer); } @@ -95,7 +94,6 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF, const LegalizerInfo &LI, GISelChangeObserver &Observer, MachineIRBuilder &B) : MIRBuilder(B), MRI(MF.getRegInfo()), LI(LI), Observer(Observer) { - MIRBuilder.setMF(MF); MIRBuilder.setChangeObserver(Observer); } LegalizerHelper::LegalizeResult