diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h index 118a177f88dfb..44eac6bb2ba33 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -228,7 +228,11 @@ class MachineIRBuilder { void validateSelectOp(const LLT ResTy, const LLT TstTy, const LLT Op0Ty, const LLT Op1Ty); - void recordInsertion(MachineInstr *MI) const; + + void recordInsertion(MachineInstr *InsertedInstr) const { + if (State.Observer) + State.Observer->createdInstr(*InsertedInstr); + } public: /// Some constructors for easy use. @@ -292,10 +296,16 @@ class MachineIRBuilder { /// Set the insertion point before the specified position. /// \pre MBB must be in getMF(). /// \pre II must be a valid iterator in MBB. - void setInsertPt(MachineBasicBlock &MBB, MachineBasicBlock::iterator II); + void setInsertPt(MachineBasicBlock &MBB, MachineBasicBlock::iterator II) { + assert(MBB.getParent() == &getMF() && + "Basic block is in a different function"); + State.MBB = &MBB; + State.II = II; + } + /// @} - void setCSEInfo(GISelCSEInfo *Info); + void setCSEInfo(GISelCSEInfo *Info) { State.CSEInfo = Info; } /// \name Setters for the insertion point. /// @{ @@ -304,11 +314,20 @@ class MachineIRBuilder { /// Set the insertion point to the end of \p MBB. /// \pre \p MBB must be contained by getMF(). - void setMBB(MachineBasicBlock &MBB); + void setMBB(MachineBasicBlock &MBB) { + State.MBB = &MBB; + State.II = MBB.end(); + assert(&getMF() == MBB.getParent() && + "Basic block is in a different function"); + } /// Set the insertion point to before MI. /// \pre MI must be in getMF(). - void setInstr(MachineInstr &MI); + void setInstr(MachineInstr &MI) { + assert(MI.getParent() && "Instruction is not part of a basic block"); + setMBB(*MI.getParent()); + State.II = MI.getIterator(); + } /// @} /// Set the insertion point to before MI, and set the debug loc to MI's loc. @@ -318,8 +337,11 @@ class MachineIRBuilder { setDebugLoc(MI.getDebugLoc()); } - void setChangeObserver(GISelChangeObserver &Observer); - void stopObservingChanges(); + void setChangeObserver(GISelChangeObserver &Observer) { + State.Observer = &Observer; + } + + void stopObservingChanges() { State.Observer = nullptr; } /// @} /// Set the debug location to \p DL for all the next build instructions. @@ -335,7 +357,9 @@ class MachineIRBuilder { /// \pre setBasicBlock or setMI must have been called. /// /// \return a MachineInstrBuilder for the newly created instruction. - MachineInstrBuilder buildInstr(unsigned Opcode); + MachineInstrBuilder buildInstr(unsigned Opcode) { + return insertInstr(buildInstrNoInsert(Opcode)); + } /// Build but don't insert = \p Opcode . /// diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index 4236fdd820842..ea98233beb0ec 100644 --- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -33,48 +33,10 @@ void MachineIRBuilder::setMF(MachineFunction &MF) { State.Observer = nullptr; } -void MachineIRBuilder::setMBB(MachineBasicBlock &MBB) { - State.MBB = &MBB; - State.II = MBB.end(); - assert(&getMF() == MBB.getParent() && - "Basic block is in a different function"); -} - -void MachineIRBuilder::setInstr(MachineInstr &MI) { - assert(MI.getParent() && "Instruction is not part of a basic block"); - setMBB(*MI.getParent()); - State.II = MI.getIterator(); -} - -void MachineIRBuilder::setCSEInfo(GISelCSEInfo *Info) { State.CSEInfo = Info; } - -void MachineIRBuilder::setInsertPt(MachineBasicBlock &MBB, - MachineBasicBlock::iterator II) { - assert(MBB.getParent() == &getMF() && - "Basic block is in a different function"); - State.MBB = &MBB; - State.II = II; -} - -void MachineIRBuilder::recordInsertion(MachineInstr *InsertedInstr) const { - if (State.Observer) - State.Observer->createdInstr(*InsertedInstr); -} - -void MachineIRBuilder::setChangeObserver(GISelChangeObserver &Observer) { - State.Observer = &Observer; -} - -void MachineIRBuilder::stopObservingChanges() { State.Observer = nullptr; } - //------------------------------------------------------------------------------ // Build instruction variants. //------------------------------------------------------------------------------ -MachineInstrBuilder MachineIRBuilder::buildInstr(unsigned Opcode) { - return insertInstr(buildInstrNoInsert(Opcode)); -} - MachineInstrBuilder MachineIRBuilder::buildInstrNoInsert(unsigned Opcode) { MachineInstrBuilder MIB = BuildMI(getMF(), getDL(), getTII().get(Opcode)); return MIB;