1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
4
5---
6name: sext_s32_to_s64_s
7legalized: true
8
9body: |
10  bb.0:
11    liveins: $sgpr0
12    ; CHECK-LABEL: name: sext_s32_to_s64_s
13    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
14    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[COPY]](s32)
15    %0:_(s32) = COPY $sgpr0
16    %1:_(s64) = G_SEXT %0
17...
18
19---
20name: sext_s16_to_s64_s
21legalized: true
22
23body: |
24  bb.0:
25    liveins: $sgpr0
26    ; CHECK-LABEL: name: sext_s16_to_s64_s
27    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
28    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
29    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s16)
30    %0:_(s32) = COPY $sgpr0
31    %1:_(s16) = G_TRUNC %0
32    %2:_(s64) = G_SEXT %1
33...
34
35---
36name: sext_s32_to_s64_v
37legalized: true
38
39body: |
40  bb.0:
41    liveins: $vgpr0_vgpr1
42    ; CHECK-LABEL: name: sext_s32_to_s64_v
43    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
44    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
45    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31
46    ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[COPY1]], [[C]](s32)
47    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY1]](s32), [[ASHR]](s32)
48    %0:_(s32) = COPY $vgpr0
49    %1:_(s64) = G_SEXT %0
50...
51
52---
53name: sext_s1_to_s16_scc
54legalized: true
55
56body: |
57  bb.0:
58    liveins: $sgpr0, $sgpr1
59    ; CHECK-LABEL: name: sext_s1_to_s16_scc
60    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
61    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
62    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
63    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
64    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s16) = G_SEXT [[TRUNC]](s1)
65    %0:_(s32) = COPY $sgpr0
66    %1:_(s32) = COPY $sgpr1
67    %2:_(s1) = G_ICMP intpred(eq), %0, %1
68    %3:_(s16) = G_SEXT %2
69...
70
71---
72name: sext_s1_to_s32_scc
73legalized: true
74
75body: |
76  bb.0:
77    liveins: $sgpr0, $sgpr1
78    ; CHECK-LABEL: name: sext_s1_to_s32_scc
79    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
80    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
81    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
82    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
83    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s1)
84    %0:_(s32) = COPY $sgpr0
85    %1:_(s32) = COPY $sgpr1
86    %2:_(s1) = G_ICMP intpred(eq), %0, %1
87    %3:_(s32) = G_SEXT %2
88...
89
90---
91name: sext_s1_to_s64_scc
92legalized: true
93
94body: |
95  bb.0:
96    liveins: $sgpr0, $sgpr1
97    ; CHECK-LABEL: name: sext_s1_to_s64_scc
98    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
99    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
100    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
101    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
102    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s1)
103    %0:_(s32) = COPY $sgpr0
104    %1:_(s32) = COPY $sgpr1
105    %2:_(s1) = G_ICMP intpred(eq), %0, %1
106    %3:_(s64) = G_SEXT %2
107...
108
109---
110name: sext_s1_to_s16_vcc
111legalized: true
112
113body: |
114  bb.0:
115    liveins: $vgpr0, $vgpr1
116    ; CHECK-LABEL: name: sext_s1_to_s16_vcc
117    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
118    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
119    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
120    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1
121    ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0
122    ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]
123    ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[SELECT]](s32)
124    %0:_(s32) = COPY $vgpr0
125    %1:_(s32) = COPY $vgpr1
126    %2:_(s1) = G_ICMP intpred(eq), %0, %1
127    %3:_(s16) = G_SEXT %2
128...
129
130---
131name: sext_s1_to_s32_vcc
132legalized: true
133
134body: |
135  bb.0:
136    liveins: $vgpr0, $vgpr1
137    ; CHECK-LABEL: name: sext_s1_to_s32_vcc
138    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
139    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
140    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
141    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1
142    ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0
143    ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]
144    %0:_(s32) = COPY $vgpr0
145    %1:_(s32) = COPY $vgpr1
146    %2:_(s1) = G_ICMP intpred(eq), %0, %1
147    %3:_(s32) = G_SEXT %2
148...
149
150---
151name: sext_s1_to_s64_vcc
152legalized: true
153
154body: |
155  bb.0:
156    liveins: $vgpr0, $vgpr1
157    ; CHECK-LABEL: name: sext_s1_to_s64_vcc
158    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
159    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
160    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
161    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1
162    ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0
163    ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]
164    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[SELECT]](s32)
165    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[COPY2]](s32)
166    %0:_(s32) = COPY $vgpr0
167    %1:_(s32) = COPY $vgpr1
168    %2:_(s1) = G_ICMP intpred(eq), %0, %1
169    %3:_(s64) = G_SEXT %2
170...
171
172---
173name: sext_s1_to_s16_sgpr
174legalized: true
175
176body: |
177  bb.0:
178    liveins: $sgpr0
179    ; CHECK-LABEL: name: sext_s1_to_s16_sgpr
180    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
181    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
182    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s16) = G_SEXT [[TRUNC]](s1)
183    %0:_(s32) = COPY $sgpr0
184    %1:_(s1) = G_TRUNC %0
185    %2:_(s16) = G_SEXT %1
186...
187
188---
189name: sext_s1_to_s32_sgpr
190legalized: true
191
192body: |
193  bb.0:
194    liveins: $sgpr0
195    ; CHECK-LABEL: name: sext_s1_to_s32_sgpr
196    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
197    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
198    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s1)
199    %0:_(s32) = COPY $sgpr0
200    %1:_(s1) = G_TRUNC %0
201    %2:_(s32) = G_SEXT %1
202...
203
204---
205name: sext_s1_to_s64_sgpr
206legalized: true
207
208body: |
209  bb.0:
210    liveins: $sgpr0
211    ; CHECK-LABEL: name: sext_s1_to_s64_sgpr
212    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
213    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
214    ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s1)
215    %0:_(s32) = COPY $sgpr0
216    %1:_(s1) = G_TRUNC %0
217    %2:_(s64) = G_SEXT %1
218...
219
220---
221name: sext_s1_to_s16_vgpr
222legalized: true
223
224body: |
225  bb.0:
226    liveins: $vgpr0
227    ; CHECK-LABEL: name: sext_s1_to_s16_vgpr
228    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
229    ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
230    ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s16) = G_SEXT [[TRUNC]](s1)
231    %0:_(s32) = COPY $vgpr0
232    %1:_(s1) = G_TRUNC %0
233    %2:_(s16) = G_SEXT %1
234...
235
236---
237name: sext_s1_to_s32_vgpr
238legalized: true
239
240body: |
241  bb.0:
242    liveins: $vgpr0
243    ; CHECK-LABEL: name: sext_s1_to_s32_vgpr
244    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
245    ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
246    ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s1)
247    %0:_(s32) = COPY $vgpr0
248    %1:_(s1) = G_TRUNC %0
249    %2:_(s32) = G_SEXT %1
250...
251
252---
253name: sext_s1_to_s64_vgpr
254legalized: true
255
256body: |
257  bb.0:
258    liveins: $vgpr0
259    ; CHECK-LABEL: name: sext_s1_to_s64_vgpr
260    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
261    ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
262    ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s1)
263    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31
264    ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[SEXT]], [[C]](s32)
265    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32)
266    %0:_(s32) = COPY $vgpr0
267    %1:_(s1) = G_TRUNC %0
268    %2:_(s64) = G_SEXT %1
269...
270
271---
272name: sext_s16_to_s64_vgpr
273legalized: true
274
275body: |
276  bb.0:
277    liveins: $vgpr0
278    ; CHECK-LABEL: name: sext_s16_to_s64_vgpr
279    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
280    ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)
281    ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s16)
282    ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31
283    ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[SEXT]], [[C]](s32)
284    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32)
285    %0:_(s32) = COPY $vgpr0
286    %1:_(s16) = G_TRUNC %0
287    %2:_(s64) = G_SEXT %1
288...
289