Skip to content

Commit df96e09

Browse files
authored
[StructurizeCFG] nested-if zerocost hoist bugfix (#155408)
When zero cost instructions are hoisted, the simplifyHoistedPhi function was setting incoming phi values which were not dominating the use causing runtime failure. This was set to poison by rebuildSSA function. This commit fixes the issue.
1 parent 353b5e4 commit df96e09

File tree

3 files changed

+5
-6
lines changed

3 files changed

+5
-6
lines changed

llvm/lib/Transforms/Scalar/StructurizeCFG.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,8 @@ void StructurizeCFG::simplifyHoistedPhis() {
997997
continue;
998998

999999
OtherPhi->setIncomingValue(PoisonValBBIdx, V);
1000-
Phi->setIncomingValue(i, OtherV);
1000+
if (DT->dominates(OtherV, Phi))
1001+
Phi->setIncomingValue(i, OtherV);
10011002
}
10021003
}
10031004
}

llvm/test/CodeGen/AMDGPU/structurize-hoist.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,11 @@ define void @test_nested_if(ptr %ptr, i32 %val, i1 %cond) {
189189
; GFX900-NEXT: s_mov_b64 s[10:11], -1
190190
; GFX900-NEXT: s_xor_b64 s[4:5], s[6:7], -1
191191
; GFX900-NEXT: s_mov_b64 s[12:13], s[6:7]
192-
; GFX900-NEXT: ; implicit-def: $vgpr3
192+
; GFX900-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
193+
; GFX900-NEXT: v_mov_b32_e32 v3, v4
193194
; GFX900-NEXT: s_and_saveexec_b64 s[8:9], s[4:5]
194195
; GFX900-NEXT: s_cbranch_execz .LBB3_4
195196
; GFX900-NEXT: ; %bb.1: ; %if
196-
; GFX900-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
197-
; GFX900-NEXT: v_mov_b32_e32 v3, v4
198197
; GFX900-NEXT: s_and_saveexec_b64 s[12:13], s[4:5]
199198
; GFX900-NEXT: s_cbranch_execz .LBB3_3
200199
; GFX900-NEXT: ; %bb.2: ; %if_2
@@ -230,7 +229,6 @@ define void @test_nested_if(ptr %ptr, i32 %val, i1 %cond) {
230229
; GFX900-NEXT: s_or_b64 exec, exec, s[8:9]
231230
; GFX900-NEXT: s_and_saveexec_b64 s[6:7], s[4:5]
232231
; GFX900-NEXT: s_or_b64 exec, exec, s[6:7]
233-
; GFX900-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
234232
; GFX900-NEXT: flat_store_dword v[0:1], v4
235233
; GFX900-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
236234
; GFX900-NEXT: s_setpc_b64 s[30:31]

llvm/test/Transforms/StructurizeCFG/hoist-zerocost.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ define void @test_nested_if(ptr %ptr, i32 %val, i1 %cond) {
172172
; CHECK-NEXT: [[A16:%.*]] = icmp slt i32 [[VAL]], 255
173173
; CHECK-NEXT: br i1 [[COND_INV]], label %[[THEN_2:.*]], label %[[FLOW1:.*]]
174174
; CHECK: [[FLOW]]:
175-
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[TMP2:%.*]], %[[FLOW1]] ], [ poison, %[[ENTRY]] ]
175+
; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[TMP2:%.*]], %[[FLOW1]] ], [ [[A_ELSE]], %[[ENTRY]] ]
176176
; CHECK-NEXT: [[TMP1:%.*]] = phi i1 [ [[TMP3:%.*]], %[[FLOW1]] ], [ [[COND]], %[[ENTRY]] ]
177177
; CHECK-NEXT: br i1 [[TMP1]], label %[[ELSE:.*]], label %[[MERGE:.*]]
178178
; CHECK: [[THEN_2]]:

0 commit comments

Comments
 (0)