1 ;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump -triple armv7-none-linux-gnueabi -disassemble - | FileCheck %s --check-prefix=ARM
2 ;RUN: llc < %s -mtriple=thumbv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump -triple thumbv7-none-linux-gnueabi -disassemble - | FileCheck %s --check-prefix=THUMB2
3 ;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=-neon -verify-machineinstrs -filetype=obj | llvm-objdump -triple armv7-none-linux-gnueabi -disassemble - | FileCheck %s --check-prefix=NO_NEON
4 ;We want to have both positive and negative checks for thumb1. These checks
5 ;are not easy to do in a single pass so we generate the output once to a
6 ;temp file and run filecheck twice with different prefixes.
7 ;RUN: llc < %s -mtriple=thumbv5-none-linux-gnueabi -verify-machineinstrs -filetype=obj | llvm-objdump -triple thumbv5-none-linux-gnueabi -disassemble - > %t
8 ;RUN: cat %t | FileCheck %s --check-prefix=THUMB1
9 ;RUN: cat %t | FileCheck %s --check-prefix=T1POST
11 ;This file contains auto generated tests for the lowering of passing structs
12 ;byval in the arm backend. We have tests for both packed and unpacked
13 ;structs at varying alignments. Each test is run for arm, thumb2 and thumb1.
14 ;We check for the strings in the generated object code using llvm-objdump
15 ;because it provides better assurance that we are generating instructions
16 ;for the correct architecture. Otherwise we could accidentally generate an
17 ;ARM instruction for THUMB1 and wouldn't detect it because the assembly
18 ;code representation is the same, but the object code would be generated
19 ;incorrectly. For each test we check for the label, a load instruction of the
20 ;correct form, a branch if it will be generated with a loop, and the leftover
21 ;cleanup if the number of bytes does not divide evenly by the store size
23 %struct.A = type <{ [ 10 x i32 ] }> ; 40 bytes
24 declare void @use_A(%struct.A* byval)
25 %struct.B = type <{ [ 10 x i32 ], i8 }> ; 41 bytes
26 declare void @use_B(%struct.B* byval)
27 %struct.C = type <{ [ 10 x i32 ], [ 3 x i8 ] }> ; 43 bytes
28 declare void @use_C(%struct.C* byval)
29 %struct.D = type <{ [ 100 x i32 ] }> ; 400 bytes
30 declare void @use_D(%struct.D* byval)
31 %struct.E = type <{ [ 100 x i32 ], i8 }> ; 401 bytes
32 declare void @use_E(%struct.E* byval)
33 %struct.F = type <{ [ 100 x i32 ], [ 3 x i8 ] }> ; 403 bytes
34 declare void @use_F(%struct.F* byval)
35 %struct.G = type { [ 10 x i32 ] } ; 40 bytes
36 declare void @use_G(%struct.G* byval)
37 %struct.H = type { [ 10 x i32 ], i8 } ; 41 bytes
38 declare void @use_H(%struct.H* byval)
39 %struct.I = type { [ 10 x i32 ], [ 3 x i8 ] } ; 43 bytes
40 declare void @use_I(%struct.I* byval)
41 %struct.J = type { [ 100 x i32 ] } ; 400 bytes
42 declare void @use_J(%struct.J* byval)
43 %struct.K = type { [ 100 x i32 ], i8 } ; 401 bytes
44 declare void @use_K(%struct.K* byval)
45 %struct.L = type { [ 100 x i32 ], [ 3 x i8 ] } ; 403 bytes
46 declare void @use_L(%struct.L* byval)
49 ;THUMB2-LABEL: test_A_1:
50 ;NO_NEON-LABEL:test_A_1:
51 ;THUMB1-LABEL: test_A_1:
52 ;T1POST-LABEL: test_A_1:
53 define void @test_A_1() {
54 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
56 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
58 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
60 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
61 ;THUMB1: adds [[BASE]], #1
63 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
65 %a = alloca %struct.A, align 1
66 call void @use_A(%struct.A* byval align 1 %a)
70 ;THUMB2-LABEL: test_A_2:
71 ;NO_NEON-LABEL:test_A_2:
72 ;THUMB1-LABEL: test_A_2:
73 ;T1POST-LABEL: test_A_2:
74 define void @test_A_2() {
75 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
77 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
79 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
81 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
82 ;THUMB1: adds [[BASE]], #2
84 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
86 %a = alloca %struct.A, align 2
87 call void @use_A(%struct.A* byval align 2 %a)
91 ;THUMB2-LABEL: test_A_4:
92 ;NO_NEON-LABEL:test_A_4:
93 ;THUMB1-LABEL: test_A_4:
94 ;T1POST-LABEL: test_A_4:
95 define void @test_A_4() {
96 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
98 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
100 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
102 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
103 ;THUMB1: adds [[BASE]], #4
105 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
107 %a = alloca %struct.A, align 4
108 call void @use_A(%struct.A* byval align 4 %a)
111 ;ARM-LABEL: test_A_8:
112 ;THUMB2-LABEL: test_A_8:
113 ;NO_NEON-LABEL:test_A_8:
114 ;THUMB1-LABEL: test_A_8:
115 ;T1POST-LABEL: test_A_8:
116 define void @test_A_8() {
117 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
119 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
121 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
122 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
124 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
125 ;THUMB1: adds [[BASE]], #4
127 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
129 %a = alloca %struct.A, align 8
130 call void @use_A(%struct.A* byval align 8 %a)
133 ;ARM-LABEL: test_A_16:
134 ;THUMB2-LABEL: test_A_16:
135 ;NO_NEON-LABEL:test_A_16:
136 ;THUMB1-LABEL: test_A_16:
137 ;T1POST-LABEL: test_A_16:
138 define void @test_A_16() {
139 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
140 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
142 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
143 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
145 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
146 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
148 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
149 ;THUMB1: adds [[BASE]], #4
151 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
153 %a = alloca %struct.A, align 16
154 call void @use_A(%struct.A* byval align 16 %a)
157 ;ARM-LABEL: test_B_1:
158 ;THUMB2-LABEL: test_B_1:
159 ;NO_NEON-LABEL:test_B_1:
160 ;THUMB1-LABEL: test_B_1:
161 ;T1POST-LABEL: test_B_1:
162 define void @test_B_1() {
163 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
165 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
167 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
169 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
170 ;THUMB1: adds [[BASE]], #1
172 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
174 %a = alloca %struct.B, align 1
175 call void @use_B(%struct.B* byval align 1 %a)
178 ;ARM-LABEL: test_B_2:
179 ;THUMB2-LABEL: test_B_2:
180 ;NO_NEON-LABEL:test_B_2:
181 ;THUMB1-LABEL: test_B_2:
182 ;T1POST-LABEL: test_B_2:
183 define void @test_B_2() {
184 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
185 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
187 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
188 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
190 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
191 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
193 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
194 ;THUMB1: adds [[BASE]], #2
195 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
197 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
199 %a = alloca %struct.B, align 2
200 call void @use_B(%struct.B* byval align 2 %a)
203 ;ARM-LABEL: test_B_4:
204 ;THUMB2-LABEL: test_B_4:
205 ;NO_NEON-LABEL:test_B_4:
206 ;THUMB1-LABEL: test_B_4:
207 ;T1POST-LABEL: test_B_4:
208 define void @test_B_4() {
209 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
210 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
212 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
213 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
215 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
216 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
218 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
219 ;THUMB1: adds [[BASE]], #4
220 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
222 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
224 %a = alloca %struct.B, align 4
225 call void @use_B(%struct.B* byval align 4 %a)
228 ;ARM-LABEL: test_B_8:
229 ;THUMB2-LABEL: test_B_8:
230 ;NO_NEON-LABEL:test_B_8:
231 ;THUMB1-LABEL: test_B_8:
232 ;T1POST-LABEL: test_B_8:
233 define void @test_B_8() {
234 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
235 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
237 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
238 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
240 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
241 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
242 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
244 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
245 ;THUMB1: adds [[BASE]], #4
246 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
248 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
250 %a = alloca %struct.B, align 8
251 call void @use_B(%struct.B* byval align 8 %a)
254 ;ARM-LABEL: test_B_16:
255 ;THUMB2-LABEL: test_B_16:
256 ;NO_NEON-LABEL:test_B_16:
257 ;THUMB1-LABEL: test_B_16:
258 ;T1POST-LABEL: test_B_16:
259 define void @test_B_16() {
260 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
261 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
263 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
264 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
266 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
267 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
268 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
270 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
271 ;THUMB1: adds [[BASE]], #4
272 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
274 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
276 %a = alloca %struct.B, align 16
277 call void @use_B(%struct.B* byval align 16 %a)
280 ;ARM-LABEL: test_C_1:
281 ;THUMB2-LABEL: test_C_1:
282 ;NO_NEON-LABEL:test_C_1:
283 ;THUMB1-LABEL: test_C_1:
284 ;T1POST-LABEL: test_C_1:
285 define void @test_C_1() {
286 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
288 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
290 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
292 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
293 ;THUMB1: adds [[BASE]], #1
295 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
297 %a = alloca %struct.C, align 1
298 call void @use_C(%struct.C* byval align 1 %a)
301 ;ARM-LABEL: test_C_2:
302 ;THUMB2-LABEL: test_C_2:
303 ;NO_NEON-LABEL:test_C_2:
304 ;THUMB1-LABEL: test_C_2:
305 ;T1POST-LABEL: test_C_2:
306 define void @test_C_2() {
307 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
308 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
310 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
311 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
313 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
314 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
316 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
317 ;THUMB1: adds [[BASE]], #2
318 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
320 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
322 %a = alloca %struct.C, align 2
323 call void @use_C(%struct.C* byval align 2 %a)
326 ;ARM-LABEL: test_C_4:
327 ;THUMB2-LABEL: test_C_4:
328 ;NO_NEON-LABEL:test_C_4:
329 ;THUMB1-LABEL: test_C_4:
330 ;T1POST-LABEL: test_C_4:
331 define void @test_C_4() {
332 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
333 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
335 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
336 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
338 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
339 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
341 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
342 ;THUMB1: adds [[BASE]], #4
343 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
344 ;THUMB1: adds [[BASE]], #1
346 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
348 %a = alloca %struct.C, align 4
349 call void @use_C(%struct.C* byval align 4 %a)
352 ;ARM-LABEL: test_C_8:
353 ;THUMB2-LABEL: test_C_8:
354 ;NO_NEON-LABEL:test_C_8:
355 ;THUMB1-LABEL: test_C_8:
356 ;T1POST-LABEL: test_C_8:
357 define void @test_C_8() {
358 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
359 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
361 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
362 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
364 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
365 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
366 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
368 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
369 ;THUMB1: adds [[BASE]], #4
370 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
371 ;THUMB1: adds [[BASE]], #1
373 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
375 %a = alloca %struct.C, align 8
376 call void @use_C(%struct.C* byval align 8 %a)
379 ;ARM-LABEL: test_C_16:
380 ;THUMB2-LABEL: test_C_16:
381 ;NO_NEON-LABEL:test_C_16:
382 ;THUMB1-LABEL: test_C_16:
383 ;T1POST-LABEL: test_C_16:
384 define void @test_C_16() {
385 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
386 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
388 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
389 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
391 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
392 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
393 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
395 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
396 ;THUMB1: adds [[BASE]], #4
397 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
398 ;THUMB1: adds [[BASE]], #1
400 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
402 %a = alloca %struct.C, align 16
403 call void @use_C(%struct.C* byval align 16 %a)
406 ;ARM-LABEL: test_D_1:
407 ;THUMB2-LABEL: test_D_1:
408 ;NO_NEON-LABEL:test_D_1:
409 ;THUMB1-LABEL: test_D_1:
410 ;T1POST-LABEL: test_D_1:
411 define void @test_D_1() {
412 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
415 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
418 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
421 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
422 ;THUMB1: adds [[BASE]], #1
425 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
427 %a = alloca %struct.D, align 1
428 call void @use_D(%struct.D* byval align 1 %a)
431 ;ARM-LABEL: test_D_2:
432 ;THUMB2-LABEL: test_D_2:
433 ;NO_NEON-LABEL:test_D_2:
434 ;THUMB1-LABEL: test_D_2:
435 ;T1POST-LABEL: test_D_2:
436 define void @test_D_2() {
437 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
440 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
443 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
446 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
447 ;THUMB1: adds [[BASE]], #2
450 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
452 %a = alloca %struct.D, align 2
453 call void @use_D(%struct.D* byval align 2 %a)
456 ;ARM-LABEL: test_D_4:
457 ;THUMB2-LABEL: test_D_4:
458 ;NO_NEON-LABEL:test_D_4:
459 ;THUMB1-LABEL: test_D_4:
460 ;T1POST-LABEL: test_D_4:
461 define void @test_D_4() {
462 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
465 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
468 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
471 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
472 ;THUMB1: adds [[BASE]], #4
475 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
477 %a = alloca %struct.D, align 4
478 call void @use_D(%struct.D* byval align 4 %a)
481 ;ARM-LABEL: test_D_8:
482 ;THUMB2-LABEL: test_D_8:
483 ;NO_NEON-LABEL:test_D_8:
484 ;THUMB1-LABEL: test_D_8:
485 ;T1POST-LABEL: test_D_8:
486 define void @test_D_8() {
487 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
490 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
493 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
495 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
497 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
498 ;THUMB1: adds [[BASE]], #4
501 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
503 %a = alloca %struct.D, align 8
504 call void @use_D(%struct.D* byval align 8 %a)
507 ;ARM-LABEL: test_D_16:
508 ;THUMB2-LABEL: test_D_16:
509 ;NO_NEON-LABEL:test_D_16:
510 ;THUMB1-LABEL: test_D_16:
511 ;T1POST-LABEL: test_D_16:
512 define void @test_D_16() {
513 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
516 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
519 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
521 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
523 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
524 ;THUMB1: adds [[BASE]], #4
527 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
529 %a = alloca %struct.D, align 16
530 call void @use_D(%struct.D* byval align 16 %a)
533 ;ARM-LABEL: test_E_1:
534 ;THUMB2-LABEL: test_E_1:
535 ;NO_NEON-LABEL:test_E_1:
536 ;THUMB1-LABEL: test_E_1:
537 ;T1POST-LABEL: test_E_1:
538 define void @test_E_1() {
539 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
542 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
545 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
548 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
549 ;THUMB1: adds [[BASE]], #1
552 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
554 %a = alloca %struct.E, align 1
555 call void @use_E(%struct.E* byval align 1 %a)
558 ;ARM-LABEL: test_E_2:
559 ;THUMB2-LABEL: test_E_2:
560 ;NO_NEON-LABEL:test_E_2:
561 ;THUMB1-LABEL: test_E_2:
562 ;T1POST-LABEL: test_E_2:
563 define void @test_E_2() {
564 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
566 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
568 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
570 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
572 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
574 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
576 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
577 ;THUMB1: adds [[BASE]], #2
579 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
581 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
583 %a = alloca %struct.E, align 2
584 call void @use_E(%struct.E* byval align 2 %a)
587 ;ARM-LABEL: test_E_4:
588 ;THUMB2-LABEL: test_E_4:
589 ;NO_NEON-LABEL:test_E_4:
590 ;THUMB1-LABEL: test_E_4:
591 ;T1POST-LABEL: test_E_4:
592 define void @test_E_4() {
593 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
595 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
597 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
599 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
601 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
603 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
605 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
606 ;THUMB1: adds [[BASE]], #4
608 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
610 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
612 %a = alloca %struct.E, align 4
613 call void @use_E(%struct.E* byval align 4 %a)
616 ;ARM-LABEL: test_E_8:
617 ;THUMB2-LABEL: test_E_8:
618 ;NO_NEON-LABEL:test_E_8:
619 ;THUMB1-LABEL: test_E_8:
620 ;T1POST-LABEL: test_E_8:
621 define void @test_E_8() {
622 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
624 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
626 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
628 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
630 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
632 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
633 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
635 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
636 ;THUMB1: adds [[BASE]], #4
638 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
640 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
642 %a = alloca %struct.E, align 8
643 call void @use_E(%struct.E* byval align 8 %a)
646 ;ARM-LABEL: test_E_16:
647 ;THUMB2-LABEL: test_E_16:
648 ;NO_NEON-LABEL:test_E_16:
649 ;THUMB1-LABEL: test_E_16:
650 ;T1POST-LABEL: test_E_16:
651 define void @test_E_16() {
652 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
654 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
656 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
658 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
660 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
662 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
663 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
665 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
666 ;THUMB1: adds [[BASE]], #4
668 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
670 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
672 %a = alloca %struct.E, align 16
673 call void @use_E(%struct.E* byval align 16 %a)
676 ;ARM-LABEL: test_F_1:
677 ;THUMB2-LABEL: test_F_1:
678 ;NO_NEON-LABEL:test_F_1:
679 ;THUMB1-LABEL: test_F_1:
680 ;T1POST-LABEL: test_F_1:
681 define void @test_F_1() {
682 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
685 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
688 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
691 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
692 ;THUMB1: adds [[BASE]], #1
695 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
697 %a = alloca %struct.F, align 1
698 call void @use_F(%struct.F* byval align 1 %a)
701 ;ARM-LABEL: test_F_2:
702 ;THUMB2-LABEL: test_F_2:
703 ;NO_NEON-LABEL:test_F_2:
704 ;THUMB1-LABEL: test_F_2:
705 ;T1POST-LABEL: test_F_2:
706 define void @test_F_2() {
707 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
709 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
711 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
713 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
715 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
717 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
719 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
720 ;THUMB1: adds [[BASE]], #2
722 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
724 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
726 %a = alloca %struct.F, align 2
727 call void @use_F(%struct.F* byval align 2 %a)
730 ;ARM-LABEL: test_F_4:
731 ;THUMB2-LABEL: test_F_4:
732 ;NO_NEON-LABEL:test_F_4:
733 ;THUMB1-LABEL: test_F_4:
734 ;T1POST-LABEL: test_F_4:
735 define void @test_F_4() {
736 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
738 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
740 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
742 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
744 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
746 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
748 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
749 ;THUMB1: adds [[BASE]], #4
751 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
752 ;THUMB1: adds [[BASE]], #1
754 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
756 %a = alloca %struct.F, align 4
757 call void @use_F(%struct.F* byval align 4 %a)
760 ;ARM-LABEL: test_F_8:
761 ;THUMB2-LABEL: test_F_8:
762 ;NO_NEON-LABEL:test_F_8:
763 ;THUMB1-LABEL: test_F_8:
764 ;T1POST-LABEL: test_F_8:
765 define void @test_F_8() {
766 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
768 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
770 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
772 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
774 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
776 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
777 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
779 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
780 ;THUMB1: adds [[BASE]], #4
782 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
783 ;THUMB1: adds [[BASE]], #1
785 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
787 %a = alloca %struct.F, align 8
788 call void @use_F(%struct.F* byval align 8 %a)
791 ;ARM-LABEL: test_F_16:
792 ;THUMB2-LABEL: test_F_16:
793 ;NO_NEON-LABEL:test_F_16:
794 ;THUMB1-LABEL: test_F_16:
795 ;T1POST-LABEL: test_F_16:
796 define void @test_F_16() {
797 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
799 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
801 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
803 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
805 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
807 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
808 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
810 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
811 ;THUMB1: adds [[BASE]], #4
813 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
814 ;THUMB1: adds [[BASE]], #1
816 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
818 %a = alloca %struct.F, align 16
819 call void @use_F(%struct.F* byval align 16 %a)
822 ;ARM-LABEL: test_G_1:
823 ;THUMB2-LABEL: test_G_1:
824 ;NO_NEON-LABEL:test_G_1:
825 ;THUMB1-LABEL: test_G_1:
826 ;T1POST-LABEL: test_G_1:
827 define void @test_G_1() {
828 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
830 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
832 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
834 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
835 ;THUMB1: adds [[BASE]], #1
837 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
839 %a = alloca %struct.G, align 1
840 call void @use_G(%struct.G* byval align 1 %a)
843 ;ARM-LABEL: test_G_2:
844 ;THUMB2-LABEL: test_G_2:
845 ;NO_NEON-LABEL:test_G_2:
846 ;THUMB1-LABEL: test_G_2:
847 ;T1POST-LABEL: test_G_2:
848 define void @test_G_2() {
849 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
851 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
853 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
855 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
856 ;THUMB1: adds [[BASE]], #2
858 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
860 %a = alloca %struct.G, align 2
861 call void @use_G(%struct.G* byval align 2 %a)
864 ;ARM-LABEL: test_G_4:
865 ;THUMB2-LABEL: test_G_4:
866 ;NO_NEON-LABEL:test_G_4:
867 ;THUMB1-LABEL: test_G_4:
868 ;T1POST-LABEL: test_G_4:
869 define void @test_G_4() {
870 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
872 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
874 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
876 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
877 ;THUMB1: adds [[BASE]], #4
879 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
881 %a = alloca %struct.G, align 4
882 call void @use_G(%struct.G* byval align 4 %a)
885 ;ARM-LABEL: test_G_8:
886 ;THUMB2-LABEL: test_G_8:
887 ;NO_NEON-LABEL:test_G_8:
888 ;THUMB1-LABEL: test_G_8:
889 ;T1POST-LABEL: test_G_8:
890 define void @test_G_8() {
891 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
893 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
895 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
896 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
898 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
899 ;THUMB1: adds [[BASE]], #4
901 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
903 %a = alloca %struct.G, align 8
904 call void @use_G(%struct.G* byval align 8 %a)
907 ;ARM-LABEL: test_G_16:
908 ;THUMB2-LABEL: test_G_16:
909 ;NO_NEON-LABEL:test_G_16:
910 ;THUMB1-LABEL: test_G_16:
911 ;T1POST-LABEL: test_G_16:
912 define void @test_G_16() {
913 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
915 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
917 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
918 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
920 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
921 ;THUMB1: adds [[BASE]], #4
923 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
925 %a = alloca %struct.G, align 16
926 call void @use_G(%struct.G* byval align 16 %a)
929 ;ARM-LABEL: test_H_1:
930 ;THUMB2-LABEL: test_H_1:
931 ;NO_NEON-LABEL:test_H_1:
932 ;THUMB1-LABEL: test_H_1:
933 ;T1POST-LABEL: test_H_1:
934 define void @test_H_1() {
935 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
937 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
939 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
941 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
942 ;THUMB1: adds [[BASE]], #1
944 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
946 %a = alloca %struct.H, align 1
947 call void @use_H(%struct.H* byval align 1 %a)
950 ;ARM-LABEL: test_H_2:
951 ;THUMB2-LABEL: test_H_2:
952 ;NO_NEON-LABEL:test_H_2:
953 ;THUMB1-LABEL: test_H_2:
954 ;T1POST-LABEL: test_H_2:
955 define void @test_H_2() {
956 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
958 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
960 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
962 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
963 ;THUMB1: adds [[BASE]], #2
965 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
967 %a = alloca %struct.H, align 2
968 call void @use_H(%struct.H* byval align 2 %a)
971 ;ARM-LABEL: test_H_4:
972 ;THUMB2-LABEL: test_H_4:
973 ;NO_NEON-LABEL:test_H_4:
974 ;THUMB1-LABEL: test_H_4:
975 ;T1POST-LABEL: test_H_4:
976 define void @test_H_4() {
977 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
979 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
981 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
983 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
984 ;THUMB1: adds [[BASE]], #4
986 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
988 %a = alloca %struct.H, align 4
989 call void @use_H(%struct.H* byval align 4 %a)
992 ;ARM-LABEL: test_H_8:
993 ;THUMB2-LABEL: test_H_8:
994 ;NO_NEON-LABEL:test_H_8:
995 ;THUMB1-LABEL: test_H_8:
996 ;T1POST-LABEL: test_H_8:
997 define void @test_H_8() {
998 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1000 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1002 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1003 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1005 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1006 ;THUMB1: adds [[BASE]], #4
1008 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1010 %a = alloca %struct.H, align 8
1011 call void @use_H(%struct.H* byval align 8 %a)
1014 ;ARM-LABEL: test_H_16:
1015 ;THUMB2-LABEL: test_H_16:
1016 ;NO_NEON-LABEL:test_H_16:
1017 ;THUMB1-LABEL: test_H_16:
1018 ;T1POST-LABEL: test_H_16:
1019 define void @test_H_16() {
1020 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1022 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1024 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1025 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1027 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1028 ;THUMB1: adds [[BASE]], #4
1030 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1032 %a = alloca %struct.H, align 16
1033 call void @use_H(%struct.H* byval align 16 %a)
1036 ;ARM-LABEL: test_I_1:
1037 ;THUMB2-LABEL: test_I_1:
1038 ;NO_NEON-LABEL:test_I_1:
1039 ;THUMB1-LABEL: test_I_1:
1040 ;T1POST-LABEL: test_I_1:
1041 define void @test_I_1() {
1042 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
1044 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
1046 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
1048 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1049 ;THUMB1: adds [[BASE]], #1
1051 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
1053 %a = alloca %struct.I, align 1
1054 call void @use_I(%struct.I* byval align 1 %a)
1057 ;ARM-LABEL: test_I_2:
1058 ;THUMB2-LABEL: test_I_2:
1059 ;NO_NEON-LABEL:test_I_2:
1060 ;THUMB1-LABEL: test_I_2:
1061 ;T1POST-LABEL: test_I_2:
1062 define void @test_I_2() {
1063 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
1065 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
1067 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
1069 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1070 ;THUMB1: adds [[BASE]], #2
1072 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
1074 %a = alloca %struct.I, align 2
1075 call void @use_I(%struct.I* byval align 2 %a)
1078 ;ARM-LABEL: test_I_4:
1079 ;THUMB2-LABEL: test_I_4:
1080 ;NO_NEON-LABEL:test_I_4:
1081 ;THUMB1-LABEL: test_I_4:
1082 ;T1POST-LABEL: test_I_4:
1083 define void @test_I_4() {
1084 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
1086 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
1088 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1090 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1091 ;THUMB1: adds [[BASE]], #4
1093 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
1095 %a = alloca %struct.I, align 4
1096 call void @use_I(%struct.I* byval align 4 %a)
1099 ;ARM-LABEL: test_I_8:
1100 ;THUMB2-LABEL: test_I_8:
1101 ;NO_NEON-LABEL:test_I_8:
1102 ;THUMB1-LABEL: test_I_8:
1103 ;T1POST-LABEL: test_I_8:
1104 define void @test_I_8() {
1105 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1107 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1109 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1110 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1112 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1113 ;THUMB1: adds [[BASE]], #4
1115 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1117 %a = alloca %struct.I, align 8
1118 call void @use_I(%struct.I* byval align 8 %a)
1121 ;ARM-LABEL: test_I_16:
1122 ;THUMB2-LABEL: test_I_16:
1123 ;NO_NEON-LABEL:test_I_16:
1124 ;THUMB1-LABEL: test_I_16:
1125 ;T1POST-LABEL: test_I_16:
1126 define void @test_I_16() {
1127 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1129 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1131 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1132 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1134 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1135 ;THUMB1: adds [[BASE]], #4
1137 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1139 %a = alloca %struct.I, align 16
1140 call void @use_I(%struct.I* byval align 16 %a)
1143 ;ARM-LABEL: test_J_1:
1144 ;THUMB2-LABEL: test_J_1:
1145 ;NO_NEON-LABEL:test_J_1:
1146 ;THUMB1-LABEL: test_J_1:
1147 ;T1POST-LABEL: test_J_1:
1148 define void @test_J_1() {
1149 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
1152 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
1155 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
1158 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1159 ;THUMB1: adds [[BASE]], #1
1162 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
1164 %a = alloca %struct.J, align 1
1165 call void @use_J(%struct.J* byval align 1 %a)
1168 ;ARM-LABEL: test_J_2:
1169 ;THUMB2-LABEL: test_J_2:
1170 ;NO_NEON-LABEL:test_J_2:
1171 ;THUMB1-LABEL: test_J_2:
1172 ;T1POST-LABEL: test_J_2:
1173 define void @test_J_2() {
1174 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
1177 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
1180 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
1183 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1184 ;THUMB1: adds [[BASE]], #2
1187 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
1189 %a = alloca %struct.J, align 2
1190 call void @use_J(%struct.J* byval align 2 %a)
1193 ;ARM-LABEL: test_J_4:
1194 ;THUMB2-LABEL: test_J_4:
1195 ;NO_NEON-LABEL:test_J_4:
1196 ;THUMB1-LABEL: test_J_4:
1197 ;T1POST-LABEL: test_J_4:
1198 define void @test_J_4() {
1199 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
1202 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
1205 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1208 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1209 ;THUMB1: adds [[BASE]], #4
1212 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
1214 %a = alloca %struct.J, align 4
1215 call void @use_J(%struct.J* byval align 4 %a)
1218 ;ARM-LABEL: test_J_8:
1219 ;THUMB2-LABEL: test_J_8:
1220 ;NO_NEON-LABEL:test_J_8:
1221 ;THUMB1-LABEL: test_J_8:
1222 ;T1POST-LABEL: test_J_8:
1223 define void @test_J_8() {
1224 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1227 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1230 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1232 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1234 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1235 ;THUMB1: adds [[BASE]], #4
1238 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1240 %a = alloca %struct.J, align 8
1241 call void @use_J(%struct.J* byval align 8 %a)
1244 ;ARM-LABEL: test_J_16:
1245 ;THUMB2-LABEL: test_J_16:
1246 ;NO_NEON-LABEL:test_J_16:
1247 ;THUMB1-LABEL: test_J_16:
1248 ;T1POST-LABEL: test_J_16:
1249 define void @test_J_16() {
1250 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1253 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1256 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1258 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1260 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1261 ;THUMB1: adds [[BASE]], #4
1264 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1266 %a = alloca %struct.J, align 16
1267 call void @use_J(%struct.J* byval align 16 %a)
1270 ;ARM-LABEL: test_K_1:
1271 ;THUMB2-LABEL: test_K_1:
1272 ;NO_NEON-LABEL:test_K_1:
1273 ;THUMB1-LABEL: test_K_1:
1274 ;T1POST-LABEL: test_K_1:
1275 define void @test_K_1() {
1276 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
1279 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
1282 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
1285 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1286 ;THUMB1: adds [[BASE]], #1
1289 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
1291 %a = alloca %struct.K, align 1
1292 call void @use_K(%struct.K* byval align 1 %a)
1295 ;ARM-LABEL: test_K_2:
1296 ;THUMB2-LABEL: test_K_2:
1297 ;NO_NEON-LABEL:test_K_2:
1298 ;THUMB1-LABEL: test_K_2:
1299 ;T1POST-LABEL: test_K_2:
1300 define void @test_K_2() {
1301 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
1304 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
1307 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
1310 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1311 ;THUMB1: adds [[BASE]], #2
1314 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
1316 %a = alloca %struct.K, align 2
1317 call void @use_K(%struct.K* byval align 2 %a)
1320 ;ARM-LABEL: test_K_4:
1321 ;THUMB2-LABEL: test_K_4:
1322 ;NO_NEON-LABEL:test_K_4:
1323 ;THUMB1-LABEL: test_K_4:
1324 ;T1POST-LABEL: test_K_4:
1325 define void @test_K_4() {
1326 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
1329 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
1332 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1335 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1336 ;THUMB1: adds [[BASE]], #4
1339 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
1341 %a = alloca %struct.K, align 4
1342 call void @use_K(%struct.K* byval align 4 %a)
1345 ;ARM-LABEL: test_K_8:
1346 ;THUMB2-LABEL: test_K_8:
1347 ;NO_NEON-LABEL:test_K_8:
1348 ;THUMB1-LABEL: test_K_8:
1349 ;T1POST-LABEL: test_K_8:
1350 define void @test_K_8() {
1351 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1354 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1357 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1359 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1361 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1362 ;THUMB1: adds [[BASE]], #4
1365 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1367 %a = alloca %struct.K, align 8
1368 call void @use_K(%struct.K* byval align 8 %a)
1371 ;ARM-LABEL: test_K_16:
1372 ;THUMB2-LABEL: test_K_16:
1373 ;NO_NEON-LABEL:test_K_16:
1374 ;THUMB1-LABEL: test_K_16:
1375 ;T1POST-LABEL: test_K_16:
1376 define void @test_K_16() {
1377 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1380 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1383 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1385 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1387 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1388 ;THUMB1: adds [[BASE]], #4
1391 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1393 %a = alloca %struct.K, align 16
1394 call void @use_K(%struct.K* byval align 16 %a)
1397 ;ARM-LABEL: test_L_1:
1398 ;THUMB2-LABEL: test_L_1:
1399 ;NO_NEON-LABEL:test_L_1:
1400 ;THUMB1-LABEL: test_L_1:
1401 ;T1POST-LABEL: test_L_1:
1402 define void @test_L_1() {
1403 ;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1
1406 ;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1
1409 ;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1
1412 ;THUMB1: ldrb r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1413 ;THUMB1: adds [[BASE]], #1
1416 ;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1
1418 %a = alloca %struct.L, align 1
1419 call void @use_L(%struct.L* byval align 1 %a)
1422 ;ARM-LABEL: test_L_2:
1423 ;THUMB2-LABEL: test_L_2:
1424 ;NO_NEON-LABEL:test_L_2:
1425 ;THUMB1-LABEL: test_L_2:
1426 ;T1POST-LABEL: test_L_2:
1427 define void @test_L_2() {
1428 ;ARM: ldrh r{{[0-9]+}}, [{{.*}}], #2
1431 ;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2
1434 ;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2
1437 ;THUMB1: ldrh r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1438 ;THUMB1: adds [[BASE]], #2
1441 ;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2
1443 %a = alloca %struct.L, align 2
1444 call void @use_L(%struct.L* byval align 2 %a)
1447 ;ARM-LABEL: test_L_4:
1448 ;THUMB2-LABEL: test_L_4:
1449 ;NO_NEON-LABEL:test_L_4:
1450 ;THUMB1-LABEL: test_L_4:
1451 ;T1POST-LABEL: test_L_4:
1452 define void @test_L_4() {
1453 ;ARM: ldr r{{[0-9]+}}, [{{.*}}], #4
1456 ;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4
1459 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1462 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1463 ;THUMB1: adds [[BASE]], #4
1466 ;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4
1468 %a = alloca %struct.L, align 4
1469 call void @use_L(%struct.L* byval align 4 %a)
1472 ;ARM-LABEL: test_L_8:
1473 ;THUMB2-LABEL: test_L_8:
1474 ;NO_NEON-LABEL:test_L_8:
1475 ;THUMB1-LABEL: test_L_8:
1476 ;T1POST-LABEL: test_L_8:
1477 define void @test_L_8() {
1478 ;ARM: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1481 ;THUMB2: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1484 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1486 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1488 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1489 ;THUMB1: adds [[BASE]], #4
1492 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1494 %a = alloca %struct.L, align 8
1495 call void @use_L(%struct.L* byval align 8 %a)
1498 ;ARM-LABEL: test_L_16:
1499 ;THUMB2-LABEL: test_L_16:
1500 ;NO_NEON-LABEL:test_L_16:
1501 ;THUMB1-LABEL: test_L_16:
1502 ;T1POST-LABEL: test_L_16:
1503 define void @test_L_16() {
1504 ;ARM: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1507 ;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1510 ;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4
1512 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1514 ;THUMB1: ldr r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1515 ;THUMB1: adds [[BASE]], #4
1518 ;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1520 %a = alloca %struct.L, align 16
1521 call void @use_L(%struct.L* byval align 16 %a)