aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2020-09-11 11:42:44 -0400
committerMatt Arsenault <Matthew.Arsenault@amd.com>2020-09-18 14:05:18 -0400
commit3105d0f84bfa6b765bb88cbf090f557e588764ea (patch)
treea97dd93c646a08521f2d706daa85bfe87a4a152d /llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
parentc8757ff3aa7dd7a25a6343f6ef74a70c7be04325 (diff)
downloadllvm-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.cpp40
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;
}