1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -march=amdgcn -mcpu=hawaii  -run-pass=legalizer -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s
3# RUN: llc -O0 -march=amdgcn -mcpu=fiji  -run-pass=legalizer -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s
4# RUN: llc -O0 -march=amdgcn -mcpu=gfx900  -run-pass=legalizer -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
5# RUN: llc -O0 -march=amdgcn -mcpu=gfx1010  -run-pass=legalizer -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
6
7---
8name: test_icmp_s32
9body: |
10  bb.0:
11    liveins: $vgpr0
12    ; GFX7-LABEL: name: test_icmp_s32
13    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
14    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
15    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]]
16    ; GFX7: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
17    ; GFX7: $vgpr0 = COPY [[SELECT]](s32)
18    ; GFX8-LABEL: name: test_icmp_s32
19    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
20    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
21    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]]
22    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
23    ; GFX8: $vgpr0 = COPY [[SELECT]](s32)
24    ; GFX9-LABEL: name: test_icmp_s32
25    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
26    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
27    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[COPY]]
28    ; GFX9: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
29    ; GFX9: $vgpr0 = COPY [[SELECT]](s32)
30    %0:_(s32) = G_CONSTANT i32 0
31    %1:_(s32) = COPY $vgpr0
32    %2:_(s1) = G_ICMP intpred(ne), %0, %1
33    %3:_(s32) = G_SELECT %2, %0, %1
34    $vgpr0 = COPY %3
35...
36
37---
38name: test_icmp_s64
39body: |
40  bb.0:
41    liveins: $vgpr0_vgpr1
42    ; GFX7-LABEL: name: test_icmp_s64
43    ; GFX7: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
44    ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
45    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s64), [[COPY]]
46    ; GFX7: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
47    ; GFX7: $vgpr0_vgpr1 = COPY [[SELECT]](s64)
48    ; GFX8-LABEL: name: test_icmp_s64
49    ; GFX8: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
50    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
51    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s64), [[COPY]]
52    ; GFX8: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
53    ; GFX8: $vgpr0_vgpr1 = COPY [[SELECT]](s64)
54    ; GFX9-LABEL: name: test_icmp_s64
55    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
56    ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
57    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s64), [[COPY]]
58    ; GFX9: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
59    ; GFX9: $vgpr0_vgpr1 = COPY [[SELECT]](s64)
60    %0:_(s64) = G_CONSTANT i64 0
61    %1:_(s64) = COPY $vgpr0_vgpr1
62    %2:_(s1) = G_ICMP intpred(ne), %0, %1
63    %3:_(s64) = G_SELECT %2, %0, %1
64    $vgpr0_vgpr1 = COPY %3
65...
66
67---
68name: test_icmp_s16
69body: |
70  bb.0:
71    liveins: $vgpr0
72    ; GFX7-LABEL: name: test_icmp_s16
73    ; GFX7: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
74    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
75    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
76    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
77    ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
78    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C2]]
79    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C1]](s32), [[AND]]
80    ; GFX7: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C]], [[TRUNC]]
81    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
82    ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32)
83    ; GFX8-LABEL: name: test_icmp_s16
84    ; GFX8: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
85    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
86    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
87    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s16), [[TRUNC]]
88    ; GFX8: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C]], [[TRUNC]]
89    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
90    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
91    ; GFX9-LABEL: name: test_icmp_s16
92    ; GFX9: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
93    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
94    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
95    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s16), [[TRUNC]]
96    ; GFX9: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C]], [[TRUNC]]
97    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
98    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
99    %0:_(s16) = G_CONSTANT i16 0
100    %1:_(s32) = COPY $vgpr0
101    %2:_(s16) = G_TRUNC %1
102    %3:_(s1) = G_ICMP intpred(ne), %0, %2
103    %4:_(s16) = G_SELECT %3, %0, %2
104    %5:_(s32) = G_ANYEXT %4
105    $vgpr0 = COPY %5
106...
107
108---
109name: test_icmp_s8
110body: |
111  bb.0:
112    liveins: $vgpr0
113    ; GFX7-LABEL: name: test_icmp_s8
114    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
115    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
116    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
117    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
118    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
119    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
120    ; GFX7: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
121    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
122    ; GFX7: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C2]], [[TRUNC]]
123    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
124    ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32)
125    ; GFX8-LABEL: name: test_icmp_s8
126    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
127    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
128    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
129    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
130    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
131    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
132    ; GFX8: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
133    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
134    ; GFX8: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C2]], [[TRUNC]]
135    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
136    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
137    ; GFX9-LABEL: name: test_icmp_s8
138    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
139    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
140    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
141    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
142    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
143    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
144    ; GFX9: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
145    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
146    ; GFX9: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[ICMP]](s1), [[C2]], [[TRUNC]]
147    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
148    ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32)
149    %0:_(s8) = G_CONSTANT i8 0
150    %1:_(s32) = COPY $vgpr0
151    %2:_(s8) = G_TRUNC %1
152    %3:_(s1) = G_ICMP intpred(ne), %0, %2
153    %4:_(s8) = G_SELECT %3, %0, %2
154    %5:_(s32) = G_ANYEXT %4
155    $vgpr0 = COPY %5
156...
157
158---
159name: test_icmp_s24
160body: |
161  bb.0:
162    liveins: $vgpr0
163    ; GFX7-LABEL: name: test_icmp_s24
164    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
165    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
166    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
167    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
168    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
169    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
170    ; GFX7: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
171    ; GFX7: $vgpr0 = COPY [[SELECT]](s32)
172    ; GFX8-LABEL: name: test_icmp_s24
173    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
174    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
175    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
176    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
177    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
178    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
179    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
180    ; GFX8: $vgpr0 = COPY [[SELECT]](s32)
181    ; GFX9-LABEL: name: test_icmp_s24
182    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
183    ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
184    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
185    ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
186    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
187    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[AND]]
188    ; GFX9: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[C]], [[COPY]]
189    ; GFX9: $vgpr0 = COPY [[SELECT]](s32)
190    %0:_(s24) = G_CONSTANT i24 0
191    %1:_(s32) = COPY $vgpr0
192    %2:_(s24) = G_TRUNC %1
193    %3:_(s1) = G_ICMP intpred(ne), %0, %2
194    %4:_(s24) = G_SELECT %3, %0, %2
195    %5:_(s32) = G_ANYEXT %4
196    $vgpr0 = COPY %5
197...
198
199---
200name: test_icmp_v2s32
201body: |
202  bb.0:
203    liveins: $vgpr0_vgpr1
204    ; GFX7-LABEL: name: test_icmp_v2s32
205    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
206    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
207    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
208    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV]]
209    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV1]]
210    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
211    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
212    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
213    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]
214    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C1]]
215    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
216    ; GFX7: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
217    ; GFX8-LABEL: name: test_icmp_v2s32
218    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
219    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
220    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
221    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV]]
222    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV1]]
223    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
224    ; GFX8: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
225    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
226    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]
227    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C1]]
228    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
229    ; GFX8: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
230    ; GFX9-LABEL: name: test_icmp_v2s32
231    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
232    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
233    ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
234    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV]]
235    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[C]](s32), [[UV1]]
236    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
237    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
238    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]
239    ; GFX9: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
240    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C1]]
241    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
242    ; GFX9: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
243    %0:_(s32) = G_CONSTANT i32 0
244    %1:_(<2 x s32>) = G_BUILD_VECTOR %0, %0
245    %2:_(<2 x s32>) = COPY $vgpr0_vgpr1
246    %3:_(<2 x s1>) = G_ICMP intpred(ne), %1, %2
247    %4:_(<2 x s32>) = G_ZEXT %3
248    S_NOP 0, implicit %4
249...
250
251---
252name: test_icmp_v3s32
253body: |
254  bb.0:
255    liveins: $vgpr0_vgpr1_vgpr2
256
257    ; GFX7-LABEL: name: test_icmp_v3s32
258    ; GFX7: [[DEF:%[0-9]+]]:_(<3 x s32>) = G_IMPLICIT_DEF
259    ; GFX7: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
260    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<3 x s32>)
261    ; GFX7: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
262    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]]
263    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]]
264    ; GFX7: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]]
265    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
266    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
267    ; GFX7: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
268    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
269    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
270    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
271    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
272    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32)
273    ; GFX7: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>)
274    ; GFX8-LABEL: name: test_icmp_v3s32
275    ; GFX8: [[DEF:%[0-9]+]]:_(<3 x s32>) = G_IMPLICIT_DEF
276    ; GFX8: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
277    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<3 x s32>)
278    ; GFX8: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
279    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]]
280    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]]
281    ; GFX8: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]]
282    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
283    ; GFX8: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
284    ; GFX8: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
285    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
286    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
287    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
288    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
289    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32)
290    ; GFX8: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>)
291    ; GFX9-LABEL: name: test_icmp_v3s32
292    ; GFX9: [[DEF:%[0-9]+]]:_(<3 x s32>) = G_IMPLICIT_DEF
293    ; GFX9: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
294    ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<3 x s32>)
295    ; GFX9: [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>)
296    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV3]]
297    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV4]]
298    ; GFX9: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV5]]
299    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
300    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
301    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
302    ; GFX9: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
303    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
304    ; GFX9: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
305    ; GFX9: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
306    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32)
307    ; GFX9: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>)
308    %0:_(<3 x s32>) = G_IMPLICIT_DEF
309    %1:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2
310    %2:_(<3 x s1>) = G_ICMP intpred(ne), %0, %1
311    %3:_(<3 x s32>) = G_ZEXT %2
312    S_NOP 0, implicit %3
313...
314
315---
316name: test_icmp_v4s32
317body: |
318  bb.0:
319    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
320
321    ; GFX7-LABEL: name: test_icmp_v4s32
322    ; GFX7: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
323    ; GFX7: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[DEF]](p1) :: (volatile load (<4 x s32>))
324    ; GFX7: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
325    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<4 x s32>)
326    ; GFX7: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
327    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV4]]
328    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV5]]
329    ; GFX7: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV6]]
330    ; GFX7: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV3]](s32), [[UV7]]
331    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
332    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
333    ; GFX7: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
334    ; GFX7: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP3]](s1)
335    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
336    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
337    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
338    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
339    ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ANYEXT3]], [[C]]
340    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32), [[AND3]](s32)
341    ; GFX7: S_NOP 0, implicit [[BUILD_VECTOR]](<4 x s32>)
342    ; GFX8-LABEL: name: test_icmp_v4s32
343    ; GFX8: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
344    ; GFX8: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[DEF]](p1) :: (volatile load (<4 x s32>))
345    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
346    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<4 x s32>)
347    ; GFX8: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
348    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV4]]
349    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV5]]
350    ; GFX8: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV6]]
351    ; GFX8: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV3]](s32), [[UV7]]
352    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
353    ; GFX8: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
354    ; GFX8: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
355    ; GFX8: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP3]](s1)
356    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
357    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
358    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
359    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
360    ; GFX8: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ANYEXT3]], [[C]]
361    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32), [[AND3]](s32)
362    ; GFX8: S_NOP 0, implicit [[BUILD_VECTOR]](<4 x s32>)
363    ; GFX9-LABEL: name: test_icmp_v4s32
364    ; GFX9: [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
365    ; GFX9: [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[DEF]](p1) :: (volatile load (<4 x s32>))
366    ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
367    ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<4 x s32>)
368    ; GFX9: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
369    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV4]]
370    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV5]]
371    ; GFX9: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV2]](s32), [[UV6]]
372    ; GFX9: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV3]](s32), [[UV7]]
373    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
374    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
375    ; GFX9: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C]]
376    ; GFX9: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
377    ; GFX9: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C]]
378    ; GFX9: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP2]](s1)
379    ; GFX9: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ANYEXT2]], [[C]]
380    ; GFX9: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP3]](s1)
381    ; GFX9: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ANYEXT3]], [[C]]
382    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32), [[AND2]](s32), [[AND3]](s32)
383    ; GFX9: S_NOP 0, implicit [[BUILD_VECTOR]](<4 x s32>)
384    %0:_(p1) = G_IMPLICIT_DEF
385    %1:_(<4 x s32>) = G_LOAD %0 :: (volatile load (<4 x s32>))
386    %2:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
387    %3:_(<4 x s1>) = G_ICMP intpred(ne), %1, %2
388    %4:_(<4 x s32>) = G_ZEXT %3
389    S_NOP 0, implicit %4
390
391...
392
393---
394name: test_icmp_p0
395body: |
396  bb.0:
397    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
398    ; GFX7-LABEL: name: test_icmp_p0
399    ; GFX7: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
400    ; GFX7: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
401    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[COPY1]]
402    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
403    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
404    ; GFX8-LABEL: name: test_icmp_p0
405    ; GFX8: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
406    ; GFX8: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
407    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[COPY1]]
408    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
409    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
410    ; GFX9-LABEL: name: test_icmp_p0
411    ; GFX9: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
412    ; GFX9: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1
413    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p0), [[COPY1]]
414    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
415    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
416    %0:_(p0) = COPY $vgpr0_vgpr1
417    %1:_(p0) = COPY $vgpr0_vgpr1
418    %2:_(s1) = G_ICMP intpred(ne), %0, %1
419    %3:_(s32) = G_SEXT %2
420    $vgpr0 = COPY %3
421...
422
423---
424name: test_icmp_p1
425body: |
426  bb.0:
427    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
428    ; GFX7-LABEL: name: test_icmp_p1
429    ; GFX7: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
430    ; GFX7: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
431    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p1), [[COPY1]]
432    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
433    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
434    ; GFX8-LABEL: name: test_icmp_p1
435    ; GFX8: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
436    ; GFX8: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
437    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p1), [[COPY1]]
438    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
439    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
440    ; GFX9-LABEL: name: test_icmp_p1
441    ; GFX9: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
442    ; GFX9: [[COPY1:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
443    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p1), [[COPY1]]
444    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
445    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
446    %0:_(p1) = COPY $vgpr0_vgpr1
447    %1:_(p1) = COPY $vgpr0_vgpr1
448    %2:_(s1) = G_ICMP intpred(ne), %0, %1
449    %3:_(s32) = G_SEXT %2
450    $vgpr0 = COPY %3
451...
452
453---
454name: test_icmp_p2
455body: |
456  bb.0:
457    liveins: $vgpr0, $vgpr1
458
459    ; GFX7-LABEL: name: test_icmp_p2
460    ; GFX7: [[COPY:%[0-9]+]]:_(p2) = COPY $vgpr0
461    ; GFX7: [[COPY1:%[0-9]+]]:_(p2) = COPY $vgpr1
462    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p2), [[COPY1]]
463    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
464    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
465    ; GFX8-LABEL: name: test_icmp_p2
466    ; GFX8: [[COPY:%[0-9]+]]:_(p2) = COPY $vgpr0
467    ; GFX8: [[COPY1:%[0-9]+]]:_(p2) = COPY $vgpr1
468    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p2), [[COPY1]]
469    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
470    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
471    ; GFX9-LABEL: name: test_icmp_p2
472    ; GFX9: [[COPY:%[0-9]+]]:_(p2) = COPY $vgpr0
473    ; GFX9: [[COPY1:%[0-9]+]]:_(p2) = COPY $vgpr1
474    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p2), [[COPY1]]
475    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
476    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
477    %0:_(p2) = COPY $vgpr0
478    %1:_(p2) = COPY $vgpr1
479    %2:_(s1) = G_ICMP intpred(ne), %0, %1
480    %3:_(s32) = G_SEXT %2
481    $vgpr0 = COPY %3
482...
483
484---
485name: test_icmp_p3
486body: |
487  bb.0:
488    liveins: $vgpr0, $vgpr1
489
490    ; GFX7-LABEL: name: test_icmp_p3
491    ; GFX7: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
492    ; GFX7: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr1
493    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p3), [[COPY1]]
494    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
495    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
496    ; GFX8-LABEL: name: test_icmp_p3
497    ; GFX8: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
498    ; GFX8: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr1
499    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p3), [[COPY1]]
500    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
501    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
502    ; GFX9-LABEL: name: test_icmp_p3
503    ; GFX9: [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
504    ; GFX9: [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr1
505    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p3), [[COPY1]]
506    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
507    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
508    %0:_(p3) = COPY $vgpr0
509    %1:_(p3) = COPY $vgpr1
510    %2:_(s1) = G_ICMP intpred(ne), %0, %1
511    %3:_(s32) = G_SEXT %2
512    $vgpr0 = COPY %3
513...
514
515---
516name: test_icmp_p4
517body: |
518  bb.0:
519    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
520    ; GFX7-LABEL: name: test_icmp_p4
521    ; GFX7: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
522    ; GFX7: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
523    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p4), [[COPY1]]
524    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
525    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
526    ; GFX8-LABEL: name: test_icmp_p4
527    ; GFX8: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
528    ; GFX8: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
529    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p4), [[COPY1]]
530    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
531    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
532    ; GFX9-LABEL: name: test_icmp_p4
533    ; GFX9: [[COPY:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
534    ; GFX9: [[COPY1:%[0-9]+]]:_(p4) = COPY $vgpr0_vgpr1
535    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p4), [[COPY1]]
536    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
537    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
538    %0:_(p4) = COPY $vgpr0_vgpr1
539    %1:_(p4) = COPY $vgpr0_vgpr1
540    %2:_(s1) = G_ICMP intpred(ne), %0, %1
541    %3:_(s32) = G_SEXT %2
542    $vgpr0 = COPY %3
543...
544
545---
546name: test_icmp_p5
547body: |
548  bb.0:
549    liveins: $vgpr0, $vgpr1
550
551    ; GFX7-LABEL: name: test_icmp_p5
552    ; GFX7: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0
553    ; GFX7: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr1
554    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p5), [[COPY1]]
555    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
556    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
557    ; GFX8-LABEL: name: test_icmp_p5
558    ; GFX8: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0
559    ; GFX8: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr1
560    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p5), [[COPY1]]
561    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
562    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
563    ; GFX9-LABEL: name: test_icmp_p5
564    ; GFX9: [[COPY:%[0-9]+]]:_(p5) = COPY $vgpr0
565    ; GFX9: [[COPY1:%[0-9]+]]:_(p5) = COPY $vgpr1
566    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p5), [[COPY1]]
567    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
568    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
569    %0:_(p5) = COPY $vgpr0
570    %1:_(p5) = COPY $vgpr1
571    %2:_(s1) = G_ICMP intpred(ne), %0, %1
572    %3:_(s32) = G_SEXT %2
573    $vgpr0 = COPY %3
574...
575
576---
577name: test_icmp_p999
578body: |
579  bb.0:
580    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
581    ; GFX7-LABEL: name: test_icmp_p999
582    ; GFX7: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
583    ; GFX7: [[COPY1:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
584    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p999), [[COPY1]]
585    ; GFX7: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
586    ; GFX7: $vgpr0 = COPY [[SEXT]](s32)
587    ; GFX8-LABEL: name: test_icmp_p999
588    ; GFX8: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
589    ; GFX8: [[COPY1:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
590    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p999), [[COPY1]]
591    ; GFX8: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
592    ; GFX8: $vgpr0 = COPY [[SEXT]](s32)
593    ; GFX9-LABEL: name: test_icmp_p999
594    ; GFX9: [[COPY:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
595    ; GFX9: [[COPY1:%[0-9]+]]:_(p999) = COPY $vgpr0_vgpr1
596    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](p999), [[COPY1]]
597    ; GFX9: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ICMP]](s1)
598    ; GFX9: $vgpr0 = COPY [[SEXT]](s32)
599    %0:_(p999) = COPY $vgpr0_vgpr1
600    %1:_(p999) = COPY $vgpr0_vgpr1
601    %2:_(s1) = G_ICMP intpred(ne), %0, %1
602    %3:_(s32) = G_SEXT %2
603    $vgpr0 = COPY %3
604...
605
606---
607name: test_icmp_v2p3
608body: |
609  bb.0:
610    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
611    ; GFX7-LABEL: name: test_icmp_v2p3
612    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
613    ; GFX7: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
614    ; GFX7: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY]](<2 x p3>)
615    ; GFX7: [[UV2:%[0-9]+]]:_(p3), [[UV3:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>)
616    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[UV2]]
617    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[UV3]]
618    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
619    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
620    ; GFX7: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
621    ; GFX7: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
622    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
623    ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
624    ; GFX8-LABEL: name: test_icmp_v2p3
625    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
626    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
627    ; GFX8: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY]](<2 x p3>)
628    ; GFX8: [[UV2:%[0-9]+]]:_(p3), [[UV3:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>)
629    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[UV2]]
630    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[UV3]]
631    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
632    ; GFX8: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
633    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
634    ; GFX8: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
635    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
636    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
637    ; GFX9-LABEL: name: test_icmp_v2p3
638    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
639    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
640    ; GFX9: [[UV:%[0-9]+]]:_(p3), [[UV1:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY]](<2 x p3>)
641    ; GFX9: [[UV2:%[0-9]+]]:_(p3), [[UV3:%[0-9]+]]:_(p3) = G_UNMERGE_VALUES [[COPY1]](<2 x p3>)
642    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p3), [[UV2]]
643    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p3), [[UV3]]
644    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
645    ; GFX9: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
646    ; GFX9: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
647    ; GFX9: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
648    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
649    ; GFX9: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
650    %0:_(<2 x p3>) = COPY $vgpr0_vgpr1
651    %1:_(<2 x p3>) = COPY $vgpr0_vgpr1
652    %2:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1
653    %3:_(<2 x s32>) = G_SEXT %2
654    $vgpr0_vgpr1 = COPY %3
655...
656
657---
658name: test_icmp_v2p999
659body: |
660  bb.0:
661    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
662    ; GFX7-LABEL: name: test_icmp_v2p999
663    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
664    ; GFX7: [[COPY1:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
665    ; GFX7: [[UV:%[0-9]+]]:_(p999), [[UV1:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY]](<2 x p999>)
666    ; GFX7: [[UV2:%[0-9]+]]:_(p999), [[UV3:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY1]](<2 x p999>)
667    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p999), [[UV2]]
668    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p999), [[UV3]]
669    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
670    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
671    ; GFX7: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
672    ; GFX7: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
673    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
674    ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
675    ; GFX8-LABEL: name: test_icmp_v2p999
676    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
677    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
678    ; GFX8: [[UV:%[0-9]+]]:_(p999), [[UV1:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY]](<2 x p999>)
679    ; GFX8: [[UV2:%[0-9]+]]:_(p999), [[UV3:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY1]](<2 x p999>)
680    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p999), [[UV2]]
681    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p999), [[UV3]]
682    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
683    ; GFX8: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
684    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
685    ; GFX8: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
686    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
687    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
688    ; GFX9-LABEL: name: test_icmp_v2p999
689    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
690    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
691    ; GFX9: [[UV:%[0-9]+]]:_(p999), [[UV1:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY]](<2 x p999>)
692    ; GFX9: [[UV2:%[0-9]+]]:_(p999), [[UV3:%[0-9]+]]:_(p999) = G_UNMERGE_VALUES [[COPY1]](<2 x p999>)
693    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](p999), [[UV2]]
694    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](p999), [[UV3]]
695    ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
696    ; GFX9: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 1
697    ; GFX9: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
698    ; GFX9: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 1
699    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
700    ; GFX9: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
701    %0:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
702    %1:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
703    %2:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1
704    %3:_(<2 x s32>) = G_SEXT %2
705    $vgpr0_vgpr1 = COPY %3
706...
707
708---
709name: test_icmp_v2s16
710body: |
711  bb.0:
712    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
713    ; GFX7-LABEL: name: test_icmp_v2s16
714    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
715    ; GFX7: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
716    ; GFX7: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
717    ; GFX7: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
718    ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
719    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
720    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
721    ; GFX7: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
722    ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
723    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
724    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
725    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]
726    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s32), [[AND1]]
727    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C1]]
728    ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C1]]
729    ; GFX7: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND2]](s32), [[AND3]]
730    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
731    ; GFX7: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
732    ; GFX7: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
733    ; GFX7: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV1]], [[UV3]]
734    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
735    ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
736    ; GFX8-LABEL: name: test_icmp_v2s16
737    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
738    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
739    ; GFX8: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
740    ; GFX8: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
741    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
742    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)
743    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
744    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
745    ; GFX8: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
746    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
747    ; GFX8: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)
748    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
749    ; GFX8: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
750    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[TRUNC]](s16), [[TRUNC2]]
751    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[TRUNC1]](s16), [[TRUNC3]]
752    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
753    ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
754    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
755    ; GFX8: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV1]], [[UV3]]
756    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
757    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
758    ; GFX9-LABEL: name: test_icmp_v2s16
759    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
760    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
761    ; GFX9: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
762    ; GFX9: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
763    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
764    ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)
765    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
766    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
767    ; GFX9: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
768    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
769    ; GFX9: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)
770    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
771    ; GFX9: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
772    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[TRUNC]](s16), [[TRUNC2]]
773    ; GFX9: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[TRUNC1]](s16), [[TRUNC3]]
774    ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
775    ; GFX9: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
776    ; GFX9: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
777    ; GFX9: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[UV1]], [[UV3]]
778    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
779    ; GFX9: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
780    %0:_(<2 x s16>) = COPY $vgpr0
781    %1:_(<2 x s16>) = COPY $vgpr1
782    %2:_(<2 x s32>) = COPY $vgpr2_vgpr3
783    %3:_(<2 x s32>) = COPY $vgpr4_vgpr5
784    %4:_(<2 x s1>) = G_ICMP intpred(ne), %0, %1
785    %5:_(<2 x s32>) = G_SELECT %4, %2, %3
786    $vgpr0_vgpr1 = COPY %5
787...
788
789---
790name: test_icmp_s33
791body: |
792  bb.0:
793    liveins: $vgpr0_vgpr1
794    ; GFX7-LABEL: name: test_icmp_s33
795    ; GFX7: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
796    ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)
797    ; GFX7: [[COPY1:%[0-9]+]]:_(s64) = COPY [[C]](s64)
798    ; GFX7: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
799    ; GFX7: S_ENDPGM 0, implicit [[ICMP]](s1)
800    ; GFX8-LABEL: name: test_icmp_s33
801    ; GFX8: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
802    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)
803    ; GFX8: [[COPY1:%[0-9]+]]:_(s64) = COPY [[C]](s64)
804    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
805    ; GFX8: S_ENDPGM 0, implicit [[ICMP]](s1)
806    ; GFX9-LABEL: name: test_icmp_s33
807    ; GFX9: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
808    ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY [[C]](s64)
809    ; GFX9: [[COPY1:%[0-9]+]]:_(s64) = COPY [[C]](s64)
810    ; GFX9: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
811    ; GFX9: S_ENDPGM 0, implicit [[ICMP]](s1)
812    %0:_(s64) = COPY $vgpr0_vgpr1
813    %1:_(s33) = G_TRUNC %0
814    %2:_(s33) = G_CONSTANT i33 0
815    %3:_(s1) = G_ICMP intpred(ne), %2, %2
816    S_ENDPGM 0, implicit %3
817...
818