1
- ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2
2
; RUN: opt -mtriple=amdgcn-- -S -structurizecfg -si-annotate-control-flow %s | FileCheck -check-prefix=IR %s
3
3
; RUN: llc -mtriple=amdgcn -mcpu=hawaii -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
4
4
@@ -46,51 +46,52 @@ define amdgpu_kernel void @reduced_nested_loop_conditions(ptr addrspace(3) nocap
46
46
; GCN-NEXT: s_cbranch_vccz .LBB0_6
47
47
; GCN-NEXT: .LBB0_7: ; %DummyReturnBlock
48
48
; GCN-NEXT: s_endpgm
49
- ; IR-LABEL: @reduced_nested_loop_conditions(
50
- ; IR-NEXT: bb:
49
+ ; IR-LABEL: define amdgpu_kernel void @reduced_nested_loop_conditions(
50
+ ; IR-SAME: ptr addrspace(3) nocapture [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
51
+ ; IR-NEXT: [[BB:.*]]:
51
52
; IR-NEXT: [[MY_TMP:%.*]] = tail call i32 @llvm.amdgcn.workitem.id.x() #[[ATTR4:[0-9]+]]
52
- ; IR-NEXT: [[MY_TMP1:%.*]] = getelementptr inbounds i64, ptr addrspace(3) [[ARG:%.* ]], i32 [[MY_TMP]]
53
+ ; IR-NEXT: [[MY_TMP1:%.*]] = getelementptr inbounds i64, ptr addrspace(3) [[ARG]], i32 [[MY_TMP]]
53
54
; IR-NEXT: [[MY_TMP2:%.*]] = load volatile i64, ptr addrspace(3) [[MY_TMP1]], align 8
54
- ; IR-NEXT: br label [[BB5:% .*]]
55
- ; IR: bb3 :
56
- ; IR-NEXT: br i1 true, label [[BB4:% .*]], label [[BB13:% .*]]
57
- ; IR: bb4 :
58
- ; IR-NEXT: br label [[FLOW:% .*]]
59
- ; IR: bb5 :
60
- ; IR-NEXT: [[PHI_BROKEN:%.*]] = phi i64 [ [[TMP6:%.*]], [[BB10:% .*]] ], [ 0, [[BB:%.* ]] ]
61
- ; IR-NEXT: [[MY_TMP6:%.*]] = phi i32 [ 0, [[BB]] ], [ [[TMP5:%.*]], [[BB10]] ]
55
+ ; IR-NEXT: br label % [[BB5:.*]]
56
+ ; IR: [[BB3:.*]] :
57
+ ; IR-NEXT: br i1 true, label % [[BB4:.*]], label % [[BB13:.*]]
58
+ ; IR: [[BB4]] :
59
+ ; IR-NEXT: br label % [[FLOW:.*]]
60
+ ; IR: [[BB5]] :
61
+ ; IR-NEXT: [[PHI_BROKEN:%.*]] = phi i64 [ [[TMP6:%.*]], % [[BB10:.*]] ], [ 0, % [[BB]] ]
62
+ ; IR-NEXT: [[MY_TMP6:%.*]] = phi i32 [ 0, % [[BB]] ], [ [[TMP5:%.*]], % [[BB10]] ]
62
63
; IR-NEXT: [[MY_TMP7:%.*]] = icmp eq i32 [[MY_TMP6]], 1
63
64
; IR-NEXT: [[TMP0:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[MY_TMP7]])
64
65
; IR-NEXT: [[TMP1:%.*]] = extractvalue { i1, i64 } [[TMP0]], 0
65
66
; IR-NEXT: [[TMP2:%.*]] = extractvalue { i1, i64 } [[TMP0]], 1
66
- ; IR-NEXT: br i1 [[TMP1]], label [[BB8:% .*]], label [[FLOW]]
67
- ; IR: bb8 :
68
- ; IR-NEXT: br label [[BB13]]
69
- ; IR: bb9 :
70
- ; IR-NEXT: br i1 false, label [[BB3:%.* ]], label [[BB9:%.* ]]
71
- ; IR: bb10 :
67
+ ; IR-NEXT: br i1 [[TMP1]], label % [[BB8:.*]], label % [[FLOW]]
68
+ ; IR: [[BB8]] :
69
+ ; IR-NEXT: br label % [[BB13]]
70
+ ; IR: [[BB9:.*]] :
71
+ ; IR-NEXT: br i1 false, label % [[BB3]], label % [[BB9]]
72
+ ; IR: [[BB10]] :
72
73
; IR-NEXT: [[TMP3:%.*]] = call i1 @llvm.amdgcn.loop.i64(i64 [[TMP6]])
73
- ; IR-NEXT: br i1 [[TMP3]], label [[BB23:% .*]], label [[BB5]]
74
- ; IR: Flow :
75
- ; IR-NEXT: [[TMP4:%.*]] = phi i1 [ [[MY_TMP22:%.*]], [[BB4]] ], [ true, [[BB5]] ]
76
- ; IR-NEXT: [[TMP5]] = phi i32 [ [[MY_TMP21:%.*]], [[BB4]] ], [ undef, [[BB5]] ]
74
+ ; IR-NEXT: br i1 [[TMP3]], label % [[BB23:.*]], label % [[BB5]]
75
+ ; IR: [[FLOW]] :
76
+ ; IR-NEXT: [[TMP4:%.*]] = phi i1 [ [[MY_TMP22:%.*]], % [[BB4]] ], [ true, % [[BB5]] ]
77
+ ; IR-NEXT: [[TMP5]] = phi i32 [ [[MY_TMP21:%.*]], % [[BB4]] ], [ undef, % [[BB5]] ]
77
78
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP2]])
78
79
; IR-NEXT: [[TMP6]] = call i64 @llvm.amdgcn.if.break.i64(i1 [[TMP4]], i64 [[PHI_BROKEN]])
79
- ; IR-NEXT: br label [[BB10]]
80
- ; IR: bb13 :
81
- ; IR-NEXT: [[MY_TMP14:%.*]] = phi i1 [ [[MY_TMP22]], [[BB3]] ], [ true, [[BB8]] ]
80
+ ; IR-NEXT: br label % [[BB10]]
81
+ ; IR: [[BB13]] :
82
+ ; IR-NEXT: [[MY_TMP14:%.*]] = phi i1 [ [[MY_TMP22]], % [[BB3]] ], [ true, % [[BB8]] ]
82
83
; IR-NEXT: [[MY_TMP15:%.*]] = bitcast i64 [[MY_TMP2]] to <2 x i32>
83
- ; IR-NEXT: br i1 [[MY_TMP14]], label [[BB16:% .*]], label [[BB20:% .*]]
84
- ; IR: bb16 :
84
+ ; IR-NEXT: br i1 [[MY_TMP14]], label % [[BB16:.*]], label % [[BB20:.*]]
85
+ ; IR: [[BB16]] :
85
86
; IR-NEXT: [[MY_TMP17:%.*]] = extractelement <2 x i32> [[MY_TMP15]], i64 1
86
87
; IR-NEXT: [[MY_TMP18:%.*]] = getelementptr inbounds i32, ptr addrspace(3) undef, i32 [[MY_TMP17]]
87
88
; IR-NEXT: [[MY_TMP19:%.*]] = load volatile i32, ptr addrspace(3) [[MY_TMP18]], align 4
88
- ; IR-NEXT: br label [[BB20]]
89
- ; IR: bb20 :
90
- ; IR-NEXT: [[MY_TMP21]] = phi i32 [ [[MY_TMP19]], [[BB16]] ], [ 0, [[BB13]] ]
91
- ; IR-NEXT: [[MY_TMP22]] = phi i1 [ false, [[BB16]] ], [ [[MY_TMP14]], [[BB13]] ]
92
- ; IR-NEXT: br label [[BB9]]
93
- ; IR: bb23 :
89
+ ; IR-NEXT: br label % [[BB20]]
90
+ ; IR: [[BB20]] :
91
+ ; IR-NEXT: [[MY_TMP21]] = phi i32 [ [[MY_TMP19]], % [[BB16]] ], [ 0, % [[BB13]] ]
92
+ ; IR-NEXT: [[MY_TMP22]] = phi i1 [ false, % [[BB16]] ], [ [[MY_TMP14]], % [[BB13]] ]
93
+ ; IR-NEXT: br label % [[BB9]]
94
+ ; IR: [[BB23]] :
94
95
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP6]])
95
96
; IR-NEXT: ret void
96
97
bb:
@@ -188,66 +189,67 @@ define amdgpu_kernel void @nested_loop_conditions(ptr addrspace(1) nocapture %ar
188
189
; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0
189
190
; GCN-NEXT: s_waitcnt vmcnt(0)
190
191
; GCN-NEXT: s_endpgm
191
- ; IR-LABEL: @nested_loop_conditions(
192
- ; IR-NEXT: bb:
192
+ ; IR-LABEL: define amdgpu_kernel void @nested_loop_conditions(
193
+ ; IR-SAME: ptr addrspace(1) nocapture [[ARG:%.*]]) #[[ATTR0]] {
194
+ ; IR-NEXT: [[BB:.*]]:
193
195
; IR-NEXT: [[MY_TMP1134:%.*]] = load volatile i32, ptr addrspace(1) undef, align 4
194
196
; IR-NEXT: [[MY_TMP1235:%.*]] = icmp slt i32 [[MY_TMP1134]], 9
195
- ; IR-NEXT: br i1 [[MY_TMP1235]], label [[BB14_LR_PH:% .*]], label [[FLOW:% .*]]
196
- ; IR: bb14.lr.ph :
197
+ ; IR-NEXT: br i1 [[MY_TMP1235]], label % [[BB14_LR_PH:.*]], label % [[FLOW:.*]]
198
+ ; IR: [[BB14_LR_PH]] :
197
199
; IR-NEXT: [[MY_TMP:%.*]] = tail call i32 @llvm.amdgcn.workitem.id.x() #[[ATTR4]]
198
200
; IR-NEXT: [[MY_TMP1:%.*]] = zext i32 [[MY_TMP]] to i64
199
- ; IR-NEXT: [[MY_TMP2:%.*]] = getelementptr inbounds i64, ptr addrspace(1) [[ARG:%.* ]], i64 [[MY_TMP1]]
201
+ ; IR-NEXT: [[MY_TMP2:%.*]] = getelementptr inbounds i64, ptr addrspace(1) [[ARG]], i64 [[MY_TMP1]]
200
202
; IR-NEXT: [[MY_TMP3:%.*]] = load i64, ptr addrspace(1) [[MY_TMP2]], align 16
201
203
; IR-NEXT: [[MY_TMP932:%.*]] = load <4 x i32>, ptr addrspace(1) undef, align 16
202
204
; IR-NEXT: [[MY_TMP1033:%.*]] = extractelement <4 x i32> [[MY_TMP932]], i64 0
203
- ; IR-NEXT: br label [[BB14:% .*]]
204
- ; IR: Flow3 :
205
+ ; IR-NEXT: br label % [[BB14:.*]]
206
+ ; IR: [[FLOW3:.*]] :
205
207
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP20:%.*]])
206
208
; IR-NEXT: [[TMP0:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP14:%.*]])
207
209
; IR-NEXT: [[TMP1:%.*]] = extractvalue { i1, i64 } [[TMP0]], 0
208
210
; IR-NEXT: [[TMP2:%.*]] = extractvalue { i1, i64 } [[TMP0]], 1
209
- ; IR-NEXT: br i1 [[TMP1]], label [[BB4_BB13_CRIT_EDGE:% .*]], label [[FLOW4:% .*]]
210
- ; IR: bb4.bb13_crit_edge :
211
- ; IR-NEXT: br label [[FLOW4]]
212
- ; IR: Flow4 :
213
- ; IR-NEXT: [[TMP3:%.*]] = phi i1 [ true, [[BB4_BB13_CRIT_EDGE]] ], [ false, [[FLOW3:%.* ]] ]
211
+ ; IR-NEXT: br i1 [[TMP1]], label % [[BB4_BB13_CRIT_EDGE:.*]], label % [[FLOW4:.*]]
212
+ ; IR: [[BB4_BB13_CRIT_EDGE]] :
213
+ ; IR-NEXT: br label % [[FLOW4]]
214
+ ; IR: [[FLOW4]] :
215
+ ; IR-NEXT: [[TMP3:%.*]] = phi i1 [ true, % [[BB4_BB13_CRIT_EDGE]] ], [ false, % [[FLOW3]] ]
214
216
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP2]])
215
- ; IR-NEXT: br label [[FLOW]]
216
- ; IR: bb13 :
217
- ; IR-NEXT: br label [[BB31:% .*]]
218
- ; IR: Flow :
219
- ; IR-NEXT: [[TMP4:%.*]] = phi i1 [ [[TMP3]], [[FLOW4]] ], [ true, [[BB:%.* ]] ]
217
+ ; IR-NEXT: br label % [[FLOW]]
218
+ ; IR: [[BB13:.*]] :
219
+ ; IR-NEXT: br label % [[BB31:.*]]
220
+ ; IR: [[FLOW]] :
221
+ ; IR-NEXT: [[TMP4:%.*]] = phi i1 [ [[TMP3]], % [[FLOW4]] ], [ true, % [[BB]] ]
220
222
; IR-NEXT: [[TMP5:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP4]])
221
223
; IR-NEXT: [[TMP6:%.*]] = extractvalue { i1, i64 } [[TMP5]], 0
222
224
; IR-NEXT: [[TMP7:%.*]] = extractvalue { i1, i64 } [[TMP5]], 1
223
- ; IR-NEXT: br i1 [[TMP6]], label [[BB13:%.* ]], label [[BB31]]
224
- ; IR: bb14 :
225
- ; IR-NEXT: [[PHI_BROKEN:%.*]] = phi i64 [ [[TMP16:%.*]], [[FLOW1:% .*]] ], [ 0, [[BB14_LR_PH]] ]
226
- ; IR-NEXT: [[MY_TMP1037:%.*]] = phi i32 [ [[MY_TMP1033]], [[BB14_LR_PH]] ], [ [[TMP12:%.*]], [[FLOW1]] ]
227
- ; IR-NEXT: [[MY_TMP936:%.*]] = phi <4 x i32> [ [[MY_TMP932]], [[BB14_LR_PH]] ], [ [[TMP11:%.*]], [[FLOW1]] ]
225
+ ; IR-NEXT: br i1 [[TMP6]], label % [[BB13]], label % [[BB31]]
226
+ ; IR: [[BB14]] :
227
+ ; IR-NEXT: [[PHI_BROKEN:%.*]] = phi i64 [ [[TMP16:%.*]], % [[FLOW1:.*]] ], [ 0, % [[BB14_LR_PH]] ]
228
+ ; IR-NEXT: [[MY_TMP1037:%.*]] = phi i32 [ [[MY_TMP1033]], % [[BB14_LR_PH]] ], [ [[TMP12:%.*]], % [[FLOW1]] ]
229
+ ; IR-NEXT: [[MY_TMP936:%.*]] = phi <4 x i32> [ [[MY_TMP932]], % [[BB14_LR_PH]] ], [ [[TMP11:%.*]], % [[FLOW1]] ]
228
230
; IR-NEXT: [[MY_TMP15:%.*]] = icmp eq i32 [[MY_TMP1037]], 1
229
231
; IR-NEXT: [[TMP8:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[MY_TMP15]])
230
232
; IR-NEXT: [[TMP9:%.*]] = extractvalue { i1, i64 } [[TMP8]], 0
231
233
; IR-NEXT: [[TMP10:%.*]] = extractvalue { i1, i64 } [[TMP8]], 1
232
- ; IR-NEXT: br i1 [[TMP9]], label [[BB16:% .*]], label [[FLOW1]]
233
- ; IR: bb16 :
234
+ ; IR-NEXT: br i1 [[TMP9]], label % [[BB16:.*]], label % [[FLOW1]]
235
+ ; IR: [[BB16]] :
234
236
; IR-NEXT: [[MY_TMP17:%.*]] = bitcast i64 [[MY_TMP3]] to <2 x i32>
235
- ; IR-NEXT: br label [[BB18:% .*]]
236
- ; IR: Flow1 :
237
- ; IR-NEXT: [[TMP11]] = phi <4 x i32> [ [[MY_TMP9:%.*]], [[BB21:% .*]] ], [ undef, [[BB14]] ]
238
- ; IR-NEXT: [[TMP12]] = phi i32 [ [[MY_TMP10:%.*]], [[BB21]] ], [ undef, [[BB14]] ]
239
- ; IR-NEXT: [[TMP13:%.*]] = phi i1 [ [[MY_TMP12:%.*]], [[BB21]] ], [ true, [[BB14]] ]
240
- ; IR-NEXT: [[TMP14]] = phi i1 [ [[MY_TMP12]], [[BB21]] ], [ false, [[BB14]] ]
241
- ; IR-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[BB21]] ], [ true, [[BB14]] ]
237
+ ; IR-NEXT: br label % [[BB18:.*]]
238
+ ; IR: [[FLOW1]] :
239
+ ; IR-NEXT: [[TMP11]] = phi <4 x i32> [ [[MY_TMP9:%.*]], % [[BB21:.*]] ], [ undef, % [[BB14]] ]
240
+ ; IR-NEXT: [[TMP12]] = phi i32 [ [[MY_TMP10:%.*]], % [[BB21]] ], [ undef, % [[BB14]] ]
241
+ ; IR-NEXT: [[TMP13:%.*]] = phi i1 [ [[MY_TMP12:%.*]], % [[BB21]] ], [ true, % [[BB14]] ]
242
+ ; IR-NEXT: [[TMP14]] = phi i1 [ [[MY_TMP12]], % [[BB21]] ], [ false, % [[BB14]] ]
243
+ ; IR-NEXT: [[TMP15:%.*]] = phi i1 [ false, % [[BB21]] ], [ true, % [[BB14]] ]
242
244
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP10]])
243
245
; IR-NEXT: [[TMP16]] = call i64 @llvm.amdgcn.if.break.i64(i1 [[TMP13]], i64 [[PHI_BROKEN]])
244
246
; IR-NEXT: [[TMP17:%.*]] = call i1 @llvm.amdgcn.loop.i64(i64 [[TMP16]])
245
- ; IR-NEXT: br i1 [[TMP17]], label [[FLOW2:% .*]], label [[BB14]]
246
- ; IR: bb18 :
247
+ ; IR-NEXT: br i1 [[TMP17]], label % [[FLOW2:.*]], label % [[BB14]]
248
+ ; IR: [[BB18]] :
247
249
; IR-NEXT: [[MY_TMP19:%.*]] = load volatile i32, ptr addrspace(1) undef, align 4
248
250
; IR-NEXT: [[MY_TMP20:%.*]] = icmp slt i32 [[MY_TMP19]], 9
249
- ; IR-NEXT: br i1 [[MY_TMP20]], label [[BB21]], label [[BB18]]
250
- ; IR: bb21 :
251
+ ; IR-NEXT: br i1 [[MY_TMP20]], label % [[BB21]], label % [[BB18]]
252
+ ; IR: [[BB21]] :
251
253
; IR-NEXT: [[MY_TMP22:%.*]] = extractelement <2 x i32> [[MY_TMP17]], i64 1
252
254
; IR-NEXT: [[MY_TMP23:%.*]] = lshr i32 [[MY_TMP22]], 16
253
255
; IR-NEXT: [[MY_TMP24:%.*]] = select i1 undef, i32 undef, i32 [[MY_TMP23]]
@@ -263,16 +265,16 @@ define amdgpu_kernel void @nested_loop_conditions(ptr addrspace(1) nocapture %ar
263
265
; IR-NEXT: [[MY_TMP10]] = extractelement <4 x i32> [[MY_TMP9]], i64 0
264
266
; IR-NEXT: [[MY_TMP11:%.*]] = load volatile i32, ptr addrspace(1) undef, align 4
265
267
; IR-NEXT: [[MY_TMP12]] = icmp sge i32 [[MY_TMP11]], 9
266
- ; IR-NEXT: br label [[FLOW1]]
267
- ; IR: Flow2 :
268
+ ; IR-NEXT: br label % [[FLOW1]]
269
+ ; IR: [[FLOW2]] :
268
270
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP16]])
269
271
; IR-NEXT: [[TMP18:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP15]])
270
272
; IR-NEXT: [[TMP19:%.*]] = extractvalue { i1, i64 } [[TMP18]], 0
271
273
; IR-NEXT: [[TMP20]] = extractvalue { i1, i64 } [[TMP18]], 1
272
- ; IR-NEXT: br i1 [[TMP19]], label [[BB31_LOOPEXIT:% .*]], label [[FLOW3]]
273
- ; IR: bb31.loopexit :
274
- ; IR-NEXT: br label [[FLOW3]]
275
- ; IR: bb31 :
274
+ ; IR-NEXT: br i1 [[TMP19]], label % [[BB31_LOOPEXIT:.*]], label % [[FLOW3]]
275
+ ; IR: [[BB31_LOOPEXIT]] :
276
+ ; IR-NEXT: br label % [[FLOW3]]
277
+ ; IR: [[BB31]] :
276
278
; IR-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP7]])
277
279
; IR-NEXT: store volatile i32 0, ptr addrspace(1) undef, align 4
278
280
; IR-NEXT: ret void
0 commit comments