Skip to content

Commit 042d503

Browse files
committed
Pre-commit for lowering shuffle as lane permute and shuffle
1 parent 64dcf78 commit 042d503

File tree

1 file changed

+313
-0
lines changed

1 file changed

+313
-0
lines changed
Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx %s -o - | FileCheck %s
3+
4+
define <32 x i8> @shuffle_v32i8(<32 x i8> %a) {
5+
; CHECK-LABEL: shuffle_v32i8:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: addi.d $sp, $sp, -64
8+
; CHECK-NEXT: .cfi_def_cfa_offset 64
9+
; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
10+
; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
11+
; CHECK-NEXT: .cfi_offset 1, -8
12+
; CHECK-NEXT: .cfi_offset 22, -16
13+
; CHECK-NEXT: addi.d $fp, $sp, 64
14+
; CHECK-NEXT: .cfi_def_cfa 22, 0
15+
; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
16+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
17+
; CHECK-NEXT: xvst $xr0, $sp, 0
18+
; CHECK-NEXT: ld.b $a1, $sp, 16
19+
; CHECK-NEXT: ld.b $a0, $sp, 17
20+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 0
21+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a0, 1
22+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 0
23+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 2
24+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 1
25+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 3
26+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 2
27+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 4
28+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 3
29+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 5
30+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 4
31+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 6
32+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 5
33+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 7
34+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 6
35+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 8
36+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 7
37+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 9
38+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 8
39+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 10
40+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 9
41+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 11
42+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 10
43+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 12
44+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 11
45+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 13
46+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 12
47+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 14
48+
; CHECK-NEXT: vpickve2gr.b $a2, $vr1, 13
49+
; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 15
50+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
51+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
52+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 0
53+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
54+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
55+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
56+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 1
57+
; CHECK-NEXT: ld.b $a0, $sp, 18
58+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
59+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
60+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
61+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 2
62+
; CHECK-NEXT: ld.b $a0, $sp, 19
63+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
64+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
65+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
66+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 3
67+
; CHECK-NEXT: ld.b $a0, $sp, 20
68+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
69+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
70+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
71+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 4
72+
; CHECK-NEXT: ld.b $a0, $sp, 21
73+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
74+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
75+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
76+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 5
77+
; CHECK-NEXT: ld.b $a0, $sp, 22
78+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
79+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
80+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
81+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 6
82+
; CHECK-NEXT: ld.b $a0, $sp, 23
83+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
84+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
85+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
86+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 7
87+
; CHECK-NEXT: ld.b $a0, $sp, 24
88+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
89+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
90+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
91+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 8
92+
; CHECK-NEXT: ld.b $a0, $sp, 25
93+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
94+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
95+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
96+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 9
97+
; CHECK-NEXT: ld.b $a0, $sp, 26
98+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
99+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
100+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
101+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 10
102+
; CHECK-NEXT: ld.b $a0, $sp, 27
103+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
104+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
105+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
106+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 11
107+
; CHECK-NEXT: ld.b $a0, $sp, 28
108+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
109+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
110+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
111+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 12
112+
; CHECK-NEXT: ld.b $a0, $sp, 29
113+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
114+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
115+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
116+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 13
117+
; CHECK-NEXT: ld.b $a0, $sp, 30
118+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
119+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
120+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
121+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 14
122+
; CHECK-NEXT: ld.b $a0, $sp, 31
123+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
124+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
125+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
126+
; CHECK-NEXT: vinsgr2vr.b $vr1, $a0, 15
127+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
128+
; CHECK-NEXT: addi.d $sp, $fp, -64
129+
; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
130+
; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
131+
; CHECK-NEXT: addi.d $sp, $sp, 64
132+
; CHECK-NEXT: ret
133+
%shuffle = shufflevector <32 x i8> %a, <32 x i8> poison, <32 x i32> <i32 16, i32 17, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
134+
ret <32 x i8> %shuffle
135+
}
136+
137+
138+
define <16 x i16> @shuffle_v16i16(<16 x i16> %a) {
139+
; CHECK-LABEL: shuffle_v16i16:
140+
; CHECK: # %bb.0:
141+
; CHECK-NEXT: addi.d $sp, $sp, -64
142+
; CHECK-NEXT: .cfi_def_cfa_offset 64
143+
; CHECK-NEXT: st.d $ra, $sp, 56 # 8-byte Folded Spill
144+
; CHECK-NEXT: st.d $fp, $sp, 48 # 8-byte Folded Spill
145+
; CHECK-NEXT: .cfi_offset 1, -8
146+
; CHECK-NEXT: .cfi_offset 22, -16
147+
; CHECK-NEXT: addi.d $fp, $sp, 64
148+
; CHECK-NEXT: .cfi_def_cfa 22, 0
149+
; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
150+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
151+
; CHECK-NEXT: xvst $xr0, $sp, 0
152+
; CHECK-NEXT: ld.h $a0, $sp, 16
153+
; CHECK-NEXT: ld.h $a1, $sp, 18
154+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a0, 0
155+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a1, 1
156+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 0
157+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 2
158+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 1
159+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 3
160+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 2
161+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 4
162+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 3
163+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 5
164+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 4
165+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 6
166+
; CHECK-NEXT: vpickve2gr.h $a2, $vr1, 5
167+
; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 7
168+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
169+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
170+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 0
171+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
172+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
173+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
174+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a1, 1
175+
; CHECK-NEXT: ld.h $a0, $sp, 20
176+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
177+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
178+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
179+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 2
180+
; CHECK-NEXT: ld.h $a0, $sp, 22
181+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
182+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
183+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
184+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 3
185+
; CHECK-NEXT: ld.h $a0, $sp, 24
186+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
187+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
188+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
189+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 4
190+
; CHECK-NEXT: ld.h $a0, $sp, 26
191+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
192+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
193+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
194+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 5
195+
; CHECK-NEXT: ld.h $a0, $sp, 28
196+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
197+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
198+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
199+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 6
200+
; CHECK-NEXT: ld.h $a0, $sp, 30
201+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
202+
; CHECK-NEXT: xvori.b $xr1, $xr0, 0
203+
; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1
204+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 7
205+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
206+
; CHECK-NEXT: addi.d $sp, $fp, -64
207+
; CHECK-NEXT: ld.d $fp, $sp, 48 # 8-byte Folded Reload
208+
; CHECK-NEXT: ld.d $ra, $sp, 56 # 8-byte Folded Reload
209+
; CHECK-NEXT: addi.d $sp, $sp, 64
210+
; CHECK-NEXT: ret
211+
%shuffle = shufflevector <16 x i16> %a, <16 x i16> poison, <16 x i32> <i32 8, i32 9, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
212+
ret <16 x i16> %shuffle
213+
}
214+
215+
define <8 x i32> @shuffle_v8i32(<8 x i32> %a) {
216+
; CHECK-LABEL: shuffle_v8i32:
217+
; CHECK: # %bb.0:
218+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 4
219+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 0
220+
; CHECK-NEXT: xvpickve2gr.w $a1, $xr0, 5
221+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a1, 1
222+
; CHECK-NEXT: xvpickve2gr.w $a2, $xr0, 0
223+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a2, 2
224+
; CHECK-NEXT: xvpickve2gr.w $a2, $xr0, 1
225+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a2, 3
226+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 4
227+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a1, 5
228+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 6
229+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 6
230+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7
231+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 7
232+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
233+
; CHECK-NEXT: ret
234+
%shuffle = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 4, i32 5, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>
235+
ret <8 x i32> %shuffle
236+
}
237+
238+
define <4 x i64> @shuffle_v4i64(<4 x i64> %a) {
239+
; CHECK-LABEL: shuffle_v4i64:
240+
; CHECK: # %bb.0:
241+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
242+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 0
243+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
244+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 1
245+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2
246+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 2
247+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
248+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 3
249+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
250+
; CHECK-NEXT: ret
251+
%shuffle = shufflevector <4 x i64> %a, <4 x i64> poison, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
252+
ret <4 x i64> %shuffle
253+
}
254+
255+
define <8 x float> @shuffle_v8f32(<8 x float> %a) {
256+
; CHECK-LABEL: shuffle_v8f32:
257+
; CHECK: # %bb.0:
258+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 4
259+
; CHECK-NEXT: movgr2fr.w $fa1, $a0
260+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 5
261+
; CHECK-NEXT: movgr2fr.w $fa2, $a0
262+
; CHECK-NEXT: movfr2gr.s $a0, $fa1
263+
; CHECK-NEXT: movfr2gr.s $a1, $fa2
264+
; CHECK-NEXT: xvpickve2gr.w $a2, $xr0, 0
265+
; CHECK-NEXT: movgr2fr.w $fa1, $a2
266+
; CHECK-NEXT: xvpickve2gr.w $a2, $xr0, 1
267+
; CHECK-NEXT: movgr2fr.w $fa2, $a2
268+
; CHECK-NEXT: movfr2gr.s $a2, $fa1
269+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 0
270+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a1, 1
271+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a2, 2
272+
; CHECK-NEXT: movfr2gr.s $a2, $fa2
273+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a2, 3
274+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 4
275+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 6
276+
; CHECK-NEXT: movgr2fr.w $fa2, $a0
277+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a1, 5
278+
; CHECK-NEXT: movfr2gr.s $a0, $fa2
279+
; CHECK-NEXT: xvpickve2gr.w $a1, $xr0, 7
280+
; CHECK-NEXT: movgr2fr.w $fa0, $a1
281+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 6
282+
; CHECK-NEXT: movfr2gr.s $a0, $fa0
283+
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 7
284+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
285+
; CHECK-NEXT: ret
286+
%shuffle = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 4, i32 5, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>
287+
ret <8 x float> %shuffle
288+
}
289+
290+
define <4 x double> @shuffle_v4f64(<4 x double> %a, <4 x double> %b) {
291+
; CHECK-LABEL: shuffle_v4f64:
292+
; CHECK: # %bb.0:
293+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
294+
; CHECK-NEXT: movgr2fr.d $fa1, $a0
295+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
296+
; CHECK-NEXT: movgr2fr.d $fa2, $a0
297+
; CHECK-NEXT: movfr2gr.d $a0, $fa1
298+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 0
299+
; CHECK-NEXT: movfr2gr.d $a0, $fa2
300+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 1
301+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2
302+
; CHECK-NEXT: movgr2fr.d $fa2, $a0
303+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
304+
; CHECK-NEXT: movgr2fr.d $fa0, $a0
305+
; CHECK-NEXT: movfr2gr.d $a0, $fa2
306+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 2
307+
; CHECK-NEXT: movfr2gr.d $a0, $fa0
308+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 3
309+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
310+
; CHECK-NEXT: ret
311+
%shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 1, i32 2, i32 0>
312+
ret <4 x double> %shuffle
313+
}

0 commit comments

Comments
 (0)