1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX8 %s
4
5---
6name: test_sitofp_s32_to_s32
7body: |
8  bb.0:
9    liveins: $vgpr0
10
11    ; GFX6-LABEL: name: test_sitofp_s32_to_s32
12    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
13    ; GFX6: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[COPY]](s32)
14    ; GFX6: $vgpr0 = COPY [[SITOFP]](s32)
15    ; GFX8-LABEL: name: test_sitofp_s32_to_s32
16    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
17    ; GFX8: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[COPY]](s32)
18    ; GFX8: $vgpr0 = COPY [[SITOFP]](s32)
19    %0:_(s32) = COPY $vgpr0
20    %1:_(s32) = G_SITOFP %0
21    $vgpr0 = COPY %1
22...
23
24---
25name: test_sitofp_s32_to_s64
26body: |
27  bb.0:
28    liveins: $vgpr0
29
30    ; GFX6-LABEL: name: test_sitofp_s32_to_s64
31    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
32    ; GFX6: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[COPY]](s32)
33    ; GFX6: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
34    ; GFX8-LABEL: name: test_sitofp_s32_to_s64
35    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
36    ; GFX8: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[COPY]](s32)
37    ; GFX8: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
38    %0:_(s32) = COPY $vgpr0
39    %1:_(s64) = G_SITOFP %0
40    $vgpr0_vgpr1 = COPY %1
41...
42
43---
44name: test_sitofp_v2s32_to_v2s32
45body: |
46  bb.0:
47    liveins: $vgpr0_vgpr1
48
49    ; GFX6-LABEL: name: test_sitofp_v2s32_to_v2s32
50    ; GFX6: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
51    ; GFX6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
52    ; GFX6: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[UV]](s32)
53    ; GFX6: [[SITOFP1:%[0-9]+]]:_(s32) = G_SITOFP [[UV1]](s32)
54    ; GFX6: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SITOFP]](s32), [[SITOFP1]](s32)
55    ; GFX6: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
56    ; GFX8-LABEL: name: test_sitofp_v2s32_to_v2s32
57    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
58    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
59    ; GFX8: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[UV]](s32)
60    ; GFX8: [[SITOFP1:%[0-9]+]]:_(s32) = G_SITOFP [[UV1]](s32)
61    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SITOFP]](s32), [[SITOFP1]](s32)
62    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
63    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
64    %1:_(<2 x s32>) = G_SITOFP %0
65    $vgpr0_vgpr1 = COPY %1
66...
67
68---
69name: test_sitofp_v2s32_to_v2s64
70body: |
71  bb.0:
72    liveins: $vgpr0_vgpr1
73
74    ; GFX6-LABEL: name: test_sitofp_v2s32_to_v2s64
75    ; GFX6: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
76    ; GFX6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
77    ; GFX6: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[UV]](s32)
78    ; GFX6: [[SITOFP1:%[0-9]+]]:_(s64) = G_SITOFP [[UV1]](s32)
79    ; GFX6: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SITOFP]](s64), [[SITOFP1]](s64)
80    ; GFX6: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
81    ; GFX8-LABEL: name: test_sitofp_v2s32_to_v2s64
82    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
83    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
84    ; GFX8: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[UV]](s32)
85    ; GFX8: [[SITOFP1:%[0-9]+]]:_(s64) = G_SITOFP [[UV1]](s32)
86    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SITOFP]](s64), [[SITOFP1]](s64)
87    ; GFX8: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
88    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
89    %1:_(<2 x s64>) = G_SITOFP %0
90    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
91...
92
93---
94name: test_sitofp_s64_to_s32
95body: |
96  bb.0:
97    liveins: $vgpr0_vgpr1
98
99    ; GFX6-LABEL: name: test_sitofp_s64_to_s32
100    ; GFX6: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
101    ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
102    ; GFX6: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
103    ; GFX6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
104    ; GFX6: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64)
105    ; GFX6: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]]
106    ; GFX6: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]]
107    ; GFX6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32)
108    ; GFX6: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]]
109    ; GFX6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
110    ; GFX6: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
111    ; GFX6: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[XOR]](s64)
112    ; GFX6: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 190
113    ; GFX6: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[CTLZ_ZERO_UNDEF]]
114    ; GFX6: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[XOR]](s64), [[C2]]
115    ; GFX6: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[SUB]], [[C1]]
116    ; GFX6: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
117    ; GFX6: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[XOR]], [[CTLZ_ZERO_UNDEF]](s32)
118    ; GFX6: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C4]]
119    ; GFX6: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1099511627775
120    ; GFX6: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C5]]
121    ; GFX6: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 40
122    ; GFX6: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[AND]], [[C6]](s32)
123    ; GFX6: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 23
124    ; GFX6: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C7]](s32)
125    ; GFX6: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
126    ; GFX6: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[TRUNC]]
127    ; GFX6: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 549755813888
128    ; GFX6: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[AND1]](s64), [[C8]]
129    ; GFX6: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND1]](s64), [[C8]]
130    ; GFX6: [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
131    ; GFX6: [[AND2:%[0-9]+]]:_(s32) = G_AND [[OR]], [[C9]]
132    ; GFX6: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[AND2]], [[C1]]
133    ; GFX6: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[C9]], [[SELECT1]]
134    ; GFX6: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[SELECT2]]
135    ; GFX6: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[ADD]]
136    ; GFX6: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[ASHR]](s64), [[C2]]
137    ; GFX6: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP3]](s1), [[FNEG]], [[ADD]]
138    ; GFX6: $vgpr0 = COPY [[SELECT3]](s32)
139    ; GFX8-LABEL: name: test_sitofp_s64_to_s32
140    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
141    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
142    ; GFX8: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32)
143    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
144    ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64)
145    ; GFX8: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]]
146    ; GFX8: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]]
147    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32)
148    ; GFX8: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]]
149    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
150    ; GFX8: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
151    ; GFX8: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[XOR]](s64)
152    ; GFX8: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 190
153    ; GFX8: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[CTLZ_ZERO_UNDEF]]
154    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[XOR]](s64), [[C2]]
155    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[SUB]], [[C1]]
156    ; GFX8: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
157    ; GFX8: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[XOR]], [[CTLZ_ZERO_UNDEF]](s32)
158    ; GFX8: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C4]]
159    ; GFX8: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1099511627775
160    ; GFX8: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C5]]
161    ; GFX8: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 40
162    ; GFX8: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[AND]], [[C6]](s32)
163    ; GFX8: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 23
164    ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C7]](s32)
165    ; GFX8: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
166    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[TRUNC]]
167    ; GFX8: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 549755813888
168    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[AND1]](s64), [[C8]]
169    ; GFX8: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND1]](s64), [[C8]]
170    ; GFX8: [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
171    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[OR]], [[C9]]
172    ; GFX8: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[AND2]], [[C1]]
173    ; GFX8: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[C9]], [[SELECT1]]
174    ; GFX8: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[SELECT2]]
175    ; GFX8: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[ADD]]
176    ; GFX8: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[ASHR]](s64), [[C2]]
177    ; GFX8: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP3]](s1), [[FNEG]], [[ADD]]
178    ; GFX8: $vgpr0 = COPY [[SELECT3]](s32)
179    %0:_(s64) = COPY $vgpr0_vgpr1
180    %1:_(s32) = G_SITOFP %0
181    $vgpr0 = COPY %1
182...
183
184---
185name: test_sitofp_s64_to_s64
186body: |
187  bb.0:
188    liveins: $vgpr0_vgpr1
189
190    ; GFX6-LABEL: name: test_sitofp_s64_to_s64
191    ; GFX6: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
192    ; GFX6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
193    ; GFX6: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[UV1]](s32)
194    ; GFX6: [[UITOFP:%[0-9]+]]:_(s64) = G_UITOFP [[UV]](s32)
195    ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
196    ; GFX6: [[INT:%[0-9]+]]:_(s64) = G_INTRINSIC intrinsic(@llvm.amdgcn.ldexp), [[SITOFP]](s64), [[C]](s32)
197    ; GFX6: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[INT]], [[UITOFP]]
198    ; GFX6: $vgpr0_vgpr1 = COPY [[FADD]](s64)
199    ; GFX8-LABEL: name: test_sitofp_s64_to_s64
200    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
201    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
202    ; GFX8: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[UV1]](s32)
203    ; GFX8: [[UITOFP:%[0-9]+]]:_(s64) = G_UITOFP [[UV]](s32)
204    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
205    ; GFX8: [[INT:%[0-9]+]]:_(s64) = G_INTRINSIC intrinsic(@llvm.amdgcn.ldexp), [[SITOFP]](s64), [[C]](s32)
206    ; GFX8: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[INT]], [[UITOFP]]
207    ; GFX8: $vgpr0_vgpr1 = COPY [[FADD]](s64)
208    %0:_(s64) = COPY $vgpr0_vgpr1
209    %1:_(s64) = G_SITOFP %0
210    $vgpr0_vgpr1 = COPY %1
211...
212
213---
214name: test_sitofp_s16_to_s16
215body: |
216  bb.0:
217    liveins: $vgpr0
218
219    ; GFX6-LABEL: name: test_sitofp_s16_to_s16
220    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
221    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
222    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 16
223    ; GFX6: [[SITOFP:%[0-9]+]]:_(s16) = G_SITOFP [[SEXT_INREG]](s32)
224    ; GFX6: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SITOFP]](s16)
225    ; GFX6: $vgpr0 = COPY [[ANYEXT]](s32)
226    ; GFX8-LABEL: name: test_sitofp_s16_to_s16
227    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
228    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
229    ; GFX8: [[SITOFP:%[0-9]+]]:_(s16) = G_SITOFP [[TRUNC]](s16)
230    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SITOFP]](s16)
231    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
232    %0:_(s32) = COPY $vgpr0
233    %1:_(s16) = G_TRUNC %0
234    %2:_(s16) = G_SITOFP %1
235    %3:_(s32) = G_ANYEXT %2
236    $vgpr0 = COPY %3
237...
238
239---
240name: test_sitofp_s16_to_s32
241body: |
242  bb.0:
243    liveins: $vgpr0
244
245    ; GFX6-LABEL: name: test_sitofp_s16_to_s32
246    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
247    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
248    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 16
249    ; GFX6: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
250    ; GFX6: $vgpr0 = COPY [[SITOFP]](s32)
251    ; GFX8-LABEL: name: test_sitofp_s16_to_s32
252    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
253    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
254    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 16
255    ; GFX8: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
256    ; GFX8: $vgpr0 = COPY [[SITOFP]](s32)
257    %0:_(s32) = COPY $vgpr0
258    %1:_(s16) = G_TRUNC %0
259    %2:_(s32) = G_SITOFP %1
260    $vgpr0 = COPY %2
261...
262
263---
264name: test_sitofp_s16_to_s64
265body: |
266  bb.0:
267    liveins: $vgpr0
268
269    ; GFX6-LABEL: name: test_sitofp_s16_to_s64
270    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
271    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
272    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 16
273    ; GFX6: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[SEXT_INREG]](s32)
274    ; GFX6: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
275    ; GFX8-LABEL: name: test_sitofp_s16_to_s64
276    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
277    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
278    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 16
279    ; GFX8: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[SEXT_INREG]](s32)
280    ; GFX8: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
281    %0:_(s32) = COPY $vgpr0
282    %1:_(s16) = G_TRUNC %0
283    %2:_(s64) = G_SITOFP %1
284    $vgpr0_vgpr1 = COPY %2
285...
286
287---
288name: test_sitofp_s8_to_s16
289body: |
290  bb.0:
291    liveins: $vgpr0
292
293    ; GFX6-LABEL: name: test_sitofp_s8_to_s16
294    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
295    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
296    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
297    ; GFX6: [[SITOFP:%[0-9]+]]:_(s16) = G_SITOFP [[SEXT_INREG]](s32)
298    ; GFX6: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SITOFP]](s16)
299    ; GFX6: $vgpr0 = COPY [[ANYEXT]](s32)
300    ; GFX8-LABEL: name: test_sitofp_s8_to_s16
301    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
302    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
303    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
304    ; GFX8: [[SITOFP:%[0-9]+]]:_(s16) = G_SITOFP [[SEXT_INREG]](s32)
305    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SITOFP]](s16)
306    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
307    %0:_(s32) = COPY $vgpr0
308    %1:_(s8) = G_TRUNC %0
309    %2:_(s16) = G_SITOFP %1
310    %3:_(s32) = G_ANYEXT %2
311    $vgpr0 = COPY %3
312...
313
314---
315name: test_sitofp_s8_to_s32
316body: |
317  bb.0:
318    liveins: $vgpr0
319
320    ; GFX6-LABEL: name: test_sitofp_s8_to_s32
321    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
322    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
323    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
324    ; GFX6: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
325    ; GFX6: $vgpr0 = COPY [[SITOFP]](s32)
326    ; GFX8-LABEL: name: test_sitofp_s8_to_s32
327    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
328    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
329    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
330    ; GFX8: [[SITOFP:%[0-9]+]]:_(s32) = G_SITOFP [[SEXT_INREG]](s32)
331    ; GFX8: $vgpr0 = COPY [[SITOFP]](s32)
332    %0:_(s32) = COPY $vgpr0
333    %1:_(s8) = G_TRUNC %0
334    %2:_(s32) = G_SITOFP %1
335    $vgpr0 = COPY %2
336...
337
338---
339name: test_sitofp_s8_to_s64
340body: |
341  bb.0:
342    liveins: $vgpr0
343
344    ; GFX6-LABEL: name: test_sitofp_s8_to_s64
345    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
346    ; GFX6: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
347    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
348    ; GFX6: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[SEXT_INREG]](s32)
349    ; GFX6: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
350    ; GFX8-LABEL: name: test_sitofp_s8_to_s64
351    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
352    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
353    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8
354    ; GFX8: [[SITOFP:%[0-9]+]]:_(s64) = G_SITOFP [[SEXT_INREG]](s32)
355    ; GFX8: $vgpr0_vgpr1 = COPY [[SITOFP]](s64)
356    %0:_(s32) = COPY $vgpr0
357    %1:_(s8) = G_TRUNC %0
358    %2:_(s64) = G_SITOFP %1
359    $vgpr0_vgpr1 = COPY %2
360...
361
362---
363name: test_sitofp_s1_to_s16
364body: |
365  bb.0:
366    liveins: $vgpr0
367
368    ; GFX6-LABEL: name: test_sitofp_s1_to_s16
369    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
370    ; GFX6: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
371    ; GFX6: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xHBC00
372    ; GFX6: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH0000
373    ; GFX6: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
374    ; GFX6: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
375    ; GFX6: $vgpr0 = COPY [[ANYEXT]](s32)
376    ; GFX8-LABEL: name: test_sitofp_s1_to_s16
377    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
378    ; GFX8: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
379    ; GFX8: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xHBC00
380    ; GFX8: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH0000
381    ; GFX8: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
382    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SELECT]](s16)
383    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
384    %0:_(s32) = COPY $vgpr0
385    %1:_(s1) = G_TRUNC %0
386    %2:_(s16) = G_SITOFP %1
387    %3:_(s32) = G_ANYEXT %2
388    $vgpr0 = COPY %3
389...
390
391---
392name: test_sitofp_s1_to_s32
393body: |
394  bb.0:
395    liveins: $vgpr0
396
397    ; GFX6-LABEL: name: test_sitofp_s1_to_s32
398    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
399    ; GFX6: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
400    ; GFX6: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float -1.000000e+00
401    ; GFX6: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00
402    ; GFX6: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
403    ; GFX6: $vgpr0 = COPY [[SELECT]](s32)
404    ; GFX8-LABEL: name: test_sitofp_s1_to_s32
405    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
406    ; GFX8: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
407    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float -1.000000e+00
408    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00
409    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
410    ; GFX8: $vgpr0 = COPY [[SELECT]](s32)
411    %0:_(s32) = COPY $vgpr0
412    %1:_(s1) = G_TRUNC %0
413    %2:_(s32) = G_SITOFP %1
414    $vgpr0 = COPY %2
415...
416
417---
418name: test_sitofp_s1_to_s64
419body: |
420  bb.0:
421    liveins: $vgpr0
422
423    ; GFX6-LABEL: name: test_sitofp_s1_to_s64
424    ; GFX6: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
425    ; GFX6: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
426    ; GFX6: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double -1.000000e+00
427    ; GFX6: [[C1:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
428    ; GFX6: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
429    ; GFX6: $vgpr0_vgpr1 = COPY [[SELECT]](s64)
430    ; GFX8-LABEL: name: test_sitofp_s1_to_s64
431    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
432    ; GFX8: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
433    ; GFX8: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double -1.000000e+00
434    ; GFX8: [[C1:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
435    ; GFX8: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC]](s1), [[C]], [[C1]]
436    ; GFX8: $vgpr0_vgpr1 = COPY [[SELECT]](s64)
437    %0:_(s32) = COPY $vgpr0
438    %1:_(s1) = G_TRUNC %0
439    %2:_(s64) = G_SITOFP %1
440    $vgpr0_vgpr1 = COPY %2
441...
442
443---
444name: test_sitofp_s33_to_s32
445body: |
446  bb.0:
447    liveins: $vgpr0_vgpr1
448
449    ; GFX6-LABEL: name: test_sitofp_s33_to_s32
450    ; GFX6: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
451    ; GFX6: [[COPY1:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
452    ; GFX6: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 33
453    ; GFX6: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
454    ; GFX6: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SEXT_INREG]], [[C]](s32)
455    ; GFX6: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG]](s64)
456    ; GFX6: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64)
457    ; GFX6: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]]
458    ; GFX6: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]]
459    ; GFX6: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32)
460    ; GFX6: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]]
461    ; GFX6: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
462    ; GFX6: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
463    ; GFX6: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[XOR]](s64)
464    ; GFX6: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 190
465    ; GFX6: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[CTLZ_ZERO_UNDEF]]
466    ; GFX6: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[XOR]](s64), [[C2]]
467    ; GFX6: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[SUB]], [[C1]]
468    ; GFX6: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
469    ; GFX6: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[XOR]], [[CTLZ_ZERO_UNDEF]](s32)
470    ; GFX6: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C4]]
471    ; GFX6: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1099511627775
472    ; GFX6: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C5]]
473    ; GFX6: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 40
474    ; GFX6: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[AND]], [[C6]](s32)
475    ; GFX6: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 23
476    ; GFX6: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C7]](s32)
477    ; GFX6: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
478    ; GFX6: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[TRUNC]]
479    ; GFX6: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 549755813888
480    ; GFX6: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[AND1]](s64), [[C8]]
481    ; GFX6: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND1]](s64), [[C8]]
482    ; GFX6: [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
483    ; GFX6: [[AND2:%[0-9]+]]:_(s32) = G_AND [[OR]], [[C9]]
484    ; GFX6: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[AND2]], [[C1]]
485    ; GFX6: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[C9]], [[SELECT1]]
486    ; GFX6: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[SELECT2]]
487    ; GFX6: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[ADD]]
488    ; GFX6: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[ASHR]](s64), [[C2]]
489    ; GFX6: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP3]](s1), [[FNEG]], [[ADD]]
490    ; GFX6: $vgpr0 = COPY [[SELECT3]](s32)
491    ; GFX8-LABEL: name: test_sitofp_s33_to_s32
492    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
493    ; GFX8: [[COPY1:%[0-9]+]]:_(s64) = COPY [[COPY]](s64)
494    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 33
495    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63
496    ; GFX8: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SEXT_INREG]], [[C]](s32)
497    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG]](s64)
498    ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64)
499    ; GFX8: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]]
500    ; GFX8: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]]
501    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32)
502    ; GFX8: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]]
503    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
504    ; GFX8: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
505    ; GFX8: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[XOR]](s64)
506    ; GFX8: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 190
507    ; GFX8: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[CTLZ_ZERO_UNDEF]]
508    ; GFX8: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[XOR]](s64), [[C2]]
509    ; GFX8: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s1), [[SUB]], [[C1]]
510    ; GFX8: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807
511    ; GFX8: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[XOR]], [[CTLZ_ZERO_UNDEF]](s32)
512    ; GFX8: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C4]]
513    ; GFX8: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1099511627775
514    ; GFX8: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C5]]
515    ; GFX8: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 40
516    ; GFX8: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[AND]], [[C6]](s32)
517    ; GFX8: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 23
518    ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C7]](s32)
519    ; GFX8: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[LSHR]](s64)
520    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[TRUNC]]
521    ; GFX8: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 549755813888
522    ; GFX8: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[AND1]](s64), [[C8]]
523    ; GFX8: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[AND1]](s64), [[C8]]
524    ; GFX8: [[C9:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
525    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[OR]], [[C9]]
526    ; GFX8: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP2]](s1), [[AND2]], [[C1]]
527    ; GFX8: [[SELECT2:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s1), [[C9]], [[SELECT1]]
528    ; GFX8: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[OR]], [[SELECT2]]
529    ; GFX8: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[ADD]]
530    ; GFX8: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[ASHR]](s64), [[C2]]
531    ; GFX8: [[SELECT3:%[0-9]+]]:_(s32) = G_SELECT [[ICMP3]](s1), [[FNEG]], [[ADD]]
532    ; GFX8: $vgpr0 = COPY [[SELECT3]](s32)
533    %0:_(s64) = COPY $vgpr0_vgpr1
534    %1:_(s33) = G_TRUNC %0
535    %2:_(s32) = G_SITOFP %1
536    $vgpr0 = COPY %2
537...
538