1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-regbankselect %s -verify-machineinstrs -o - | FileCheck %s
9 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
11 ; CHECK-LABEL: name: uniform_in_vgpr
12 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
15 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
16 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
17 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
18 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
19 ; CHECK-NEXT: [[FPTOUI:%[0-9]+]]:sgpr(s32) = G_FPTOUI [[COPY]](s32)
20 ; CHECK-NEXT: [[ADD:%[0-9]+]]:sgpr(s32) = G_ADD [[FPTOUI]], [[COPY1]]
21 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
22 ; CHECK-NEXT: S_ENDPGM 0
23 %0:_(s32) = COPY $sgpr0
24 %1:_(s32) = COPY $sgpr1
25 %2:_(s32) = COPY $vgpr0
26 %3:_(s32) = COPY $vgpr1
27 %4:_(p1) = G_MERGE_VALUES %2(s32), %3(s32)
28 %5:_(s32) = G_FPTOUI %0(s32)
29 %6:_(s32) = G_ADD %5, %1
30 G_STORE %6(s32), %4(p1) :: (store (s32), addrspace 1)
35 name: back_to_back_uniform_in_vgpr
39 liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1
41 ; CHECK-LABEL: name: back_to_back_uniform_in_vgpr
42 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1
44 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
45 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
46 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
47 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
48 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
49 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY3]](s32), [[COPY4]](s32)
50 ; CHECK-NEXT: [[FADD:%[0-9]+]]:sgpr(s32) = G_FADD [[COPY]], [[COPY1]]
51 ; CHECK-NEXT: [[FPTOUI:%[0-9]+]]:sgpr(s32) = G_FPTOUI [[FADD]](s32)
52 ; CHECK-NEXT: [[ADD:%[0-9]+]]:sgpr(s32) = G_ADD [[FPTOUI]], [[COPY2]]
53 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
54 ; CHECK-NEXT: S_ENDPGM 0
55 %0:_(s32) = COPY $sgpr0
56 %1:_(s32) = COPY $sgpr1
57 %2:_(s32) = COPY $sgpr2
58 %3:_(s32) = COPY $vgpr0
59 %4:_(s32) = COPY $vgpr1
60 %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
61 %6:_(s32) = G_FADD %0, %1
62 %7:_(s32) = G_FPTOUI %6(s32)
63 %8:_(s32) = G_ADD %7, %2
64 G_STORE %8(s32), %5(p1) :: (store (s32), addrspace 1)
69 name: buffer_load_uniform
73 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1
75 ; CHECK-LABEL: name: buffer_load_uniform
76 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1
78 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
79 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
80 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
81 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
82 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:sgpr(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
83 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sgpr(s32) = COPY $sgpr4
84 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
85 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
86 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY5]](s32), [[COPY6]](s32)
87 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
88 ; CHECK-NEXT: [[AMDGPU_BUFFER_LOAD:%[0-9]+]]:sgpr(<4 x s32>) = G_AMDGPU_BUFFER_LOAD [[BUILD_VECTOR]](<4 x s32>), [[C]](s32), [[COPY4]], [[C]], 0, 0, 0 :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)
89 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
90 ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32), [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[AMDGPU_BUFFER_LOAD]](<4 x s32>)
91 ; CHECK-NEXT: [[ADD:%[0-9]+]]:sgpr(s32) = G_ADD [[UV1]], [[C1]]
92 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
93 ; CHECK-NEXT: S_ENDPGM 0
94 %0:_(s32) = COPY $sgpr0
95 %1:_(s32) = COPY $sgpr1
96 %2:_(s32) = COPY $sgpr2
97 %3:_(s32) = COPY $sgpr3
98 %4:_(<4 x s32>) = G_BUILD_VECTOR %0(s32), %1(s32), %2(s32), %3(s32)
99 %5:_(s32) = COPY $sgpr4
100 %6:_(s32) = COPY $vgpr0
101 %7:_(s32) = COPY $vgpr1
102 %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
103 %9:_(s32) = G_CONSTANT i32 0
104 %10:_(<4 x s32>) = G_AMDGPU_BUFFER_LOAD %4(<4 x s32>), %9(s32), %5, %9, 0, 0, 0 :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)
105 %11:_(s32) = G_CONSTANT i32 1
106 %12:_(s32), %13:_(s32), %14:_(s32), %15:_(s32) = G_UNMERGE_VALUES %10(<4 x s32>)
107 %16:_(s32) = G_ADD %13, %11
108 G_STORE %16(s32), %8(p1) :: (store (s32), addrspace 1)
113 name: buffer_load_divergent
117 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2
119 ; CHECK-LABEL: name: buffer_load_divergent
120 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2
122 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
123 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
124 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
125 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
126 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:sgpr(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
127 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
128 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
129 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
130 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY5]](s32), [[COPY6]](s32)
131 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
132 ; CHECK-NEXT: [[AMDGPU_BUFFER_LOAD:%[0-9]+]]:vgpr(<4 x s32>) = G_AMDGPU_BUFFER_LOAD [[BUILD_VECTOR]](<4 x s32>), [[C]](s32), [[COPY4]], [[C]], 0, 0, 0 :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)
133 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
134 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32), [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[AMDGPU_BUFFER_LOAD]](<4 x s32>)
135 ; CHECK-NEXT: [[ADD:%[0-9]+]]:vgpr(s32) = G_ADD [[UV1]], [[C1]]
136 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
137 ; CHECK-NEXT: S_ENDPGM 0
138 %0:_(s32) = COPY $sgpr0
139 %1:_(s32) = COPY $sgpr1
140 %2:_(s32) = COPY $sgpr2
141 %3:_(s32) = COPY $sgpr3
142 %4:_(<4 x s32>) = G_BUILD_VECTOR %0(s32), %1(s32), %2(s32), %3(s32)
143 %5:_(s32) = COPY $vgpr0
144 %6:_(s32) = COPY $vgpr1
145 %7:_(s32) = COPY $vgpr2
146 %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
147 %9:_(s32) = G_CONSTANT i32 0
148 %10:_(<4 x s32>) = G_AMDGPU_BUFFER_LOAD %4(<4 x s32>), %9(s32), %5, %9, 0, 0, 0 :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)
149 %11:_(s32) = G_CONSTANT i32 1
150 %12:_(s32), %13:_(s32), %14:_(s32), %15:_(s32) = G_UNMERGE_VALUES %10(<4 x s32>)
151 %16:_(s32) = G_ADD %13, %11
152 G_STORE %16(s32), %8(p1) :: (store (s32), addrspace 1)
161 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
163 ; CHECK-LABEL: name: vgpr_and_i64
164 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
166 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
167 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
168 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
169 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
170 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
171 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
172 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr4
173 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY $vgpr5
174 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
175 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s64) = G_AND [[MV]], [[MV1]]
176 ; CHECK-NEXT: G_STORE [[AND]](s64), [[MV2]](p1) :: (store (s64), addrspace 1)
177 ; CHECK-NEXT: S_ENDPGM 0
178 %0:_(s32) = COPY $vgpr0
179 %1:_(s32) = COPY $vgpr1
180 %2:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
181 %3:_(s32) = COPY $vgpr2
182 %4:_(s32) = COPY $vgpr3
183 %5:_(s64) = G_MERGE_VALUES %3(s32), %4(s32)
184 %6:_(s32) = COPY $vgpr4
185 %7:_(s32) = COPY $vgpr5
186 %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
187 %9:_(s64) = G_AND %2, %5
188 G_STORE %9(s64), %8(p1) :: (store (s64), addrspace 1)
197 liveins: $sgpr0, $vgpr0, $vgpr1
199 ; CHECK-LABEL: name: abs_sgpr_i16
200 ; CHECK: liveins: $sgpr0, $vgpr0, $vgpr1
202 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
203 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
204 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
205 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
206 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
207 ; CHECK-NEXT: [[ABS:%[0-9]+]]:sgpr(s16) = G_ABS [[TRUNC]]
208 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[ABS]](s16)
209 ; CHECK-NEXT: G_STORE [[ANYEXT]](s32), [[MV]](p1) :: (store (s16), addrspace 1)
210 ; CHECK-NEXT: S_ENDPGM 0
211 %0:_(s32) = COPY $sgpr0
212 %1:_(s16) = G_TRUNC %0(s32)
213 %2:_(s32) = COPY $vgpr0
214 %3:_(s32) = COPY $vgpr1
215 %4:_(p1) = G_MERGE_VALUES %2(s32), %3(s32)
217 %6:_(s32) = G_ANYEXT %5(s16)
218 G_STORE %6(s32), %4(p1) :: (store (s16), addrspace 1)
225 tracksRegLiveness: true
227 ; CHECK-LABEL: name: uniform_i1_phi
229 ; CHECK-NEXT: successors: %bb.1(0x30000000), %bb.2(0x50000000)
230 ; CHECK-NEXT: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
232 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
233 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
234 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
235 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
236 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
237 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 6
238 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(uge), [[COPY2]](s32), [[C]]
239 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
240 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(ne), [[COPY3]](s32), [[C1]]
241 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.2
242 ; CHECK-NEXT: G_BR %bb.1
245 ; CHECK-NEXT: successors: %bb.2(0x80000000)
247 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
248 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(ult), [[COPY2]](s32), [[C2]]
251 ; CHECK-NEXT: [[PHI:%[0-9]+]]:sgpr(s1) = G_PHI [[ICMP]](s1), %bb.0, [[ICMP2]](s1), %bb.1
252 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[PHI]](s1)
253 ; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 2
254 ; CHECK-NEXT: [[ADD:%[0-9]+]]:sgpr(s32) = G_ADD [[SEXT]], [[C3]]
255 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
256 ; CHECK-NEXT: S_ENDPGM 0
258 successors: %bb.1(0x30000000), %bb.2(0x50000000)
259 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
261 %0:_(s32) = COPY $vgpr0
262 %1:_(s32) = COPY $vgpr1
263 %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
264 %3:_(s32) = COPY $sgpr0
265 %4:_(s32) = COPY $sgpr1
266 %5:_(s32) = G_CONSTANT i32 6
267 %6:_(s1) = G_ICMP intpred(uge), %3(s32), %5
268 %7:_(s32) = G_CONSTANT i32 0
269 %8:_(s1) = G_ICMP intpred(ne), %4(s32), %7
270 G_BRCOND %8(s1), %bb.2
274 successors: %bb.2(0x80000000)
276 %9:_(s32) = G_CONSTANT i32 1
277 %10:_(s1) = G_ICMP intpred(ult), %3(s32), %9
280 %11:_(s1) = G_PHI %6(s1), %bb.0, %10(s1), %bb.1
281 %12:_(s32) = G_SEXT %11(s1)
282 %13:_(s32) = G_CONSTANT i32 2
283 %14:_(s32) = G_ADD %12, %13
284 G_STORE %14(s32), %2(p1) :: (store (s32), addrspace 1)
293 liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1
295 ; CHECK-LABEL: name: vcc_to_scc
296 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0, $vgpr1
298 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
299 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
300 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
301 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
302 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
303 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY3]](s32), [[COPY4]](s32)
304 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_FCONSTANT float 0.000000e+00
305 ; CHECK-NEXT: [[FCMP:%[0-9]+]]:sgpr(s1) = G_FCMP floatpred(oeq), [[COPY]](s32), [[C]]
306 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[FCMP]](s1), [[COPY1]], [[COPY2]]
307 ; CHECK-NEXT: G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
308 ; CHECK-NEXT: S_ENDPGM 0
309 %0:_(s32) = COPY $sgpr0
310 %1:_(s32) = COPY $sgpr1
311 %2:_(s32) = COPY $sgpr2
312 %3:_(s32) = COPY $vgpr0
313 %4:_(s32) = COPY $vgpr1
314 %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
315 %6:_(s32) = G_FCONSTANT float 0.000000e+00
316 %7:_(s1) = G_FCMP floatpred(oeq), %0(s32), %6
317 %8:_(s32) = G_SELECT %7(s1), %1, %2
318 G_STORE %8(s32), %5(p1) :: (store (s32), addrspace 1)
327 liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2, $vgpr3
329 ; CHECK-LABEL: name: scc_to_vcc
330 ; CHECK: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2, $vgpr3
332 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
333 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
334 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
335 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
336 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
337 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY3]](s32), [[COPY4]](s32)
338 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
339 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
340 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY1]], [[COPY2]]
341 ; CHECK-NEXT: G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
342 ; CHECK-NEXT: S_ENDPGM 0
343 %0:_(s32) = COPY $sgpr0
344 %1:_(s32) = COPY $vgpr0
345 %2:_(s32) = COPY $vgpr1
346 %3:_(s32) = COPY $vgpr2
347 %4:_(s32) = COPY $vgpr3
348 %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
349 %6:_(s32) = G_CONSTANT i32 0
350 %7:_(s1) = G_ICMP intpred(eq), %0(s32), %6
351 %8:_(s32) = G_SELECT %7(s1), %1, %2
352 G_STORE %8(s32), %5(p1) :: (store (s32), addrspace 1)
357 name: vgpr_to_vcc_trunc
361 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
363 ; CHECK-LABEL: name: vgpr_to_vcc_trunc
364 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
366 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
367 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
368 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
369 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
370 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr4
371 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY3]](s32), [[COPY4]](s32)
372 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:vcc(s1) = G_TRUNC [[COPY]](s32)
373 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[TRUNC]](s1), [[COPY1]], [[COPY2]]
374 ; CHECK-NEXT: G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
375 ; CHECK-NEXT: S_ENDPGM 0
376 %0:_(s32) = COPY $vgpr0
377 %1:_(s32) = COPY $vgpr1
378 %2:_(s32) = COPY $vgpr2
379 %3:_(s32) = COPY $vgpr3
380 %4:_(s32) = COPY $vgpr4
381 %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
382 %6:_(s1) = G_TRUNC %0(s32)
383 %7:_(s32) = G_SELECT %6(s1), %1, %2
384 G_STORE %7(s32), %5(p1) :: (store (s32), addrspace 1)
393 liveins: $sgpr0, $vgpr0, $vgpr1
395 ; CHECK-LABEL: name: zext
396 ; CHECK: liveins: $sgpr0, $vgpr0, $vgpr1
398 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
399 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
400 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
401 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
402 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 10
403 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
404 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[ICMP]](s1)
405 ; CHECK-NEXT: G_STORE [[ZEXT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
406 ; CHECK-NEXT: S_ENDPGM 0
407 %0:_(s32) = COPY $sgpr0
408 %1:_(s32) = COPY $vgpr0
409 %2:_(s32) = COPY $vgpr1
410 %3:_(p1) = G_MERGE_VALUES %1(s32), %2(s32)
411 %4:_(s32) = G_CONSTANT i32 10
412 %5:_(s1) = G_ICMP intpred(eq), %0(s32), %4
413 %6:_(s32) = G_ZEXT %5(s1)
414 G_STORE %6(s32), %3(p1) :: (store (s32), addrspace 1)
423 liveins: $sgpr0, $vgpr0, $vgpr1
425 ; CHECK-LABEL: name: sext
426 ; CHECK: liveins: $sgpr0, $vgpr0, $vgpr1
428 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
429 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
430 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
431 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
432 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 10
433 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
434 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[ICMP]](s1)
435 ; CHECK-NEXT: G_STORE [[SEXT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
436 ; CHECK-NEXT: S_ENDPGM 0
437 %0:_(s32) = COPY $sgpr0
438 %1:_(s32) = COPY $vgpr0
439 %2:_(s32) = COPY $vgpr1
440 %3:_(p1) = G_MERGE_VALUES %1(s32), %2(s32)
441 %4:_(s32) = G_CONSTANT i32 10
442 %5:_(s1) = G_ICMP intpred(eq), %0(s32), %4
443 %6:_(s32) = G_SEXT %5(s1)
444 G_STORE %6(s32), %3(p1) :: (store (s32), addrspace 1)
453 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
455 ; CHECK-LABEL: name: and_i1_vcc
456 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
458 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
459 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
460 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
461 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
462 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
463 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 10
464 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(uge), [[COPY]](s32), [[C]]
465 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 20
466 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(uge), [[COPY1]](s32), [[C1]]
467 ; CHECK-NEXT: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
468 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[AND]](s1), [[COPY]], [[COPY1]]
469 ; CHECK-NEXT: G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
470 ; CHECK-NEXT: S_ENDPGM 0
471 %0:_(s32) = COPY $vgpr0
472 %1:_(s32) = COPY $vgpr1
473 %2:_(s32) = COPY $vgpr2
474 %3:_(s32) = COPY $vgpr3
475 %4:_(p1) = G_MERGE_VALUES %2(s32), %3(s32)
476 %5:_(s32) = G_CONSTANT i32 10
477 %6:_(s1) = G_ICMP intpred(uge), %0(s32), %5
478 %7:_(s32) = G_CONSTANT i32 20
479 %8:_(s1) = G_ICMP intpred(uge), %1(s32), %7
480 %9:_(s1) = G_AND %6, %8
481 %10:_(s32) = G_SELECT %9(s1), %0, %1
482 G_STORE %10(s32), %4(p1) :: (store (s32), addrspace 1)
491 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
493 ; CHECK-LABEL: name: and_i1_scc
494 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
496 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
497 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
498 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
499 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
500 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
501 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 10
502 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(uge), [[COPY]](s32), [[C]]
503 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 20
504 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(uge), [[COPY1]](s32), [[C1]]
505 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s1) = G_AND [[ICMP]], [[ICMP1]]
506 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s1), [[COPY]], [[COPY1]]
507 ; CHECK-NEXT: G_STORE [[SELECT]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
508 ; CHECK-NEXT: S_ENDPGM 0
509 %0:_(s32) = COPY $sgpr0
510 %1:_(s32) = COPY $sgpr1
511 %2:_(s32) = COPY $vgpr0
512 %3:_(s32) = COPY $vgpr1
513 %4:_(p1) = G_MERGE_VALUES %2(s32), %3(s32)
514 %5:_(s32) = G_CONSTANT i32 10
515 %6:_(s1) = G_ICMP intpred(uge), %0(s32), %5
516 %7:_(s32) = G_CONSTANT i32 20
517 %8:_(s1) = G_ICMP intpred(uge), %1(s32), %7
518 %9:_(s1) = G_AND %6, %8
519 %10:_(s32) = G_SELECT %9(s1), %0, %1
520 G_STORE %10(s32), %4(p1) :: (store (s32), addrspace 1)
525 name: divergent_phi_with_uniform_inputs
527 tracksRegLiveness: true
529 ; CHECK-LABEL: name: divergent_phi_with_uniform_inputs
531 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
532 ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2
534 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
535 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
536 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
537 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
538 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
539 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
540 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[ICMP]](s1)
541 ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[COPY3]](s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
542 ; CHECK-NEXT: G_BR %bb.1
545 ; CHECK-NEXT: successors: %bb.2(0x80000000)
547 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
550 ; CHECK-NEXT: [[PHI:%[0-9]+]]:vgpr(s32) = G_PHI [[C]](s32), %bb.0, [[C1]](s32), %bb.1
551 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sgpr(s32) = COPY [[SI_IF]](s32)
552 ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[COPY4]](s32)
553 ; CHECK-NEXT: G_STORE [[PHI]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
554 ; CHECK-NEXT: S_ENDPGM 0
556 successors: %bb.1(0x40000000), %bb.2(0x40000000)
557 liveins: $vgpr0, $vgpr1, $vgpr2
559 %0:_(s32) = COPY $vgpr0
560 %1:_(s32) = COPY $vgpr1
561 %2:_(s32) = COPY $vgpr2
562 %3:_(p1) = G_MERGE_VALUES %1(s32), %2(s32)
563 %4:_(s32) = G_CONSTANT i32 0
564 %5:sreg_32_xm0_xexec(s1) = G_ICMP intpred(eq), %0(s32), %4
565 %6:sreg_32_xm0_xexec(s32) = SI_IF %5(s1), %bb.2, implicit-def $exec, implicit-def $scc, implicit $exec
569 successors: %bb.2(0x80000000)
571 %7:_(s32) = G_CONSTANT i32 1
574 %8:_(s32) = G_PHI %4(s32), %bb.0, %7(s32), %bb.1
575 G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %6(s32)
576 G_STORE %8(s32), %3(p1) :: (store (s32), addrspace 1)
581 name: divergent_because_of_temporal_divergent_use
583 tracksRegLiveness: true
585 ; CHECK-LABEL: name: divergent_because_of_temporal_divergent_use
587 ; CHECK-NEXT: successors: %bb.1(0x80000000)
588 ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2
590 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
591 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
592 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
593 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
594 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1
595 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
598 ; CHECK-NEXT: successors: %bb.2(0x04000000), %bb.1(0x7c000000)
600 ; CHECK-NEXT: [[PHI:%[0-9]+]]:sgpr(s32) = G_PHI %17(s32), %bb.1, [[C1]](s32), %bb.0
601 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:sgpr(s32) = G_PHI [[C]](s32), %bb.0, %9(s32), %bb.1
602 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
603 ; CHECK-NEXT: [[ADD:%[0-9]+]]:sgpr(s32) = G_ADD [[PHI1]], [[C2]]
604 ; CHECK-NEXT: [[UITOFP:%[0-9]+]]:sgpr(s32) = G_UITOFP [[ADD]](s32)
605 ; CHECK-NEXT: [[FCMP:%[0-9]+]]:vcc(s1) = G_FCMP floatpred(ogt), [[UITOFP]](s32), [[COPY]]
606 ; CHECK-NEXT: [[INT:%[0-9]+]]:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[FCMP]](s1), [[PHI]](s32)
607 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32_xm0_xexec(s32) = COPY [[INT]](s32)
608 ; CHECK-NEXT: SI_LOOP [[COPY3]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
609 ; CHECK-NEXT: G_BR %bb.2
612 ; CHECK-NEXT: [[PHI2:%[0-9]+]]:vgpr(s32) = G_PHI [[ADD]](s32), %bb.1
613 ; CHECK-NEXT: [[PHI3:%[0-9]+]]:sgpr(s32) = G_PHI [[INT]](s32), %bb.1
614 ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI3]](s32)
615 ; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 10
616 ; CHECK-NEXT: [[MUL:%[0-9]+]]:vgpr(s32) = G_MUL [[PHI2]], [[C3]]
617 ; CHECK-NEXT: G_STORE [[MUL]](s32), [[MV]](p1) :: (store (s32), addrspace 1)
618 ; CHECK-NEXT: S_ENDPGM 0
620 successors: %bb.1(0x80000000)
621 liveins: $vgpr0, $vgpr1, $vgpr2
623 %0:_(s32) = COPY $vgpr0
624 %1:_(s32) = COPY $vgpr1
625 %2:_(s32) = COPY $vgpr2
626 %3:_(p1) = G_MERGE_VALUES %1(s32), %2(s32)
627 %4:_(s32) = G_CONSTANT i32 -1
628 %5:_(s32) = G_CONSTANT i32 0
631 successors: %bb.2(0x04000000), %bb.1(0x7c000000)
633 %6:_(s32) = G_PHI %7(s32), %bb.1, %5(s32), %bb.0
634 %8:_(s32) = G_PHI %4(s32), %bb.0, %9(s32), %bb.1
635 %10:_(s32) = G_CONSTANT i32 1
636 %9:_(s32) = G_ADD %8, %10
637 %11:_(s32) = G_UITOFP %9(s32)
638 %12:_(s1) = G_FCMP floatpred(ogt), %11(s32), %0
639 %7:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %12(s1), %6(s32)
640 SI_LOOP %7(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
644 %13:_(s32) = G_PHI %9(s32), %bb.1
645 %14:_(s32) = G_PHI %7(s32), %bb.1
646 G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %14(s32)
647 %15:_(s32) = G_CONSTANT i32 10
648 %16:_(s32) = G_MUL %13, %15
649 G_STORE %16(s32), %3(p1) :: (store (s32), addrspace 1)
654 name: loop_with_2breaks
656 tracksRegLiveness: true
658 ; CHECK-LABEL: name: loop_with_2breaks
660 ; CHECK-NEXT: successors: %bb.1(0x80000000)
661 ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
663 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
664 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
665 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
666 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
667 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
668 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
669 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY $vgpr4
670 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY $vgpr5
671 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
672 ; CHECK-NEXT: [[DEF:%[0-9]+]]:sgpr(s32) = G_IMPLICIT_DEF
673 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
674 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32(s1) = IMPLICIT_DEF
677 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000)
679 ; CHECK-NEXT: [[PHI:%[0-9]+]]:sreg_32(s1) = PHI [[DEF1]](s1), %bb.0, %13(s1), %bb.3
680 ; CHECK-NEXT: [[PHI1:%[0-9]+]]:sgpr(s32) = G_PHI %68(s32), %bb.3, [[C]](s32), %bb.0
681 ; CHECK-NEXT: [[PHI2:%[0-9]+]]:sgpr(s32) = G_PHI [[C]](s32), %bb.0, %17(s32), %bb.3
682 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32(s1) = COPY [[PHI]](s1)
683 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[PHI2]](s32)
684 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 2
685 ; CHECK-NEXT: [[SHL:%[0-9]+]]:sgpr(s64) = G_SHL [[SEXT]], [[C1]](s32)
686 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p1) = G_PTR_ADD [[MV1]], [[SHL]](s64)
687 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:vgpr(s32) = G_LOAD [[PTR_ADD]](p1) :: (load (s32), addrspace 1)
688 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
689 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C2]]
690 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[ICMP]](s1)
691 ; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s1) = G_CONSTANT i1 true
692 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:sreg_32(s1) = COPY [[C3]](s1)
693 ; CHECK-NEXT: [[S_ANDN2_B32_:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY6]](s1), $exec_lo, implicit-def $scc
694 ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY8]](s1), implicit-def $scc
695 ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_]](s1), [[S_AND_B32_]](s1), implicit-def $scc
696 ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_32(s1) = COPY [[S_OR_B32_]](s1)
697 ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[COPY7]](s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
698 ; CHECK-NEXT: G_BR %bb.2
701 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.5(0x40000000)
703 ; CHECK-NEXT: [[C4:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 2
704 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:sgpr(s64) = G_SHL [[SEXT]], [[C4]](s32)
705 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:vgpr(p1) = G_PTR_ADD [[MV2]], [[SHL1]](s64)
706 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:vgpr(s32) = G_LOAD [[PTR_ADD1]](p1) :: (load (s32), addrspace 1)
707 ; CHECK-NEXT: [[C5:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
708 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[LOAD1]](s32), [[C5]]
709 ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_32_xm0_xexec(s1) = COPY [[ICMP1]](s1)
710 ; CHECK-NEXT: [[C6:%[0-9]+]]:sgpr(s1) = G_CONSTANT i1 true
711 ; CHECK-NEXT: [[COPY11:%[0-9]+]]:sreg_32(s1) = COPY [[C6]](s1)
712 ; CHECK-NEXT: [[COPY12:%[0-9]+]]:sreg_32(s1) = COPY [[COPY11]](s1)
713 ; CHECK-NEXT: [[SI_IF1:%[0-9]+]]:sreg_32_xm0_xexec(s32) = SI_IF [[COPY10]](s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
714 ; CHECK-NEXT: G_BR %bb.4
717 ; CHECK-NEXT: successors: %bb.6(0x04000000), %bb.1(0x7c000000)
719 ; CHECK-NEXT: [[PHI3:%[0-9]+]]:sreg_32(s1) = PHI [[S_OR_B32_]](s1), %bb.1, %43(s1), %bb.5
720 ; CHECK-NEXT: [[PHI4:%[0-9]+]]:sgpr(s32) = G_PHI %44(s32), %bb.5, [[DEF]](s32), %bb.1
721 ; CHECK-NEXT: [[COPY13:%[0-9]+]]:sreg_32(s1) = COPY [[PHI3]](s1)
722 ; CHECK-NEXT: [[COPY14:%[0-9]+]]:sgpr(s32) = COPY [[SI_IF]](s32)
723 ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[COPY14]](s32)
724 ; CHECK-NEXT: [[COPY15:%[0-9]+]]:vcc(s1) = COPY [[COPY13]](s1)
725 ; CHECK-NEXT: [[INT:%[0-9]+]]:sgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), [[COPY15]](s1), [[PHI1]](s32)
726 ; CHECK-NEXT: [[COPY16:%[0-9]+]]:sreg_32_xm0_xexec(s32) = COPY [[INT]](s32)
727 ; CHECK-NEXT: SI_LOOP [[COPY16]](s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
728 ; CHECK-NEXT: G_BR %bb.6
731 ; CHECK-NEXT: successors: %bb.5(0x80000000)
733 ; CHECK-NEXT: [[C7:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 2
734 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:sgpr(s64) = G_SHL [[SEXT]], [[C7]](s32)
735 ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:vgpr(p1) = G_PTR_ADD [[MV]], [[SHL2]](s64)
736 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:vgpr(s32) = G_LOAD [[PTR_ADD2]](p1) :: (load (s32), addrspace 1)
737 ; CHECK-NEXT: [[C8:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
738 ; CHECK-NEXT: [[ADD:%[0-9]+]]:vgpr(s32) = G_ADD [[LOAD2]], [[C8]]
739 ; CHECK-NEXT: G_STORE [[ADD]](s32), [[PTR_ADD2]](p1) :: (store (s32), addrspace 1)
740 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:sgpr(s32) = G_ADD [[PHI2]], [[C8]]
741 ; CHECK-NEXT: [[C9:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 100
742 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:sgpr(s1) = G_ICMP intpred(ult), [[PHI2]](s32), [[C9]]
743 ; CHECK-NEXT: [[COPY17:%[0-9]+]]:sreg_32(s1) = COPY [[ICMP2]](s1)
744 ; CHECK-NEXT: [[S_ANDN2_B32_1:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY12]](s1), $exec_lo, implicit-def $scc
745 ; CHECK-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY17]](s1), implicit-def $scc
746 ; CHECK-NEXT: [[S_OR_B32_1:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_1]](s1), [[S_AND_B32_1]](s1), implicit-def $scc
749 ; CHECK-NEXT: successors: %bb.3(0x80000000)
751 ; CHECK-NEXT: [[PHI5:%[0-9]+]]:sreg_32(s1) = PHI [[COPY11]](s1), %bb.2, [[S_OR_B32_1]](s1), %bb.4
752 ; CHECK-NEXT: [[PHI6:%[0-9]+]]:sgpr(s32) = G_PHI [[ADD1]](s32), %bb.4, [[DEF]](s32), %bb.2
753 ; CHECK-NEXT: [[COPY18:%[0-9]+]]:sreg_32(s1) = COPY [[PHI5]](s1)
754 ; CHECK-NEXT: [[COPY19:%[0-9]+]]:sreg_32(s1) = COPY [[COPY18]](s1)
755 ; CHECK-NEXT: [[COPY20:%[0-9]+]]:sgpr(s32) = COPY [[SI_IF1]](s32)
756 ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[COPY20]](s32)
757 ; CHECK-NEXT: [[S_ANDN2_B32_2:%[0-9]+]]:sreg_32(s1) = S_ANDN2_B32 [[COPY9]](s1), $exec_lo, implicit-def $scc
758 ; CHECK-NEXT: [[S_AND_B32_2:%[0-9]+]]:sreg_32(s1) = S_AND_B32 $exec_lo, [[COPY19]](s1), implicit-def $scc
759 ; CHECK-NEXT: [[S_OR_B32_2:%[0-9]+]]:sreg_32(s1) = S_OR_B32 [[S_ANDN2_B32_2]](s1), [[S_AND_B32_2]](s1), implicit-def $scc
760 ; CHECK-NEXT: G_BR %bb.3
763 ; CHECK-NEXT: [[PHI7:%[0-9]+]]:sgpr(s32) = G_PHI [[INT]](s32), %bb.3
764 ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[PHI7]](s32)
765 ; CHECK-NEXT: S_ENDPGM 0
767 successors: %bb.1(0x80000000)
768 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
770 %0:_(s32) = COPY $vgpr0
771 %1:_(s32) = COPY $vgpr1
772 %2:_(p1) = G_MERGE_VALUES %0(s32), %1(s32)
773 %3:_(s32) = COPY $vgpr2
774 %4:_(s32) = COPY $vgpr3
775 %5:_(p1) = G_MERGE_VALUES %3(s32), %4(s32)
776 %6:_(s32) = COPY $vgpr4
777 %7:_(s32) = COPY $vgpr5
778 %8:_(p1) = G_MERGE_VALUES %6(s32), %7(s32)
779 %9:_(s32) = G_IMPLICIT_DEF
780 %10:_(s32) = G_CONSTANT i32 0
781 %11:sreg_32(s1) = IMPLICIT_DEF
784 successors: %bb.2(0x40000000), %bb.3(0x40000000)
786 %12:sreg_32(s1) = PHI %11(s1), %bb.0, %13(s1), %bb.3
787 %14:_(s32) = G_PHI %15(s32), %bb.3, %10(s32), %bb.0
788 %16:_(s32) = G_PHI %10(s32), %bb.0, %17(s32), %bb.3
789 %18:sreg_32(s1) = COPY %12(s1)
790 %19:_(s64) = G_SEXT %16(s32)
791 %20:_(s32) = G_CONSTANT i32 2
792 %21:_(s64) = G_SHL %19, %20(s32)
793 %22:_(p1) = G_PTR_ADD %5, %21(s64)
794 %23:_(s32) = G_LOAD %22(p1) :: (load (s32), addrspace 1)
795 %24:_(s32) = G_CONSTANT i32 0
796 %25:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %23(s32), %24
797 %26:_(s1) = G_CONSTANT i1 true
798 %27:sreg_32(s1) = COPY %26(s1)
799 %28:sreg_32(s1) = S_ANDN2_B32 %18(s1), $exec_lo, implicit-def $scc
800 %29:sreg_32(s1) = S_AND_B32 $exec_lo, %27(s1), implicit-def $scc
801 %30:sreg_32(s1) = S_OR_B32 %28(s1), %29(s1), implicit-def $scc
802 %31:sreg_32(s1) = COPY %30(s1)
803 %32:sreg_32_xm0_xexec(s32) = SI_IF %25(s1), %bb.3, implicit-def $exec, implicit-def $scc, implicit $exec
807 successors: %bb.4(0x40000000), %bb.5(0x40000000)
809 %33:_(s32) = G_CONSTANT i32 2
810 %34:_(s64) = G_SHL %19, %33(s32)
811 %35:_(p1) = G_PTR_ADD %8, %34(s64)
812 %36:_(s32) = G_LOAD %35(p1) :: (load (s32), addrspace 1)
813 %37:_(s32) = G_CONSTANT i32 0
814 %38:sreg_32_xm0_xexec(s1) = G_ICMP intpred(ne), %36(s32), %37
815 %39:_(s1) = G_CONSTANT i1 true
816 %40:sreg_32(s1) = COPY %39(s1)
817 %41:sreg_32(s1) = COPY %40(s1)
818 %42:sreg_32_xm0_xexec(s32) = SI_IF %38(s1), %bb.5, implicit-def $exec, implicit-def $scc, implicit $exec
822 successors: %bb.6(0x04000000), %bb.1(0x7c000000)
824 %13:sreg_32(s1) = PHI %30(s1), %bb.1, %43(s1), %bb.5
825 %17:_(s32) = G_PHI %44(s32), %bb.5, %9(s32), %bb.1
826 %45:sreg_32(s1) = COPY %13(s1)
827 G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %32(s32)
828 %15:sreg_32_xm0_xexec(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.if.break), %45(s1), %14(s32)
829 SI_LOOP %15(s32), %bb.1, implicit-def $exec, implicit-def $scc, implicit $exec
833 successors: %bb.5(0x80000000)
835 %46:_(s32) = G_CONSTANT i32 2
836 %47:_(s64) = G_SHL %19, %46(s32)
837 %48:_(p1) = G_PTR_ADD %2, %47(s64)
838 %49:_(s32) = G_LOAD %48(p1) :: (load (s32), addrspace 1)
839 %50:_(s32) = G_CONSTANT i32 1
840 %51:_(s32) = G_ADD %49, %50
841 G_STORE %51(s32), %48(p1) :: (store (s32), addrspace 1)
842 %52:_(s32) = G_ADD %16, %50
843 %53:_(s32) = G_CONSTANT i32 100
844 %54:_(s1) = G_ICMP intpred(ult), %16(s32), %53
845 %55:sreg_32(s1) = COPY %54(s1)
846 %56:sreg_32(s1) = S_ANDN2_B32 %41(s1), $exec_lo, implicit-def $scc
847 %57:sreg_32(s1) = S_AND_B32 $exec_lo, %55(s1), implicit-def $scc
848 %58:sreg_32(s1) = S_OR_B32 %56(s1), %57(s1), implicit-def $scc
851 successors: %bb.3(0x80000000)
853 %59:sreg_32(s1) = PHI %40(s1), %bb.2, %58(s1), %bb.4
854 %44:_(s32) = G_PHI %52(s32), %bb.4, %9(s32), %bb.2
855 %60:sreg_32(s1) = COPY %59(s1)
856 %61:sreg_32(s1) = COPY %60(s1)
857 G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %42(s32)
858 %62:sreg_32(s1) = S_ANDN2_B32 %31(s1), $exec_lo, implicit-def $scc
859 %63:sreg_32(s1) = S_AND_B32 $exec_lo, %61(s1), implicit-def $scc
860 %43:sreg_32(s1) = S_OR_B32 %62(s1), %63(s1), implicit-def $scc
864 %64:_(s32) = G_PHI %15(s32), %bb.3
865 G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), %64(s32)