Index: llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h =================================================================== --- llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -37,23 +37,23 @@ /// 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 { @@ -240,8 +240,16 @@ /// 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; Index: llvm/lib/CodeGen/GlobalISel/Legalizer.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/Legalizer.cpp +++ llvm/lib/CodeGen/GlobalISel/Legalizer.cpp @@ -170,6 +170,7 @@ ArrayRef AuxObservers, LostDebugLocObserver &LocObserver, MachineIRBuilder &MIRBuilder) { + MIRBuilder.setMF(MF); MachineRegisterInfo &MRI = MF.getRegInfo(); // Populate worklists. Index: llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -87,7 +87,6 @@ MachineIRBuilder &Builder) : MIRBuilder(Builder), MRI(MF.getRegInfo()), LI(*MF.getSubtarget().getLegalizerInfo()), Observer(Observer) { - MIRBuilder.setMF(MF); MIRBuilder.setChangeObserver(Observer); } @@ -95,7 +94,6 @@ GISelChangeObserver &Observer, MachineIRBuilder &B) : MIRBuilder(B), MRI(MF.getRegInfo()), LI(LI), Observer(Observer) { - MIRBuilder.setMF(MF); MIRBuilder.setChangeObserver(Observer); } LegalizerHelper::LegalizeResult