Skip to content

Commit 288a298

Browse files
petar-avramovicmichaelselehov
authored andcommitted
Revert "MachineSink: Fix sinking VGPR def out of a divergent loop"
This reverts commit 3f8ef57. Change-Id: I5d168bf6b4fd33c43dd11a5f6a0626432adfc9e9
1 parent 7e5bd4b commit 288a298

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
@@ -288,7 +288,8 @@ static bool blockPrologueInterferes(const MachineBasicBlock *BB,
288288
if (!Reg)
289289
continue;
290290
if (MO.isUse()) {
291-
if (Reg.isPhysical() && MRI && MRI->isConstantPhysReg(Reg))
291+
if (Reg.isPhysical() &&
292+
(TII->isIgnorableUse(MO) || (MRI && MRI->isConstantPhysReg(Reg))))
292293
continue;
293294
if (PI->modifiesRegister(Reg, TRI))
294295
return true;
@@ -1007,24 +1008,16 @@ MachineSinking::FindSuccToSinkTo(MachineInstr &MI, MachineBasicBlock *MBB,
10071008
if (MBB == SuccToSinkTo)
10081009
return nullptr;
10091010

1010-
if (!SuccToSinkTo)
1011-
return nullptr;
1012-
10131011
// It's not safe to sink instructions to EH landing pad. Control flow into
10141012
// landing pad is implicitly defined.
1015-
if (SuccToSinkTo->isEHPad())
1013+
if (SuccToSinkTo && SuccToSinkTo->isEHPad())
10161014
return nullptr;
10171015

10181016
// It ought to be okay to sink instructions into an INLINEASM_BR target, but
10191017
// only if we make sure that MI occurs _before_ an INLINEASM_BR instruction in
10201018
// the source block (which this code does not yet do). So for now, forbid
10211019
// doing so.
1022-
if (SuccToSinkTo->isInlineAsmBrIndirectTarget())
1023-
return nullptr;
1024-
1025-
MachineBasicBlock::const_iterator InsertPos =
1026-
SuccToSinkTo->SkipPHIsAndLabels(SuccToSinkTo->begin());
1027-
if (blockPrologueInterferes(SuccToSinkTo, InsertPos, MI, TRI, TII, MRI))
1020+
if (SuccToSinkTo && SuccToSinkTo->isInlineAsmBrIndirectTarget())
10281021
return nullptr;
10291022

10301023
if (SuccToSinkTo && !TII->isSafeToSink(MI, SuccToSinkTo, CI))

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)