From babbf4441b6022a2d76f831316b7c3588ade9e15 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Sun, 7 Jun 2020 21:24:34 -0400 Subject: [PATCH] GlobalISel: Move some trivial MIRBuilder methods into the header The construction APIs for MachineIRBuilder don't make much sense, and it's been annoying to sort through it with these trivial functions separate from the declaration. --- .../llvm/CodeGen/GlobalISel/MachineIRBuilder.h | 40 +++++++++++++++++----- llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 38 -------------------- 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h index 118a177..44eac6b 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h @@ -228,7 +228,11 @@ protected: 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 @@ public: /// 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 @@ public: /// 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 @@ public: 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 @@ public: /// \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 4236fdd..ea98233 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; -- 2.7.4