xref: /llvm-project/llvm/test/CodeGen/AArch64/sve-insert-scalable-vector.ll (revision 53d1c21b526b9c5e2c5baa7339a1e3ff76617c1a)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s | FileCheck %s
3
4target triple = "aarch64-unknown-linux-gnu"
5
6; half vectors
7
8define <vscale x 4 x half> @insert_into_poison_nxv4f16_nxv2f16_0(<vscale x 2 x half> %a) #0 {
9; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_0:
10; CHECK:       // %bb.0:
11; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
12; CHECK-NEXT:    ret
13  %res = call <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half> poison, <vscale x 2 x half> %a, i64 0)
14  ret <vscale x 4 x half> %res
15}
16
17define <vscale x 4 x half> @insert_into_poison_nxv4f16_nxv2f16_2(<vscale x 2 x half> %a) #0 {
18; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_2:
19; CHECK:       // %bb.0:
20; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
21; CHECK-NEXT:    ret
22  %res = call <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half> poison, <vscale x 2 x half> %a, i64 2)
23  ret <vscale x 4 x half> %res
24}
25
26define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_0(<vscale x 2 x half> %a) #0 {
27; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_0:
28; CHECK:       // %bb.0:
29; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
30; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
31; CHECK-NEXT:    ret
32  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 0)
33  ret <vscale x 8 x half> %res
34}
35
36define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_2(<vscale x 2 x half> %a) #0 {
37; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_2:
38; CHECK:       // %bb.0:
39; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
40; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
41; CHECK-NEXT:    ret
42  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 2)
43  ret <vscale x 8 x half> %res
44}
45
46define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_4(<vscale x 2 x half> %a) #0 {
47; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_4:
48; CHECK:       // %bb.0:
49; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
50; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
51; CHECK-NEXT:    ret
52  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 4)
53  ret <vscale x 8 x half> %res
54}
55
56define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_6(<vscale x 2 x half> %a) #0 {
57; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_6:
58; CHECK:       // %bb.0:
59; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
60; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
61; CHECK-NEXT:    ret
62  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 6)
63  ret <vscale x 8 x half> %res
64}
65
66define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv4f16_0(<vscale x 4 x half> %a) #0 {
67; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_0:
68; CHECK:       // %bb.0:
69; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
70; CHECK-NEXT:    ret
71  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half> poison, <vscale x 4 x half> %a, i64 0)
72  ret <vscale x 8 x half> %res
73}
74
75define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv4f16_4(<vscale x 4 x half> %a) #0 {
76; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_4:
77; CHECK:       // %bb.0:
78; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
79; CHECK-NEXT:    ret
80  %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half> poison, <vscale x 4 x half> %a, i64 4)
81  ret <vscale x 8 x half> %res
82}
83
84; float vectors
85define <vscale x 4 x float> @insert_into_poison_nxv4f32_nxv2f32_0(<vscale x 2 x float> %a) #0 {
86; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_0:
87; CHECK:       // %bb.0:
88; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
89; CHECK-NEXT:    ret
90  %res = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float> poison, <vscale x 2 x float> %a, i64 0)
91  ret <vscale x 4 x float> %res
92}
93
94define <vscale x 4 x float> @insert_into_poison_nxv4f32_nxv2f32_2(<vscale x 2 x float> %a) #0 {
95; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_2:
96; CHECK:       // %bb.0:
97; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
98; CHECK-NEXT:    ret
99  %res = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float> poison, <vscale x 2 x float> %a, i64 2)
100  ret <vscale x 4 x float> %res
101}
102
103; bfloat vectors
104
105define <vscale x 4 x bfloat> @insert_into_poison_nxv4bf16_nxv2bf16_0(<vscale x 2 x bfloat> %a) #0 {
106; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_0:
107; CHECK:       // %bb.0:
108; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
109; CHECK-NEXT:    ret
110  %res = call <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 0)
111  ret <vscale x 4 x bfloat> %res
112}
113
114define <vscale x 4 x bfloat> @insert_into_poison_nxv4bf16_nxv2bf16_2(<vscale x 2 x bfloat> %a) #0 {
115; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_2:
116; CHECK:       // %bb.0:
117; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
118; CHECK-NEXT:    ret
119  %res = call <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 2)
120  ret <vscale x 4 x bfloat> %res
121}
122
123define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_0(<vscale x 2 x bfloat> %a) #0 {
124; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_0:
125; CHECK:       // %bb.0:
126; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
127; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
128; CHECK-NEXT:    ret
129  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 0)
130  ret <vscale x 8 x bfloat> %res
131}
132
133define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_2(<vscale x 2 x bfloat> %a) #0 {
134; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_2:
135; CHECK:       // %bb.0:
136; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
137; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
138; CHECK-NEXT:    ret
139  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 2)
140  ret <vscale x 8 x bfloat> %res
141}
142
143define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_4(<vscale x 2 x bfloat> %a) #0 {
144; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_4:
145; CHECK:       // %bb.0:
146; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
147; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
148; CHECK-NEXT:    ret
149  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 4)
150  ret <vscale x 8 x bfloat> %res
151}
152
153define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_6(<vscale x 2 x bfloat> %a) #0 {
154; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_6:
155; CHECK:       // %bb.0:
156; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
157; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
158; CHECK-NEXT:    ret
159  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 6)
160  ret <vscale x 8 x bfloat> %res
161}
162
163define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv4bf16_0(<vscale x 4 x bfloat> %a) #0 {
164; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_0:
165; CHECK:       // %bb.0:
166; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
167; CHECK-NEXT:    ret
168  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat> poison, <vscale x 4 x bfloat> %a, i64 0)
169  ret <vscale x 8 x bfloat> %res
170}
171
172define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv4bf16_4(<vscale x 4 x bfloat> %a) #0 {
173; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_4:
174; CHECK:       // %bb.0:
175; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
176; CHECK-NEXT:    ret
177  %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat> poison, <vscale x 4 x bfloat> %a, i64 4)
178  ret <vscale x 8 x bfloat> %res
179}
180
181attributes #0 = { "target-features"="+sve,+bf16" }
182
183declare <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half>, <vscale x 2 x half>, i64)
184declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half>, <vscale x 2 x half>, i64)
185declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half>, <vscale x 4 x half>, i64)
186
187declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float>, <vscale x 2 x float>, i64)
188
189declare <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat>, <vscale x 2 x bfloat>, i64)
190declare <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat>, <vscale x 2 x bfloat>, i64)
191declare <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat>, <vscale x 4 x bfloat>, i64)
192
193