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