• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP]](<2 x s16>)
253    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32)
254    ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP1]](<2 x s16>)
255    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C1]](s32)
256    ; GFX8: [[COPY6:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32)
257    ; GFX8: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
258    ; GFX8: [[COPY8:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32)
259    ; GFX8: $vgpr0 = COPY [[COPY6]](s32)
260    ; GFX8: $vgpr1 = COPY [[COPY7]](s32)
261    ; GFX8: $vgpr2 = COPY [[COPY8]](s32)
262    %0:_(s32) = COPY $vgpr0
263    %1:_(s32) = COPY $vgpr1
264    %2:_(s32) = COPY $vgpr2
265    %3:_(s16) = G_TRUNC %0
266    %4:_(s16) = G_TRUNC %1
267    %5:_(s16) = G_TRUNC %2
268
269    %6:_(<3 x s16>) = G_BUILD_VECTOR %3, %4, %5
270    %7:_(<3 x s16>) = G_BSWAP %6
271    %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %7
272    %11:_(s32) = G_ANYEXT %8
273    %12:_(s32) = G_ANYEXT %9
274    %13:_(s32) = G_ANYEXT %10
275    $vgpr0 = COPY %11
276    $vgpr1 = COPY %12
277    $vgpr2 = COPY %13
278...
279
280---
281name: bswap_v4s16
282
283body: |
284  bb.0:
285    liveins: $vgpr0_vgpr1
286    ; GFX7-LABEL: name: bswap_v4s16
287    ; GFX7: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
288    ; GFX7: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
289    ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
290    ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
291    ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
292    ; GFX7: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
293    ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
294    ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
295    ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
296    ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C1]](s32)
297    ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32)
298    ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
299    ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
300    ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
301    ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
302    ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32)
303    ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
304    ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]]
305    ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
306    ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
307    ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY5]], [[COPY4]](s32)
308    ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32)
309    ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
310    ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
311    ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C2]]
312    ; GFX7: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY6]](s32)
313    ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32)
314    ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]]
315    ; GFX7: [[COPY8:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
316    ; GFX7: [[COPY9:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
317    ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY9]], [[COPY8]](s32)
318    ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32)
319    ; GFX7: [[COPY10:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
320    ; GFX7: [[COPY11:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
321    ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C2]]
322    ; GFX7: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY10]](s32)
323    ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR4]](s32)
324    ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]]
325    ; GFX7: [[COPY12:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
326    ; GFX7: [[COPY13:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
327    ; GFX7: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[COPY13]], [[COPY12]](s32)
328    ; GFX7: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[SHL3]](s32)
329    ; GFX7: [[COPY14:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
330    ; GFX7: [[COPY15:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
331    ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C2]]
332    ; GFX7: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[AND3]], [[COPY14]](s32)
333    ; GFX7: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR5]](s32)
334    ; GFX7: [[OR3:%[0-9]+]]:_(s16) = G_OR [[TRUNC7]], [[TRUNC6]]
335    ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16)
336    ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16)
337    ; GFX7: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)
338    ; GFX7: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL4]]
339    ; GFX7: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32)
340    ; GFX7: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16)
341    ; GFX7: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[OR3]](s16)
342    ; GFX7: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C]](s32)
343    ; GFX7: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL5]]
344    ; GFX7: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32)
345    ; GFX7: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>)
346    ; GFX7: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
347    ; GFX8-LABEL: name: bswap_v4s16
348    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
349    ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
350    ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV]]
351    ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV1]]
352    ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BSWAP]](<2 x s16>), [[BSWAP1]](<2 x s16>)
353    ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
354    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
355    %1:_(<4 x s16>) = G_BSWAP %0
356    $vgpr0_vgpr1 = COPY %1
357...
358
359---
360name: bswap_v2s32
361
362body: |
363  bb.0:
364    liveins: $vgpr0_vgpr1
365    ; GFX7-LABEL: name: bswap_v2s32
366    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
367    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
368    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
369    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
370    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32)
371    ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
372    ; GFX8-LABEL: name: bswap_v2s32
373    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
374    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
375    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
376    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
377    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32)
378    ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
379    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
380    %1:_(<2 x s32>) = G_BSWAP %0
381    $vgpr0_vgpr1 = COPY %1
382...
383
384---
385name: bswap_s64
386
387body: |
388  bb.0:
389    liveins: $vgpr0_vgpr1
390    ; GFX7-LABEL: name: bswap_s64
391    ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
392    ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
393    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
394    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
395    ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
396    ; GFX7: $vgpr0_vgpr1 = COPY [[MV]](s64)
397    ; GFX8-LABEL: name: bswap_s64
398    ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
399    ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
400    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]]
401    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]]
402    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
403    ; GFX8: $vgpr0_vgpr1 = COPY [[MV]](s64)
404    %0:_(s64) = COPY $vgpr0_vgpr1
405    %1:_(s64) = G_BSWAP %0
406    $vgpr0_vgpr1 = COPY %1
407...
408
409---
410name: bswap_v2s64
411
412body: |
413  bb.0:
414    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
415    ; GFX7-LABEL: name: bswap_v2s64
416    ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
417    ; GFX7: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
418    ; GFX7: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64)
419    ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]]
420    ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]]
421    ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
422    ; GFX7: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64)
423    ; GFX7: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]]
424    ; GFX7: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]]
425    ; GFX7: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32)
426    ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
427    ; GFX7: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
428    ; GFX8-LABEL: name: bswap_v2s64
429    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
430    ; GFX8: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
431    ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64)
432    ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]]
433    ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]]
434    ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32)
435    ; GFX8: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64)
436    ; GFX8: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]]
437    ; GFX8: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]]
438    ; GFX8: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32)
439    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
440    ; GFX8: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)
441    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
442    %1:_(<2 x s64>) = G_BSWAP %0
443    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
444...
445