Skip to content

Commit 523d70c

Browse files
committed
Test precommit
1 parent 8e157fd commit 523d70c

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s
3+
4+
;; Patterns that lower to concat_vectors where all incoming operands are the same.
5+
6+
define void @concat_i8q_256(<16 x i8> %data, ptr %addr) #0 {
7+
; CHECK-LABEL: concat_i8q_256:
8+
; CHECK: // %bb.0:
9+
; CHECK-NEXT: ptrue p0.b, vl16
10+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
11+
; CHECK-NEXT: splice z0.b, p0, z0.b, z0.b
12+
; CHECK-NEXT: str z0, [x0]
13+
; CHECK-NEXT: ret
14+
%splat = shufflevector <16 x i8> %data, <16 x i8> poison, <32 x i32> <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 14, i32 15,
15+
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 14, i32 15>
16+
store <32 x i8> %splat, ptr %addr, align 1
17+
ret void
18+
}
19+
20+
define void @concat_i16q_256(<8 x i16> %data, ptr %addr) #0 {
21+
; CHECK-LABEL: concat_i16q_256:
22+
; CHECK: // %bb.0:
23+
; CHECK-NEXT: ptrue p0.h, vl8
24+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
25+
; CHECK-NEXT: splice z0.h, p0, z0.h, z0.h
26+
; CHECK-NEXT: str z0, [x0]
27+
; CHECK-NEXT: ret
28+
%splat = shufflevector <8 x i16> poison, <8 x i16> %data, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
29+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
30+
store <16 x i16> %splat, ptr %addr, align 1
31+
ret void
32+
}
33+
34+
define void @concat_i32q_256(<4 x i32> %data, ptr %addr) #0 {
35+
; CHECK-LABEL: concat_i32q_256:
36+
; CHECK: // %bb.0:
37+
; CHECK-NEXT: ptrue p0.s, vl4
38+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
39+
; CHECK-NEXT: splice z0.s, p0, z0.s, z0.s
40+
; CHECK-NEXT: str z0, [x0]
41+
; CHECK-NEXT: ret
42+
%splat = shufflevector <4 x i32> %data, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3,
43+
i32 0, i32 1, i32 2, i32 3>
44+
store <8 x i32> %splat, ptr %addr, align 1
45+
ret void
46+
}
47+
48+
define void @concat_i64q_256(<2 x i64> %data, ptr %addr) #0 {
49+
; CHECK-LABEL: concat_i64q_256:
50+
; CHECK: // %bb.0:
51+
; CHECK-NEXT: ptrue p0.d, vl2
52+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
53+
; CHECK-NEXT: splice z0.d, p0, z0.d, z0.d
54+
; CHECK-NEXT: str z0, [x0]
55+
; CHECK-NEXT: ret
56+
%splat = shufflevector <2 x i64> poison, <2 x i64> %data, <4 x i32> <i32 2, i32 3,
57+
i32 2, i32 3>
58+
store <4 x i64> %splat, ptr %addr, align 1
59+
ret void
60+
}
61+
62+
define void @concat_f16q_256(<8 x half> %data, ptr %addr) #0 {
63+
; CHECK-LABEL: concat_f16q_256:
64+
; CHECK: // %bb.0:
65+
; CHECK-NEXT: ptrue p0.h, vl8
66+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
67+
; CHECK-NEXT: splice z0.h, p0, z0.h, z0.h
68+
; CHECK-NEXT: str z0, [x0]
69+
; CHECK-NEXT: ret
70+
%splat = shufflevector <8 x half> poison, <8 x half> %data, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
71+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
72+
store <16 x half> %splat, ptr %addr, align 1
73+
ret void
74+
}
75+
76+
define void @concat_bf16q_256(<8 x bfloat> %data, ptr %addr) #0 {
77+
; CHECK-LABEL: concat_bf16q_256:
78+
; CHECK: // %bb.0:
79+
; CHECK-NEXT: stp q0, q0, [x0]
80+
; CHECK-NEXT: ret
81+
%splat = shufflevector <8 x bfloat> poison, <8 x bfloat> %data, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15,
82+
i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
83+
store <16 x bfloat> %splat, ptr %addr, align 1
84+
ret void
85+
}
86+
87+
define void @concat_f32q_256(<4 x float> %data, ptr %addr) #0 {
88+
; CHECK-LABEL: concat_f32q_256:
89+
; CHECK: // %bb.0:
90+
; CHECK-NEXT: ptrue p0.s, vl4
91+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
92+
; CHECK-NEXT: splice z0.s, p0, z0.s, z0.s
93+
; CHECK-NEXT: str z0, [x0]
94+
; CHECK-NEXT: ret
95+
%splat = shufflevector <4 x float> %data, <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3,
96+
i32 0, i32 1, i32 2, i32 3>
97+
store <8 x float> %splat, ptr %addr, align 1
98+
ret void
99+
}
100+
101+
define void @concat_f64q_256(<2 x double> %data, ptr %addr) #0 {
102+
; CHECK-LABEL: concat_f64q_256:
103+
; CHECK: // %bb.0:
104+
; CHECK-NEXT: ptrue p0.d, vl2
105+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
106+
; CHECK-NEXT: splice z0.d, p0, z0.d, z0.d
107+
; CHECK-NEXT: str z0, [x0]
108+
; CHECK-NEXT: ret
109+
%splat = shufflevector <2 x double> poison, <2 x double> %data, <4 x i32> <i32 2, i32 3,
110+
i32 2, i32 3>
111+
store <4 x double> %splat, ptr %addr, align 1
112+
ret void
113+
}
114+
115+
;; Test a wider vector
116+
117+
define void @concat_i32q_512_with_256_vectors(<4 x i32> %data, ptr %addr) #0 {
118+
; CHECK-LABEL: concat_i32q_512_with_256_vectors:
119+
; CHECK: // %bb.0:
120+
; CHECK-NEXT: ptrue p0.s, vl4
121+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
122+
; CHECK-NEXT: splice z0.s, p0, z0.s, z0.s
123+
; CHECK-NEXT: str z0, [x0, #1, mul vl]
124+
; CHECK-NEXT: str z0, [x0]
125+
; CHECK-NEXT: ret
126+
%splat = shufflevector <4 x i32> %data, <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3,
127+
i32 0, i32 1, i32 2, i32 3,
128+
i32 0, i32 1, i32 2, i32 3,
129+
i32 0, i32 1, i32 2, i32 3>
130+
store <16 x i32> %splat, ptr %addr, align 1
131+
ret void
132+
}
133+
134+
define void @concat_i32q_512_with_512_vectors(<4 x i32> %data, ptr %addr) #1 {
135+
; CHECK-LABEL: concat_i32q_512_with_512_vectors:
136+
; CHECK: // %bb.0:
137+
; CHECK-NEXT: ptrue p0.s, vl4
138+
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
139+
; CHECK-NEXT: splice z0.s, p0, z0.s, z0.s
140+
; CHECK-NEXT: ptrue p0.s, vl8
141+
; CHECK-NEXT: splice z0.s, p0, z0.s, z0.s
142+
; CHECK-NEXT: str z0, [x0]
143+
; CHECK-NEXT: ret
144+
%splat = shufflevector <4 x i32> %data, <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3,
145+
i32 0, i32 1, i32 2, i32 3,
146+
i32 0, i32 1, i32 2, i32 3,
147+
i32 0, i32 1, i32 2, i32 3>
148+
store <16 x i32> %splat, ptr %addr, align 1
149+
ret void
150+
}
151+
152+
attributes #0 = { vscale_range(2,2) "target-features"="+sve,+bf16" }
153+
attributes #1 = { vscale_range(4,4) "target-features"="+sve,+bf16" }

0 commit comments

Comments
 (0)