Skip to content

Commit 34b55e1

Browse files
authored
[LoongArch] Precommit tests for 128-to-256-bit vector insertion and 256-to-128-bit subvector extraction (NFC) (#146299)
1 parent c25a5e0 commit 34b55e1

File tree

2 files changed

+1708
-0
lines changed

2 files changed

+1708
-0
lines changed
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
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 | FileCheck %s
3+
4+
define <32 x i8> @concat_poison_v32i8_1(<16 x i8> %a) {
5+
; CHECK-LABEL: concat_poison_v32i8_1:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
8+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
9+
; CHECK-NEXT: ret
10+
entry:
11+
%1 = shufflevector <16 x i8> %a, <16 x i8> poison,
12+
<32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
13+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
14+
i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,
15+
i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
16+
ret <32 x i8> %1
17+
}
18+
19+
define <32 x i8> @concat_poison_v32i8_2(<16 x i8> %a, <16 x i8> %b) {
20+
; CHECK-LABEL: concat_poison_v32i8_2:
21+
; CHECK: # %bb.0: # %entry
22+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
23+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
24+
; CHECK-NEXT: ret
25+
entry:
26+
%1 = shufflevector <16 x i8> %b, <16 x i8> poison,
27+
<32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
28+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
29+
i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,
30+
i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
31+
ret <32 x i8> %1
32+
}
33+
34+
define <32 x i8> @concat_vectors_v32i8(<16 x i8> %a, <16 x i8> %b) {
35+
; CHECK-LABEL: concat_vectors_v32i8:
36+
; CHECK: # %bb.0: # %entry
37+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
38+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
39+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
40+
; CHECK-NEXT: ret
41+
entry:
42+
%1 = shufflevector <16 x i8> %a, <16 x i8> %b,
43+
<32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
44+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
45+
i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23,
46+
i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
47+
ret <32 x i8> %1
48+
}
49+
50+
define <16 x i16> @concat_poison_v16i16_1(<8 x i16> %a) {
51+
; CHECK-LABEL: concat_poison_v16i16_1:
52+
; CHECK: # %bb.0: # %entry
53+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
54+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
55+
; CHECK-NEXT: ret
56+
entry:
57+
%1 = shufflevector <8 x i16> %a, <8 x i16> poison,
58+
<16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
59+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
60+
ret <16 x i16> %1
61+
}
62+
63+
define <16 x i16> @concat_poison_v16i16_2(<8 x i16> %a, <8 x i16> %b) {
64+
; CHECK-LABEL: concat_poison_v16i16_2:
65+
; CHECK: # %bb.0: # %entry
66+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
67+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
68+
; CHECK-NEXT: ret
69+
entry:
70+
%1 = shufflevector <8 x i16> %b, <8 x i16> poison,
71+
<16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
72+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
73+
ret <16 x i16> %1
74+
}
75+
76+
define <16 x i16> @concat_vectors_v16i16(<8 x i16> %a, <8 x i16> %b) {
77+
; CHECK-LABEL: concat_vectors_v16i16:
78+
; CHECK: # %bb.0: # %entry
79+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
80+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
81+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
82+
; CHECK-NEXT: ret
83+
entry:
84+
%1 = shufflevector <8 x i16> %a, <8 x i16> %b,
85+
<16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,
86+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
87+
ret <16 x i16> %1
88+
}
89+
90+
define <8 x i32> @concat_poison_v8i32_1(<4 x i32> %a) {
91+
; CHECK-LABEL: concat_poison_v8i32_1:
92+
; CHECK: # %bb.0: # %entry
93+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
94+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
95+
; CHECK-NEXT: ret
96+
entry:
97+
%1 = shufflevector <4 x i32> %a, <4 x i32> poison,
98+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
99+
ret <8 x i32> %1
100+
}
101+
102+
define <8 x i32> @concat_poison_v8i32_2(<4 x i32> %a, <4 x i32> %b) {
103+
; CHECK-LABEL: concat_poison_v8i32_2:
104+
; CHECK: # %bb.0: # %entry
105+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
106+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
107+
; CHECK-NEXT: ret
108+
entry:
109+
%1 = shufflevector <4 x i32> %b, <4 x i32> poison,
110+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
111+
ret <8 x i32> %1
112+
}
113+
114+
define <8 x i32> @concat_vectors_v8i32(<4 x i32> %a, <4 x i32> %b) {
115+
; CHECK-LABEL: concat_vectors_v8i32:
116+
; CHECK: # %bb.0: # %entry
117+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
118+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
119+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
120+
; CHECK-NEXT: ret
121+
entry:
122+
%1 = shufflevector <4 x i32> %a, <4 x i32> %b,
123+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
124+
ret <8 x i32> %1
125+
}
126+
127+
define <8 x float> @concat_poison_v8f32_1(<4 x float> %a) {
128+
; CHECK-LABEL: concat_poison_v8f32_1:
129+
; CHECK: # %bb.0: # %entry
130+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
131+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
132+
; CHECK-NEXT: ret
133+
entry:
134+
%1 = shufflevector <4 x float> %a, <4 x float> poison,
135+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
136+
ret <8 x float> %1
137+
}
138+
139+
define <8 x float> @concat_poison_v8f32_2(<4 x float> %a, <4 x float> %b) {
140+
; CHECK-LABEL: concat_poison_v8f32_2:
141+
; CHECK: # %bb.0: # %entry
142+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
143+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
144+
; CHECK-NEXT: ret
145+
entry:
146+
%1 = shufflevector <4 x float> %b, <4 x float> poison,
147+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
148+
ret <8 x float> %1
149+
}
150+
151+
define <8 x float> @concat_vectors_v8f32(<4 x float> %a, <4 x float> %b) {
152+
; CHECK-LABEL: concat_vectors_v8f32:
153+
; CHECK: # %bb.0: # %entry
154+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
155+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
156+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
157+
; CHECK-NEXT: ret
158+
entry:
159+
%1 = shufflevector <4 x float> %a, <4 x float> %b,
160+
<8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
161+
ret <8 x float> %1
162+
}
163+
164+
define <4 x i64> @concat_poison_v8i64_1(<2 x i64> %a) {
165+
; CHECK-LABEL: concat_poison_v8i64_1:
166+
; CHECK: # %bb.0: # %entry
167+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
168+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
169+
; CHECK-NEXT: ret
170+
entry:
171+
%1 = shufflevector <2 x i64> %a, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
172+
ret <4 x i64> %1
173+
}
174+
175+
define <4 x i64> @concat_poison_v8i64_2(<2 x i64> %a, <2 x i64> %b) {
176+
; CHECK-LABEL: concat_poison_v8i64_2:
177+
; CHECK: # %bb.0: # %entry
178+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
179+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
180+
; CHECK-NEXT: ret
181+
entry:
182+
%1 = shufflevector <2 x i64> %b, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
183+
ret <4 x i64> %1
184+
}
185+
186+
define <4 x i64> @concat_vectors_v8i64(<2 x i64> %a, <2 x i64> %b) {
187+
; CHECK-LABEL: concat_vectors_v8i64:
188+
; CHECK: # %bb.0: # %entry
189+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
190+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
191+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
192+
; CHECK-NEXT: ret
193+
entry:
194+
%1 = shufflevector <2 x i64> %a, <2 x i64> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
195+
ret <4 x i64> %1
196+
}
197+
198+
define <4 x double> @concat_poison_v8f64_1(<2 x double> %a) {
199+
; CHECK-LABEL: concat_poison_v8f64_1:
200+
; CHECK: # %bb.0: # %entry
201+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
202+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
203+
; CHECK-NEXT: ret
204+
entry:
205+
%1 = shufflevector <2 x double> %a, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
206+
ret <4 x double> %1
207+
}
208+
209+
define <4 x double> @concat_poison_v8f64_2(<2 x double> %a, <2 x double> %b) {
210+
; CHECK-LABEL: concat_poison_v8f64_2:
211+
; CHECK: # %bb.0: # %entry
212+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
213+
; CHECK-NEXT: xvpermi.q $xr0, $xr0, 2
214+
; CHECK-NEXT: ret
215+
entry:
216+
%1 = shufflevector <2 x double> %b, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
217+
ret <4 x double> %1
218+
}
219+
220+
define <4 x double> @concat_vectors_v8f64(<2 x double> %a, <2 x double> %b) {
221+
; CHECK-LABEL: concat_vectors_v8f64:
222+
; CHECK: # %bb.0: # %entry
223+
; CHECK-NEXT: # kill: def $vr1 killed $vr1 def $xr1
224+
; CHECK-NEXT: # kill: def $vr0 killed $vr0 def $xr0
225+
; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
226+
; CHECK-NEXT: ret
227+
entry:
228+
%1 = shufflevector <2 x double> %a, <2 x double> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
229+
ret <4 x double> %1
230+
}

0 commit comments

Comments
 (0)