1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
4 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_1(i32 %index) {
5 ; CHECK-LABEL: vidup_v4i32_1:
7 ; CHECK-NEXT: vidup.u32 q0, r0, #1
9 %a1 = add i32 %index, 1
10 %a2 = add i32 %index, 2
11 %a3 = add i32 %index, 3
12 %a4 = add i32 %index, 4
13 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0
14 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1
15 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2
16 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3
20 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_2(i32 %index) {
21 ; CHECK-LABEL: vidup_v4i32_2:
23 ; CHECK-NEXT: vidup.u32 q0, r0, #2
25 %a1 = add i32 %index, 2
26 %a2 = add i32 %index, 4
27 %a3 = add i32 %index, 6
28 %a4 = add i32 %index, 8
29 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0
30 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1
31 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2
32 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3
36 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_3(i32 %index) {
37 ; CHECK-LABEL: vidup_v4i32_3:
39 ; CHECK-NEXT: adds r1, r0, #6
40 ; CHECK-NEXT: vmov q0[2], q0[0], r0, r1
41 ; CHECK-NEXT: add.w r1, r0, #9
42 ; CHECK-NEXT: adds r0, #3
43 ; CHECK-NEXT: vmov q0[3], q0[1], r0, r1
45 %a1 = add i32 %index, 3
46 %a2 = add i32 %index, 6
47 %a3 = add i32 %index, 9
48 %a4 = add i32 %index, 12
49 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0
50 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1
51 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2
52 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3
56 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_4(i32 %index) {
57 ; CHECK-LABEL: vidup_v4i32_4:
59 ; CHECK-NEXT: vidup.u32 q0, r0, #4
61 %a1 = add i32 %index, 4
62 %a2 = add i32 %index, 8
63 %a3 = add i32 %index, 12
64 %a4 = add i32 %index, 16
65 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0
66 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1
67 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2
68 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3
72 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_8(i32 %index) {
73 ; CHECK-LABEL: vidup_v4i32_8:
75 ; CHECK-NEXT: vidup.u32 q0, r0, #8
77 %a1 = add i32 %index, 8
78 %a2 = add i32 %index, 16
79 %a3 = add i32 %index, 24
80 %a4 = add i32 %index, 32
81 %v1 = insertelement <4 x i32> poison, i32 %index, i32 0
82 %v2 = insertelement <4 x i32> %v1, i32 %a1, i32 1
83 %v3 = insertelement <4 x i32> %v2, i32 %a2, i32 2
84 %v4 = insertelement <4 x i32> %v3, i32 %a3, i32 3
88 define arm_aapcs_vfpcc <4 x i32> @vidup_v4i32_1_i(i32 %index) {
89 ; CHECK-LABEL: vidup_v4i32_1_i:
91 ; CHECK-NEXT: adds r1, r0, #3
92 ; CHECK-NEXT: adds r2, r0, #1
93 ; CHECK-NEXT: vmov q0[2], q0[0], r2, r1
94 ; CHECK-NEXT: adds r1, r0, #4
95 ; CHECK-NEXT: adds r0, #2
96 ; CHECK-NEXT: vmov q0[3], q0[1], r0, r1
98 %a1 = add i32 %index, 1
99 %a2 = add i32 %index, 2
100 %a3 = add i32 %index, 3
101 %a4 = add i32 %index, 4
102 %v1 = insertelement <4 x i32> poison, i32 %a1, i32 0
103 %v2 = insertelement <4 x i32> %v1, i32 %a2, i32 1
104 %v3 = insertelement <4 x i32> %v2, i32 %a3, i32 2
105 %v4 = insertelement <4 x i32> %v3, i32 %a4, i32 3
109 define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_1(i16 %index) {
110 ; CHECK-LABEL: vidup_v8i16_1:
112 ; CHECK-NEXT: vidup.u16 q0, r0, #1
114 %a1 = add i16 %index, 1
115 %a2 = add i16 %index, 2
116 %a3 = add i16 %index, 3
117 %a4 = add i16 %index, 4
118 %a5 = add i16 %index, 5
119 %a6 = add i16 %index, 6
120 %a7 = add i16 %index, 7
121 %a8 = add i16 %index, 8
122 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0
123 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1
124 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2
125 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3
126 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4
127 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5
128 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6
129 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7
133 define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_2(i16 %index) {
134 ; CHECK-LABEL: vidup_v8i16_2:
136 ; CHECK-NEXT: vidup.u16 q0, r0, #2
138 %a1 = add i16 %index, 2
139 %a2 = add i16 %index, 4
140 %a3 = add i16 %index, 6
141 %a4 = add i16 %index, 8
142 %a5 = add i16 %index, 10
143 %a6 = add i16 %index, 12
144 %a7 = add i16 %index, 14
145 %a8 = add i16 %index, 16
146 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0
147 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1
148 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2
149 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3
150 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4
151 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5
152 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6
153 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7
157 define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_4(i16 %index) {
158 ; CHECK-LABEL: vidup_v8i16_4:
160 ; CHECK-NEXT: vidup.u16 q0, r0, #4
162 %a1 = add i16 %index, 4
163 %a2 = add i16 %index, 8
164 %a3 = add i16 %index, 12
165 %a4 = add i16 %index, 16
166 %a5 = add i16 %index, 20
167 %a6 = add i16 %index, 24
168 %a7 = add i16 %index, 28
169 %a8 = add i16 %index, 32
170 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0
171 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1
172 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2
173 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3
174 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4
175 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5
176 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6
177 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7
181 define arm_aapcs_vfpcc <8 x i16> @vidup_v8i16_8(i16 %index) {
182 ; CHECK-LABEL: vidup_v8i16_8:
184 ; CHECK-NEXT: vidup.u16 q0, r0, #8
186 %a1 = add i16 %index, 8
187 %a2 = add i16 %index, 16
188 %a3 = add i16 %index, 24
189 %a4 = add i16 %index, 32
190 %a5 = add i16 %index, 40
191 %a6 = add i16 %index, 48
192 %a7 = add i16 %index, 56
193 %a8 = add i16 %index, 64
194 %v1 = insertelement <8 x i16> poison, i16 %index, i32 0
195 %v2 = insertelement <8 x i16> %v1, i16 %a1, i32 1
196 %v3 = insertelement <8 x i16> %v2, i16 %a2, i32 2
197 %v4 = insertelement <8 x i16> %v3, i16 %a3, i32 3
198 %v5 = insertelement <8 x i16> %v4, i16 %a4, i32 4
199 %v6 = insertelement <8 x i16> %v5, i16 %a5, i32 5
200 %v7 = insertelement <8 x i16> %v6, i16 %a6, i32 6
201 %v8 = insertelement <8 x i16> %v7, i16 %a7, i32 7
205 define arm_aapcs_vfpcc <16 x i8> @vidup_v16i8_1(i8 %index) {
206 ; CHECK-LABEL: vidup_v16i8_1:
208 ; CHECK-NEXT: vidup.u8 q0, r0, #1
210 %a1 = add i8 %index, 1
211 %a2 = add i8 %index, 2
212 %a3 = add i8 %index, 3
213 %a4 = add i8 %index, 4
214 %a5 = add i8 %index, 5
215 %a6 = add i8 %index, 6
216 %a7 = add i8 %index, 7
217 %a8 = add i8 %index, 8
218 %a9 = add i8 %index, 9
219 %a10 = add i8 %index, 10
220 %a11 = add i8 %index, 11
221 %a12 = add i8 %index, 12
222 %a13 = add i8 %index, 13
223 %a14 = add i8 %index, 14
224 %a15 = add i8 %index, 15
225 %a16 = add i8 %index, 16
226 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0
227 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1
228 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2
229 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3
230 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4
231 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5
232 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6
233 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7
234 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8
235 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9
236 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10
237 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11
238 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12
239 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13
240 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14
241 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15
245 define arm_aapcs_vfpcc <16 x i8> @vidup_v16i8_4(i8 %index) {
246 ; CHECK-LABEL: vidup_v16i8_4:
248 ; CHECK-NEXT: vidup.u8 q0, r0, #4
250 %a1 = add i8 %index, 4
251 %a2 = add i8 %index, 8
252 %a3 = add i8 %index, 12
253 %a4 = add i8 %index, 16
254 %a5 = add i8 %index, 20
255 %a6 = add i8 %index, 24
256 %a7 = add i8 %index, 28
257 %a8 = add i8 %index, 32
258 %a9 = add i8 %index, 36
259 %a10 = add i8 %index, 40
260 %a11 = add i8 %index, 44
261 %a12 = add i8 %index, 48
262 %a13 = add i8 %index, 52
263 %a14 = add i8 %index, 56
264 %a15 = add i8 %index, 60
265 %a16 = add i8 %index, 64
266 %v1 = insertelement <16 x i8> poison, i8 %index, i32 0
267 %v2 = insertelement <16 x i8> %v1, i8 %a1, i32 1
268 %v3 = insertelement <16 x i8> %v2, i8 %a2, i32 2
269 %v4 = insertelement <16 x i8> %v3, i8 %a3, i32 3
270 %v5 = insertelement <16 x i8> %v4, i8 %a4, i32 4
271 %v6 = insertelement <16 x i8> %v5, i8 %a5, i32 5
272 %v7 = insertelement <16 x i8> %v6, i8 %a6, i32 6
273 %v8 = insertelement <16 x i8> %v7, i8 %a7, i32 7
274 %v9 = insertelement <16 x i8> %v8, i8 %a8, i32 8
275 %v10 = insertelement <16 x i8> %v9, i8 %a9, i32 9
276 %v11 = insertelement <16 x i8> %v10, i8 %a10, i32 10
277 %v12 = insertelement <16 x i8> %v11, i8 %a11, i32 11
278 %v13 = insertelement <16 x i8> %v12, i8 %a12, i32 12
279 %v14 = insertelement <16 x i8> %v13, i8 %a13, i32 13
280 %v15 = insertelement <16 x i8> %v14, i8 %a14, i32 14
281 %v16 = insertelement <16 x i8> %v15, i8 %a15, i32 15