diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2020-09-11 11:42:44 -0400 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2020-09-18 14:05:18 -0400 |
commit | 3105d0f84bfa6b765bb88cbf090f557e588764ea (patch) | |
tree | a97dd93c646a08521f2d706daa85bfe87a4a152d /llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp | |
parent | c8757ff3aa7dd7a25a6343f6ef74a70c7be04325 (diff) | |
download | llvm-3105d0f84bfa6b765bb88cbf090f557e588764ea.zip llvm-3105d0f84bfa6b765bb88cbf090f557e588764ea.tar.gz llvm-3105d0f84bfa6b765bb88cbf090f557e588764ea.tar.bz2 |
CodeGen: Move split block utility to MachineBasicBlock
AMDGPU needs this in several places, so consolidate them here.
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp | 40 |
1 files changed, 1 insertions, 39 deletions
diff --git a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp index 2d31c34..a29313d 100644 --- a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp @@ -108,8 +108,6 @@ private: void emitIfBreak(MachineInstr &MI); void emitLoop(MachineInstr &MI); - MachineBasicBlock *splitBlock(MachineInstr &MI, MachineBasicBlock *BB, - LiveIntervals *LIS); MachineBasicBlock *emitEndCf(MachineInstr &MI); void findMaskOperands(MachineInstr &MI, unsigned OpNo, @@ -493,42 +491,6 @@ SILowerControlFlow::skipIgnoreExecInstsTrivialSucc( } while (true); } -MachineBasicBlock *SILowerControlFlow::splitBlock(MachineInstr &MI, - MachineBasicBlock *BB, - LiveIntervals *LIS) { - MachineBasicBlock::iterator SplitPoint(&MI); - ++SplitPoint; - - if (SplitPoint == BB->end()) { - // Don't bother with a new block. - return BB; - } - - // Make sure we add any physregs we define in the block as liveins to the new - // block. - LivePhysRegs LiveRegs(*TRI); - LiveRegs.addLiveOuts(*BB); - for (auto I = BB->rbegin(), E = SplitPoint.getReverse(); I != E; ++I) - LiveRegs.stepBackward(*I); - - MachineFunction *MF = BB->getParent(); - MachineBasicBlock *SplitBB - = MF->CreateMachineBasicBlock(BB->getBasicBlock()); - - MF->insert(++MachineFunction::iterator(BB), SplitBB); - SplitBB->splice(SplitBB->begin(), BB, SplitPoint, BB->end()); - - SplitBB->transferSuccessorsAndUpdatePHIs(BB); - BB->addSuccessor(SplitBB); - - addLiveIns(*SplitBB, LiveRegs); - - if (LIS) - LIS->insertMBBInMaps(SplitBB, &MI); - - return SplitBB; -} - MachineBasicBlock *SILowerControlFlow::emitEndCf(MachineInstr &MI) { MachineBasicBlock &MBB = *MI.getParent(); const DebugLoc &DL = MI.getDebugLoc(); @@ -551,7 +513,7 @@ MachineBasicBlock *SILowerControlFlow::emitEndCf(MachineInstr &MI) { unsigned Opcode = OrOpc; MachineBasicBlock *SplitBB = &MBB; if (NeedBlockSplit) { - SplitBB = splitBlock(MI, &MBB, LIS); + SplitBB = MBB.splitAt(MI, /*UpdateLiveIns*/true, LIS); Opcode = OrTermrOpc; InsPt = MI; } |