Skip to content

Commit ccf68ab

Browse files
Revert "MachineSink: Fix sinking VGPR def out of a divergent loop"
This reverts commit 3f8ef57.
1 parent b3b3336 commit ccf68ab

File tree

4 files changed

+7
-14
lines changed

4 files changed

+7
-14
lines changed

llvm/lib/CodeGen/MachineSink.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,8 @@ static bool blockPrologueInterferes(const MachineBasicBlock *BB,
300300
if (!Reg)
301301
continue;
302302
if (MO.isUse()) {
303-
if (Reg.isPhysical() && MRI && MRI->isConstantPhysReg(Reg))
303+
if (Reg.isPhysical() &&
304+
(TII->isIgnorableUse(MO) || (MRI && MRI->isConstantPhysReg(Reg))))
304305
continue;
305306
if (PI->modifiesRegister(Reg, TRI))
306307
return true;
@@ -1250,24 +1251,16 @@ MachineSinking::FindSuccToSinkTo(MachineInstr &MI, MachineBasicBlock *MBB,
12501251
if (MBB == SuccToSinkTo)
12511252
return nullptr;
12521253

1253-
if (!SuccToSinkTo)
1254-
return nullptr;
1255-
12561254
// It's not safe to sink instructions to EH landing pad. Control flow into
12571255
// landing pad is implicitly defined.
1258-
if (SuccToSinkTo->isEHPad())
1256+
if (SuccToSinkTo && SuccToSinkTo->isEHPad())
12591257
return nullptr;
12601258

12611259
// It ought to be okay to sink instructions into an INLINEASM_BR target, but
12621260
// only if we make sure that MI occurs _before_ an INLINEASM_BR instruction in
12631261
// the source block (which this code does not yet do). So for now, forbid
12641262
// doing so.
1265-
if (SuccToSinkTo->isInlineAsmBrIndirectTarget())
1266-
return nullptr;
1267-
1268-
MachineBasicBlock::const_iterator InsertPos =
1269-
SuccToSinkTo->SkipPHIsAndLabels(SuccToSinkTo->begin());
1270-
if (blockPrologueInterferes(SuccToSinkTo, InsertPos, MI, TRI, TII, MRI))
1263+
if (SuccToSinkTo && SuccToSinkTo->isInlineAsmBrIndirectTarget())
12711264
return nullptr;
12721265

12731266
return SuccToSinkTo;

llvm/test/CodeGen/AMDGPU/machine-sink-loop-var-out-of-divergent-loop-swdev407790.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ define void @machinesink_loop_variable_out_of_divergent_loop(i32 %arg, i1 %cmp49
2121
; CHECK-NEXT: .LBB0_1: ; %Flow
2222
; CHECK-NEXT: ; in Loop: Header=BB0_3 Depth=1
2323
; CHECK-NEXT: s_or_b32 exec_lo, exec_lo, s8
24+
; CHECK-NEXT: v_add_nc_u32_e32 v4, -4, v4
2425
; CHECK-NEXT: .LBB0_2: ; %Flow1
2526
; CHECK-NEXT: ; in Loop: Header=BB0_3 Depth=1
2627
; CHECK-NEXT: s_or_b32 exec_lo, exec_lo, s7
@@ -53,7 +54,6 @@ define void @machinesink_loop_variable_out_of_divergent_loop(i32 %arg, i1 %cmp49
5354
; CHECK-NEXT: ;;#ASMEND
5455
; CHECK-NEXT: v_add_nc_u32_e32 v4, s9, v2
5556
; CHECK-NEXT: v_cmp_ge_u32_e64 s4, v4, v0
56-
; CHECK-NEXT: v_add_nc_u32_e32 v4, -4, v4
5757
; CHECK-NEXT: s_or_b32 s8, s4, s8
5858
; CHECK-NEXT: s_andn2_b32 exec_lo, exec_lo, s8
5959
; CHECK-NEXT: s_cbranch_execz .LBB0_1

llvm/test/CodeGen/AMDGPU/machine-sink-loop-var-out-of-divergent-loop-swdev407790.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ body: |
4242
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.5(0x40000000)
4343
; CHECK-NEXT: {{ $}}
4444
; CHECK-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */
45-
; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
4645
; CHECK-NEXT: [[SI_IF_BREAK:%[0-9]+]]:sreg_32 = SI_IF_BREAK killed [[SI_IF1]], [[SI_IF]], implicit-def dead $scc
4746
; CHECK-NEXT: SI_LOOP [[SI_IF_BREAK]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
4847
; CHECK-NEXT: S_BRANCH %bb.5
@@ -52,6 +51,7 @@ body: |
5251
; CHECK-NEXT: {{ $}}
5352
; CHECK-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[COPY]], %bb.4
5453
; CHECK-NEXT: SI_END_CF [[SI_IF_BREAK]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
54+
; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
5555
; CHECK-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */, implicit [[V_ADD_U32_e64_]]
5656
; CHECK-NEXT: S_BRANCH %bb.2
5757
; CHECK-NEXT: {{ $}}

llvm/test/CodeGen/AMDGPU/sink-after-control-flow.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ body: |
1717
; GFX10-NEXT: {{ $}}
1818
; GFX10-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
1919
; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 8
20-
; GFX10-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 [[S_MOV_B32_]], [[DEF]], implicit $exec
2120
; GFX10-NEXT: [[V_BFE_U32_e64_:%[0-9]+]]:vgpr_32 = V_BFE_U32_e64 [[DEF]], 8, 5, implicit $exec
2221
; GFX10-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 5
2322
; GFX10-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32 = V_CMP_NE_U32_e64 [[V_BFE_U32_e64_]], killed [[S_MOV_B32_1]], implicit $exec
@@ -38,6 +37,7 @@ body: |
3837
; GFX10-NEXT: successors: %bb.3(0x40000000), %bb.4(0x40000000)
3938
; GFX10-NEXT: {{ $}}
4039
; GFX10-NEXT: $exec_lo = S_OR_B32 $exec_lo, [[S_XOR_B32_1]], implicit-def $scc
40+
; GFX10-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 [[S_MOV_B32_]], [[DEF]], implicit $exec
4141
; GFX10-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32 = S_MOV_B32 31
4242
; GFX10-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_32 = V_CMP_NE_U32_e64 [[V_BFE_U32_e64_]], killed [[S_MOV_B32_2]], implicit $exec
4343
; GFX10-NEXT: [[S_XOR_B32_2:%[0-9]+]]:sreg_32 = S_XOR_B32 [[V_CMP_NE_U32_e64_1]], -1, implicit-def $scc

0 commit comments

Comments
 (0)