[AMDGPU] Only remove branches in SIInstrInfo::removeBranch

Without this change _term instructions can be removed during
critical edge splitting.

Reviewed By: foad

Differential Revision: https://reviews.llvm.org/D111126
This commit is contained in:
Carl Ritson 2021-10-06 09:53:52 +09:00
parent 84b0b52b03
commit adf7043a9f
2 changed files with 7 additions and 3 deletions

View File

@ -2460,9 +2460,12 @@ unsigned SIInstrInfo::removeBranch(MachineBasicBlock &MBB,
unsigned RemovedSize = 0;
while (I != MBB.end()) {
MachineBasicBlock::iterator Next = std::next(I);
RemovedSize += getInstSizeInBytes(*I);
I->eraseFromParent();
++Count;
// Skip over artificial terminators when removing instructions.
if (I->isBranch() || I->isReturn()) {
RemovedSize += getInstSizeInBytes(*I);
I->eraseFromParent();
++Count;
}
I = Next;
}

View File

@ -38,6 +38,7 @@ body: |
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[V_CMP_LT_I32_e64_:%[0-9]+]]:sreg_32 = V_CMP_LT_I32_e64 [[V_ADD_U32_e64_3]], [[S_MOV_B32_1]], implicit $exec
; CHECK-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 $exec_lo, [[V_CMP_LT_I32_e64_]], implicit-def $scc
; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_XOR_B32_]]
; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.2, implicit $exec
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.5: