1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -O0 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX7 %s
3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX8 %s
4
5---
6name: bswap_s8
7
8body: |
9  bb.0:
10    liveins: $vgpr0
11    ; GFX7-LABEL: name: bswap_s8
12    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
13    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
14    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
15    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
16    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY1]](s32)
17    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32)
18    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
19    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32)
20    ; GFX7: [[OR:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL]]
21    ; GFX7: $vgpr0 = COPY [[OR]](s32)
22    ; GFX8-LABEL: name: bswap_s8
23    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
24    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
25    ; GFX8: [[BSWAP:%[0-9]+]]:_(s16) = G_BSWAP [[TRUNC]]
26    ; GFX8: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8
27    ; GFX8: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[BSWAP]], [[C]](s16)
28    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16)
29    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
30    %0:_(s32) = COPY $vgpr0
31    %1:_(s8) = G_TRUNC %0
32    %2:_(s8) = G_BSWAP %1
33    %3:_(s32) = G_ANYEXT %2
34    $vgpr0 = COPY %3
35...
36
37---
38name: bswap_s16
39
40body: |
41  bb.0:
42    liveins: $vgpr0
43    ; GFX7-LABEL: name: bswap_s16
44    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
45    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
46    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
47    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
48    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
49    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
50    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
51    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32)
52    ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
53    ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]]
54    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
55    ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32)
56    ; GFX8-LABEL: name: bswap_s16
57    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
58    ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
59    ; GFX8: [[BSWAP:%[0-9]+]]:_(s16) = G_BSWAP [[TRUNC]]
60    ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[BSWAP]](s16)
61    ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32)
62    %0:_(s32) = COPY $vgpr0
63    %1:_(s16) = G_TRUNC %0
64    %2:_(s16) = G_BSWAP %1
65    %3:_(s32) = G_ANYEXT %2
66    $vgpr0 = COPY %3
67...
68
69---
70name: bswap_s24
71
72body: |
73  bb.0:
74    liveins: $vgpr0
75    ; GFX7-LABEL: name: bswap_s24
76    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
77    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
78    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215
79    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
80    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY1]](s32)
81    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32)
82    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
83    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32)
84    ; GFX7: [[OR:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL]]
85    ; GFX7: $vgpr0 = COPY [[OR]](s32)
86    ; GFX8-LABEL: name: bswap_s24
87    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
88    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY]]
89    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
90    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BSWAP]], [[C]](s32)
91    ; GFX8: $vgpr0 = COPY [[LSHR]](s32)
92    %0:_(s32) = COPY $vgpr0
93    %1:_(s24) = G_TRUNC %0
94    %2:_(s24) = G_BSWAP %1
95    %3:_(s32) = G_ANYEXT %2
96    $vgpr0 = COPY %3
97...
98
99---
100name: bswap_s32
101
102body: |
103  bb.0:
104    liveins: $vgpr0
105    ; GFX7-LABEL: name: bswap_s32
106    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
107    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY]]
108    ; GFX7: $vgpr0 = COPY [[BSWAP]](s32)
109    ; GFX8-LABEL: name: bswap_s32
110    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
111    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY]]
112    ; GFX8: $vgpr0 = COPY [[BSWAP]](s32)
113    %0:_(s32) = COPY $vgpr0
114    %1:_(s32) = G_BSWAP %0
115    $vgpr0 = COPY %1
116...
117
118---
119name: bswap_v2s16
120
121body: |
122  bb.0:
123    liveins: $vgpr0
124    ; GFX7-LABEL: name: bswap_v2s16
125    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
126    ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
127    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
128    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
129    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
130    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[BITCAST]], [[C1]](s32)
131    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
132    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
133    ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
134    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C2]]
135    ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32)
136    ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
137    ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]]
138    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
139    ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LSHR]], [[COPY2]](s32)
140    ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
141    ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
142    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C2]]
143    ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY3]](s32)
144    ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
145    ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]]
146    ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
147    ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
148    ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)
149    ; GFX7: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]]
150    ; GFX7: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)
151    ; GFX7: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
152    ; GFX8-LABEL: name: bswap_v2s16
153    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
154    ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[COPY]]
155    ; GFX8: $vgpr0 = COPY [[BSWAP]](<2 x s16>)
156    %0:_(<2 x s16>) = COPY $vgpr0
157    %1:_(<2 x s16>) = G_BSWAP %0
158    $vgpr0 = COPY %1
159...
160
161---
162name: bswap_v3s16
163
164body: |
165  bb.0:
166    liveins: $vgpr0, $vgpr1, $vgpr2
167    ; GFX7-LABEL: name: bswap_v3s16
168    ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
169    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
170    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
171    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
172    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
173    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
174    ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32)
175    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
176    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]]
177    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY3]](s32)
178    ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
179    ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]]
180    ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C]](s32)
181    ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[COPY4]](s32)
182    ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
183    ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[C]](s32)
184    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
185    ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY5]](s32)
186    ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
187    ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]]
188    ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C]](s32)
189    ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[COPY6]](s32)
190    ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32)
191    ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[C]](s32)
192    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
193    ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY7]](s32)
194    ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
195    ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]]
196    ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
197    ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[OR1]](s16)
198    ; GFX7: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[OR2]](s16)
199    ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32)
200    ; GFX7: $vgpr1 = COPY [[ANYEXT1]](s32)
201    ; GFX7: $vgpr2 = COPY [[ANYEXT2]](s32)
202    ; GFX8-LABEL: name: bswap_v3s16
203    ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
204    ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
205    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
206    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
207    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
208    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
209    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
210    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
211    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
212    ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
213    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
214    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
215    ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32)
216    ; GFX8: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
217    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
218    ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[BITCAST]]
219    ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[BITCAST1]]
220    ; GFX8: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP]](<2 x s16>)
221    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32)
222    ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP1]](<2 x s16>)
223    ; GFX8: $vgpr0 = COPY [[BITCAST2]](s32)
224    ; GFX8: $vgpr1 = COPY [[LSHR]](s32)
225    ; GFX8: $vgpr2 = COPY [[BITCAST3]](s32)
226    %0:_(s32) = COPY $vgpr0
227    %1:_(s32) = COPY $vgpr1
228    %2:_(s32) = COPY $vgpr2
229    %3:_(s16) = G_TRUNC %0
230    %4:_(s16) = G_TRUNC %1
231    %5:_(s16) = G_TRUNC %2
232
233    %6:_(<3 x s16>) = G_BUILD_VECTOR %3, %4, %5
234    %7:_(<3 x s16>) = G_BSWAP %6
235    %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %7
236    %11:_(s32) = G_ANYEXT %8
237    %12:_(s32) = G_ANYEXT %9
238    %13:_(s32) = G_ANYEXT %10
239    $vgpr0 = COPY %11
240    $vgpr1 = COPY %12
241    $vgpr2 = COPY %13
242...
243
244---
245name: bswap_v4s16
246
247body: |
248  bb.0:
249    liveins: $vgpr0_vgpr1
250    ; GFX7-LABEL: name: bswap_v4s16
251    ; GFX7: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
252    ; GFX7: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
253    ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
254    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
255    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
256    ; GFX7: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
257    ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
258    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
259    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[BITCAST]], [[C1]](s32)
260    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
261    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
262    ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
263    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C2]]
264    ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY1]](s32)
265    ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
266    ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]]
267    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
268    ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LSHR]], [[COPY2]](s32)
269    ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
270    ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
271    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C2]]
272    ; GFX7: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY3]](s32)
273    ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32)
274    ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]]
275    ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
276    ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[BITCAST1]], [[COPY4]](s32)
277    ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32)
278    ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
279    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C2]]
280    ; GFX7: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY5]](s32)
281    ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR4]](s32)
282    ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]]
283    ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
284    ; GFX7: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[LSHR1]], [[COPY6]](s32)
285    ; GFX7: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[SHL3]](s32)
286    ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
287    ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C2]]
288    ; GFX7: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[AND3]], [[COPY7]](s32)
289    ; GFX7: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR5]](s32)
290    ; GFX7: [[OR3:%[0-9]+]]:_(s16) = G_OR [[TRUNC7]], [[TRUNC6]]
291    ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
292    ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
293    ; GFX7: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)
294    ; GFX7: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL4]]
295    ; GFX7: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32)
296    ; GFX7: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16)
297    ; GFX7: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[OR3]](s16)
298    ; GFX7: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C]](s32)
299    ; GFX7: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL5]]
300    ; GFX7: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32)
301    ; GFX7: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>)
302    ; GFX7: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
303    ; GFX8-LABEL: name: bswap_v4s16
304    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
305    ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
306    ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV]]
307    ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV1]]
308    ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BSWAP]](<2 x s16>), [[BSWAP1]](<2 x s16>)
309    ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
310    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
311    %1:_(<4 x s16>) = G_BSWAP %0
312    $vgpr0_vgpr1 = COPY %1
313...
314
315---
316name: bswap_v2s32
317
318body: |
319  bb.0:
320    liveins: $vgpr0_vgpr1
321    ; GFX7-LABEL: name: bswap_v2s32
322    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
323    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
324    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
325    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
326    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32)
327    ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
328    ; GFX8-LABEL: name: bswap_v2s32
329    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
330    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
331    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
332    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
333    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32)
334    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
335    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
336    %1:_(<2 x s32>) = G_BSWAP %0
337    $vgpr0_vgpr1 = COPY %1
338...
339
340---
341name: bswap_s64
342
343body: |
344  bb.0:
345    liveins: $vgpr0_vgpr1
346    ; GFX7-LABEL: name: bswap_s64
347    ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
348    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
349    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
350    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
351    ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
352    ; GFX7: $vgpr0_vgpr1 = COPY [[MV]](s64)
353    ; GFX8-LABEL: name: bswap_s64
354    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
355    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
356    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
357    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
358    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
359    ; GFX8: $vgpr0_vgpr1 = COPY [[MV]](s64)
360    %0:_(s64) = COPY $vgpr0_vgpr1
361    %1:_(s64) = G_BSWAP %0
362    $vgpr0_vgpr1 = COPY %1
363...
364
365---
366name: bswap_v2s64
367
368body: |
369  bb.0:
370    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
371    ; GFX7-LABEL: name: bswap_v2s64
372    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
373    ; GFX7: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
374    ; GFX7: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64)
375    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]]
376    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]]
377    ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
378    ; GFX7: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64)
379    ; GFX7: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]]
380    ; GFX7: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]]
381    ; GFX7: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32)
382    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
383    ; GFX7: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
384    ; GFX8-LABEL: name: bswap_v2s64
385    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
386    ; GFX8: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
387    ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64)
388    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]]
389    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]]
390    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
391    ; GFX8: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64)
392    ; GFX8: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]]
393    ; GFX8: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]]
394    ; GFX8: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32)
395    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
396    ; GFX8: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
397    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
398    %1:_(<2 x s64>) = G_BSWAP %0
399    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
400...
401