[NFC][Py Reformat] Reformat python files in llvm
[llvm-project.git] / llvm / test / CodeGen / ARM / struct_byval_arm_t1_t2.ll
blob34cc2da16a80935bc5c871af7cf5bbafbb8841b4
1 ;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi   -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=armv7-none-linux-gnueabi   -d - | FileCheck %s --check-prefix=ARM
2 ;RUN: llc < %s -mtriple=thumbv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=thumbv7-none-linux-gnueabi -d - | FileCheck %s --check-prefix=THUMB2
3 ;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi   -mattr=-neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=armv7-none-linux-gnueabi   -d - | 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 --no-print-imm-hex --triple=thumbv5-none-linux-gnueabi -d - > %t
8 ;RUN: cat %t | FileCheck %s --check-prefix=THUMB1
9 ;RUN: cat %t | FileCheck %s --check-prefix=T1POST
10 ;RUN: llc < %s -mtriple=thumbv8m.base-arm-none-eabi             -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=thumbv8m.base-arm-none-eabi -d - > %t
11 ;RUN: cat %t | FileCheck %s --check-prefix=THUMB1
12 ;RUN: cat %t | FileCheck %s --check-prefix=T1POST
13 ;RUN: cat %t | FileCheck %s --check-prefix=V8MBASE
15 ;This file contains auto generated tests for the lowering of passing structs
16 ;byval in the arm backend. We have tests for both packed and unpacked
17 ;structs at varying alignments. Each test is run for arm, thumb2 and thumb1.
18 ;We check for the strings in the generated object code using llvm-objdump
19 ;because it provides better assurance that we are generating instructions
20 ;for the correct architecture. Otherwise we could accidentally generate an
21 ;ARM instruction for THUMB1 and wouldn't detect it because the assembly
22 ;code representation is the same, but the object code would be generated
23 ;incorrectly. For each test we check for the label, a load instruction of the
24 ;correct form, a branch if it will be generated with a loop, and the leftover
25 ;cleanup if the number of bytes does not divide evenly by the store size
27 %struct.A = type <{ [ 10 x i32 ] }> ; 40 bytes
28 declare void @use_A(ptr byval(%struct.A))
29 %struct.B = type <{ [ 10 x i32 ], i8 }> ; 41 bytes
30 declare void @use_B(ptr byval(%struct.B))
31 %struct.C = type <{ [ 10 x i32 ], [ 3 x i8 ] }> ; 43 bytes
32 declare void @use_C(ptr byval(%struct.C))
33 %struct.D = type <{ [ 100 x i32 ] }> ; 400 bytes
34 declare void @use_D(ptr byval(%struct.D))
35 %struct.E = type <{ [ 100 x i32 ], i8 }> ; 401 bytes
36 declare void @use_E(ptr byval(%struct.E))
37 %struct.F = type <{ [ 100 x i32 ], [ 3 x i8 ] }> ; 403 bytes
38 declare void @use_F(ptr byval(%struct.F))
39 %struct.G = type  { [ 10 x i32 ] }  ; 40 bytes
40 declare void @use_G(ptr byval(%struct.G))
41 %struct.H = type  { [ 10 x i32 ], i8 }  ; 41 bytes
42 declare void @use_H(ptr byval(%struct.H))
43 %struct.I = type  { [ 10 x i32 ], [ 3 x i8 ] }  ; 43 bytes
44 declare void @use_I(ptr byval(%struct.I))
45 %struct.J = type  { [ 100 x i32 ] }  ; 400 bytes
46 declare void @use_J(ptr byval(%struct.J))
47 %struct.K = type  { [ 100 x i32 ], i8 }  ; 401 bytes
48 declare void @use_K(ptr byval(%struct.K))
49 %struct.L = type  { [ 100 x i32 ], [ 3 x i8 ] }  ; 403 bytes
50 declare void @use_L(ptr byval(%struct.L))
51 %struct.M = type  { [  64 x i8 ] }   ; 64 bytes
52 declare void @use_M(ptr byval(%struct.M))
53 %struct.N = type  { [ 128 x i8 ] }  ; 128 bytes
54 declare void @use_N(ptr byval(%struct.N))
56 ;ARM-LABEL:    <test_A_1>:
57 ;THUMB2-LABEL: <test_A_1>:
58 ;NO_NEON-LABEL:<test_A_1>:
59 ;THUMB1-LABEL: <test_A_1>:
60 ;T1POST-LABEL: <test_A_1>:
61   define void @test_A_1() {
62 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
64 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
66 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
68 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
69 ;THUMB1:      adds    [[BASE]], #1
71 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
72   entry:
73     %a = alloca %struct.A, align 1
74     call void @use_A(ptr byval(%struct.A) align 1 %a)
75     ret void
76   }
77 ;ARM-LABEL:    <test_A_2>:
78 ;THUMB2-LABEL: <test_A_2>:
79 ;NO_NEON-LABEL:<test_A_2>:
80 ;THUMB1-LABEL: <test_A_2>:
81 ;T1POST-LABEL: <test_A_2>:
82   define void @test_A_2() {
83 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
85 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
87 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
89 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
90 ;THUMB1:      adds    [[BASE]], #2
92 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
93   entry:
94     %a = alloca %struct.A, align 2
95     call void @use_A(ptr byval(%struct.A) align 2 %a)
96     ret void
97   }
98 ;ARM-LABEL:    <test_A_4>:
99 ;THUMB2-LABEL: <test_A_4>:
100 ;NO_NEON-LABEL:<test_A_4>:
101 ;THUMB1-LABEL: <test_A_4>:
102 ;T1POST-LABEL: <test_A_4>:
103   define void @test_A_4() {
104 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
106 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
108 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
110 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
111 ;THUMB1:      adds    [[BASE]], #4
113 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
114   entry:
115     %a = alloca %struct.A, align 4
116     call void @use_A(ptr byval(%struct.A) align 4 %a)
117     ret void
118   }
119 ;ARM-LABEL:    <test_A_8>:
120 ;THUMB2-LABEL: <test_A_8>:
121 ;NO_NEON-LABEL:<test_A_8>:
122 ;THUMB1-LABEL: <test_A_8>:
123 ;T1POST-LABEL: <test_A_8>:
124   define void @test_A_8() {
125 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
127 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
129 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
130 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
132 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
133 ;THUMB1:      adds    [[BASE]], #4
135 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
136   entry:
137     %a = alloca %struct.A, align 8
138     call void @use_A(ptr byval(%struct.A) align 8 %a)
139     ret void
140   }
141 ;ARM-LABEL:    <test_A_16>:
142 ;THUMB2-LABEL: <test_A_16>:
143 ;NO_NEON-LABEL:<test_A_16>:
144 ;THUMB1-LABEL: <test_A_16>:
145 ;T1POST-LABEL: <test_A_16>:
146   define void @test_A_16() {
147 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
148 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
150 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
151 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
153 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
154 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
156 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
157 ;THUMB1:      adds    [[BASE]], #4
159 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
160   entry:
161     %a = alloca %struct.A, align 16
162     call void @use_A(ptr byval(%struct.A) align 16 %a)
163     ret void
164   }
165 ;ARM-LABEL:    <test_B_1>:
166 ;THUMB2-LABEL: <test_B_1>:
167 ;NO_NEON-LABEL:<test_B_1>:
168 ;THUMB1-LABEL: <test_B_1>:
169 ;T1POST-LABEL: <test_B_1>:
170   define void @test_B_1() {
171 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
173 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
175 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
177 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
178 ;THUMB1:      adds    [[BASE]], #1
180 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
181   entry:
182     %a = alloca %struct.B, align 1
183     call void @use_B(ptr byval(%struct.B) align 1 %a)
184     ret void
185   }
186 ;ARM-LABEL:    <test_B_2>:
187 ;THUMB2-LABEL: <test_B_2>:
188 ;NO_NEON-LABEL:<test_B_2>:
189 ;THUMB1-LABEL: <test_B_2>:
190 ;T1POST-LABEL: <test_B_2>:
191   define void @test_B_2() {
192 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
193 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
195 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
196 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
198 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
199 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
201 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
202 ;THUMB1:      adds    [[BASE]], #2
203 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
205 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
206   entry:
207     %a = alloca %struct.B, align 2
208     call void @use_B(ptr byval(%struct.B) align 2 %a)
209     ret void
210   }
211 ;ARM-LABEL:    <test_B_4>:
212 ;THUMB2-LABEL: <test_B_4>:
213 ;NO_NEON-LABEL:<test_B_4>:
214 ;THUMB1-LABEL: <test_B_4>:
215 ;T1POST-LABEL: <test_B_4>:
216   define void @test_B_4() {
217 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
218 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
220 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
221 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
223 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
224 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
226 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
227 ;THUMB1:      adds    [[BASE]], #4
228 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
230 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
231   entry:
232     %a = alloca %struct.B, align 4
233     call void @use_B(ptr byval(%struct.B) align 4 %a)
234     ret void
235   }
236 ;ARM-LABEL:    <test_B_8>:
237 ;THUMB2-LABEL: <test_B_8>:
238 ;NO_NEON-LABEL:<test_B_8>:
239 ;THUMB1-LABEL: <test_B_8>:
240 ;T1POST-LABEL: <test_B_8>:
241   define void @test_B_8() {
242 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
243 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
245 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
246 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
248 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
249 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
250 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
252 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
253 ;THUMB1:      adds    [[BASE]], #4
254 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
256 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
257   entry:
258     %a = alloca %struct.B, align 8
259     call void @use_B(ptr byval(%struct.B) align 8 %a)
260     ret void
261   }
262 ;ARM-LABEL:    <test_B_16>:
263 ;THUMB2-LABEL: <test_B_16>:
264 ;NO_NEON-LABEL:<test_B_16>:
265 ;THUMB1-LABEL: <test_B_16>:
266 ;T1POST-LABEL: <test_B_16>:
267   define void @test_B_16() {
268 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
269 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
271 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
272 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
274 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
275 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
276 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
278 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
279 ;THUMB1:      adds    [[BASE]], #4
280 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
282 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
283   entry:
284     %a = alloca %struct.B, align 16
285     call void @use_B(ptr byval(%struct.B) align 16 %a)
286     ret void
287   }
288 ;ARM-LABEL:    <test_C_1>:
289 ;THUMB2-LABEL: <test_C_1>:
290 ;NO_NEON-LABEL:<test_C_1>:
291 ;THUMB1-LABEL: <test_C_1>:
292 ;T1POST-LABEL: <test_C_1>:
293   define void @test_C_1() {
294 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
296 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
298 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
300 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
301 ;THUMB1:      adds    [[BASE]], #1
303 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
304   entry:
305     %a = alloca %struct.C, align 1
306     call void @use_C(ptr byval(%struct.C) align 1 %a)
307     ret void
308   }
309 ;ARM-LABEL:    <test_C_2>:
310 ;THUMB2-LABEL: <test_C_2>:
311 ;NO_NEON-LABEL:<test_C_2>:
312 ;THUMB1-LABEL: <test_C_2>:
313 ;T1POST-LABEL: <test_C_2>:
314   define void @test_C_2() {
315 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
316 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
318 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
319 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
321 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
322 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
324 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
325 ;THUMB1:      adds    [[BASE]], #2
326 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
328 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
329   entry:
330     %a = alloca %struct.C, align 2
331     call void @use_C(ptr byval(%struct.C) align 2 %a)
332     ret void
333   }
334 ;ARM-LABEL:    <test_C_4>:
335 ;THUMB2-LABEL: <test_C_4>:
336 ;NO_NEON-LABEL:<test_C_4>:
337 ;THUMB1-LABEL: <test_C_4>:
338 ;T1POST-LABEL: <test_C_4>:
339   define void @test_C_4() {
340 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
341 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
343 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
344 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
346 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
347 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
349 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
350 ;THUMB1:      adds    [[BASE]], #4
351 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
352 ;THUMB1:      adds    [[BASE]], #1
354 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
355   entry:
356     %a = alloca %struct.C, align 4
357     call void @use_C(ptr byval(%struct.C) align 4 %a)
358     ret void
359   }
360 ;ARM-LABEL:    <test_C_8>:
361 ;THUMB2-LABEL: <test_C_8>:
362 ;NO_NEON-LABEL:<test_C_8>:
363 ;THUMB1-LABEL: <test_C_8>:
364 ;T1POST-LABEL: <test_C_8>:
365   define void @test_C_8() {
366 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
367 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
369 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
370 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
372 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
373 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
374 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
376 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
377 ;THUMB1:      adds    [[BASE]], #4
378 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
379 ;THUMB1:      adds    [[BASE]], #1
381 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
382   entry:
383     %a = alloca %struct.C, align 8
384     call void @use_C(ptr byval(%struct.C) align 8 %a)
385     ret void
386   }
387 ;ARM-LABEL:    <test_C_16>:
388 ;THUMB2-LABEL: <test_C_16>:
389 ;NO_NEON-LABEL:<test_C_16>:
390 ;THUMB1-LABEL: <test_C_16>:
391 ;T1POST-LABEL: <test_C_16>:
392   define void @test_C_16() {
393 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
394 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
396 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
397 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
399 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
400 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
401 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
403 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
404 ;THUMB1:      adds    [[BASE]], #4
405 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
406 ;THUMB1:      adds    [[BASE]], #1
408 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
409   entry:
410     %a = alloca %struct.C, align 16
411     call void @use_C(ptr byval(%struct.C) align 16 %a)
412     ret void
413   }
414 ;ARM-LABEL:    <test_D_1>:
415 ;THUMB2-LABEL: <test_D_1>:
416 ;NO_NEON-LABEL:<test_D_1>:
417 ;THUMB1-LABEL: <test_D_1>:
418 ;T1POST-LABEL: <test_D_1>:
419   define void @test_D_1() {
420 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
421 ;ARM:         bne
423 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
424 ;THUMB2:      bne
426 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
427 ;NO_NEON:     bne
429 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
430 ;THUMB1:      adds    [[BASE]], #1
431 ;THUMB1:      bne
433 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
434   entry:
435     %a = alloca %struct.D, align 1
436     call void @use_D(ptr byval(%struct.D) align 1 %a)
437     ret void
438   }
439 ;ARM-LABEL:    <test_D_2>:
440 ;THUMB2-LABEL: <test_D_2>:
441 ;NO_NEON-LABEL:<test_D_2>:
442 ;THUMB1-LABEL: <test_D_2>:
443 ;T1POST-LABEL: <test_D_2>:
444   define void @test_D_2() {
445 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
446 ;ARM:         bne
448 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
449 ;THUMB2:      bne
451 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
452 ;NO_NEON:     bne
454 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
455 ;THUMB1:      adds    [[BASE]], #2
456 ;THUMB1:      bne
458 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
459   entry:
460     %a = alloca %struct.D, align 2
461     call void @use_D(ptr byval(%struct.D) align 2 %a)
462     ret void
463   }
464 ;ARM-LABEL:    <test_D_4>:
465 ;THUMB2-LABEL: <test_D_4>:
466 ;NO_NEON-LABEL:<test_D_4>:
467 ;THUMB1-LABEL: <test_D_4>:
468 ;T1POST-LABEL: <test_D_4>:
469   define void @test_D_4() {
470 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
471 ;ARM:         bne
473 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
474 ;THUMB2:      bne
476 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
477 ;NO_NEON:     bne
479 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
480 ;THUMB1:      adds    [[BASE]], #4
481 ;THUMB1:      bne
483 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
484   entry:
485     %a = alloca %struct.D, align 4
486     call void @use_D(ptr byval(%struct.D) align 4 %a)
487     ret void
488   }
489 ;ARM-LABEL:    <test_D_8>:
490 ;THUMB2-LABEL: <test_D_8>:
491 ;NO_NEON-LABEL:<test_D_8>:
492 ;THUMB1-LABEL: <test_D_8>:
493 ;T1POST-LABEL: <test_D_8>:
494   define void @test_D_8() {
495 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
496 ;ARM:         bne
498 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
499 ;THUMB2:      bne
501 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
502 ;NO_NEON:     bne
503 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
505 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
506 ;THUMB1:      adds    [[BASE]], #4
507 ;THUMB1:      bne
509 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
510   entry:
511     %a = alloca %struct.D, align 8
512     call void @use_D(ptr byval(%struct.D) align 8 %a)
513     ret void
514   }
515 ;ARM-LABEL:    <test_D_16>:
516 ;THUMB2-LABEL: <test_D_16>:
517 ;NO_NEON-LABEL:<test_D_16>:
518 ;THUMB1-LABEL: <test_D_16>:
519 ;T1POST-LABEL: <test_D_16>:
520   define void @test_D_16() {
521 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
522 ;ARM:         bne
524 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
525 ;THUMB2:      bne
527 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
528 ;NO_NEON:     bne
529 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
531 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
532 ;THUMB1:      adds    [[BASE]], #4
533 ;THUMB1:      bne
535 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
536   entry:
537     %a = alloca %struct.D, align 16
538     call void @use_D(ptr byval(%struct.D) align 16 %a)
539     ret void
540   }
541 ;ARM-LABEL:    <test_E_1>:
542 ;THUMB2-LABEL: <test_E_1>:
543 ;NO_NEON-LABEL:<test_E_1>:
544 ;THUMB1-LABEL: <test_E_1>:
545 ;T1POST-LABEL: <test_E_1>:
546   define void @test_E_1() {
547 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
548 ;ARM:         bne
550 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
551 ;THUMB2:      bne
553 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
554 ;NO_NEON:     bne
556 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
557 ;THUMB1:      adds    [[BASE]], #1
558 ;THUMB1:      bne
560 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
561   entry:
562     %a = alloca %struct.E, align 1
563     call void @use_E(ptr byval(%struct.E) align 1 %a)
564     ret void
565   }
566 ;ARM-LABEL:    <test_E_2>:
567 ;THUMB2-LABEL: <test_E_2>:
568 ;NO_NEON-LABEL:<test_E_2>:
569 ;THUMB1-LABEL: <test_E_2>:
570 ;T1POST-LABEL: <test_E_2>:
571   define void @test_E_2() {
572 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
573 ;ARM:         bne
574 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
576 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
577 ;THUMB2:      bne
578 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
580 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
581 ;NO_NEON:     bne
582 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
584 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
585 ;THUMB1:      adds    [[BASE]], #2
586 ;THUMB1:      bne
587 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
589 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
590   entry:
591     %a = alloca %struct.E, align 2
592     call void @use_E(ptr byval(%struct.E) align 2 %a)
593     ret void
594   }
595 ;ARM-LABEL:    <test_E_4>:
596 ;THUMB2-LABEL: <test_E_4>:
597 ;NO_NEON-LABEL:<test_E_4>:
598 ;THUMB1-LABEL: <test_E_4>:
599 ;T1POST-LABEL: <test_E_4>:
600   define void @test_E_4() {
601 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
602 ;ARM:         bne
603 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
605 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
606 ;THUMB2:      bne
607 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
609 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
610 ;NO_NEON:     bne
611 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
613 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
614 ;THUMB1:      adds    [[BASE]], #4
615 ;THUMB1:      bne
616 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
618 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
619   entry:
620     %a = alloca %struct.E, align 4
621     call void @use_E(ptr byval(%struct.E) align 4 %a)
622     ret void
623   }
624 ;ARM-LABEL:    <test_E_8>:
625 ;THUMB2-LABEL: <test_E_8>:
626 ;NO_NEON-LABEL:<test_E_8>:
627 ;THUMB1-LABEL: <test_E_8>:
628 ;T1POST-LABEL: <test_E_8>:
629   define void @test_E_8() {
630 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
631 ;ARM:         bne
632 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
634 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
635 ;THUMB2:      bne
636 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
638 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
639 ;NO_NEON:     bne
640 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
641 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
643 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
644 ;THUMB1:      adds    [[BASE]], #4
645 ;THUMB1:      bne
646 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
648 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
649   entry:
650     %a = alloca %struct.E, align 8
651     call void @use_E(ptr byval(%struct.E) align 8 %a)
652     ret void
653   }
654 ;ARM-LABEL:    <test_E_16>:
655 ;THUMB2-LABEL: <test_E_16>:
656 ;NO_NEON-LABEL:<test_E_16>:
657 ;THUMB1-LABEL: <test_E_16>:
658 ;T1POST-LABEL: <test_E_16>:
659   define void @test_E_16() {
660 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
661 ;ARM:         bne
662 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
664 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
665 ;THUMB2:      bne
666 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
668 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
669 ;NO_NEON:     bne
670 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
671 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
673 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
674 ;THUMB1:      adds    [[BASE]], #4
675 ;THUMB1:      bne
676 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
678 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
679   entry:
680     %a = alloca %struct.E, align 16
681     call void @use_E(ptr byval(%struct.E) align 16 %a)
682     ret void
683   }
684 ;ARM-LABEL:    <test_F_1>:
685 ;THUMB2-LABEL: <test_F_1>:
686 ;NO_NEON-LABEL:<test_F_1>:
687 ;THUMB1-LABEL: <test_F_1>:
688 ;T1POST-LABEL: <test_F_1>:
689   define void @test_F_1() {
690 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
691 ;ARM:         bne
693 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
694 ;THUMB2:      bne
696 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
697 ;NO_NEON:     bne
699 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
700 ;THUMB1:      adds    [[BASE]], #1
701 ;THUMB1:      bne
703 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
704   entry:
705     %a = alloca %struct.F, align 1
706     call void @use_F(ptr byval(%struct.F) align 1 %a)
707     ret void
708   }
709 ;ARM-LABEL:    <test_F_2>:
710 ;THUMB2-LABEL: <test_F_2>:
711 ;NO_NEON-LABEL:<test_F_2>:
712 ;THUMB1-LABEL: <test_F_2>:
713 ;T1POST-LABEL: <test_F_2>:
714   define void @test_F_2() {
715 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
716 ;ARM:         bne
717 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
719 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
720 ;THUMB2:      bne
721 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
723 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
724 ;NO_NEON:     bne
725 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
727 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
728 ;THUMB1:      adds    [[BASE]], #2
729 ;THUMB1:      bne
730 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
732 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
733   entry:
734     %a = alloca %struct.F, align 2
735     call void @use_F(ptr byval(%struct.F) align 2 %a)
736     ret void
737   }
738 ;ARM-LABEL:    <test_F_4>:
739 ;THUMB2-LABEL: <test_F_4>:
740 ;NO_NEON-LABEL:<test_F_4>:
741 ;THUMB1-LABEL: <test_F_4>:
742 ;T1POST-LABEL: <test_F_4>:
743   define void @test_F_4() {
744 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
745 ;ARM:         bne
746 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
748 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
749 ;THUMB2:      bne
750 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
752 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
753 ;NO_NEON:     bne
754 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
756 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
757 ;THUMB1:      adds    [[BASE]], #4
758 ;THUMB1:      bne
759 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
760 ;THUMB1:      adds    [[BASE]], #1
762 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
763   entry:
764     %a = alloca %struct.F, align 4
765     call void @use_F(ptr byval(%struct.F) align 4 %a)
766     ret void
767   }
768 ;ARM-LABEL:    <test_F_8>:
769 ;THUMB2-LABEL: <test_F_8>:
770 ;NO_NEON-LABEL:<test_F_8>:
771 ;THUMB1-LABEL: <test_F_8>:
772 ;T1POST-LABEL: <test_F_8>:
773   define void @test_F_8() {
774 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
775 ;ARM:         bne
776 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
778 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
779 ;THUMB2:      bne
780 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
782 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
783 ;NO_NEON:     bne
784 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
785 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
787 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
788 ;THUMB1:      adds    [[BASE]], #4
789 ;THUMB1:      bne
790 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
791 ;THUMB1:      adds    [[BASE]], #1
793 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
794   entry:
795     %a = alloca %struct.F, align 8
796     call void @use_F(ptr byval(%struct.F) align 8 %a)
797     ret void
798   }
799 ;ARM-LABEL:    <test_F_16>:
800 ;THUMB2-LABEL: <test_F_16>:
801 ;NO_NEON-LABEL:<test_F_16>:
802 ;THUMB1-LABEL: <test_F_16>:
803 ;T1POST-LABEL: <test_F_16>:
804   define void @test_F_16() {
805 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
806 ;ARM:         bne
807 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
809 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
810 ;THUMB2:      bne
811 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
813 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
814 ;NO_NEON:     bne
815 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
816 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
818 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
819 ;THUMB1:      adds    [[BASE]], #4
820 ;THUMB1:      bne
821 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
822 ;THUMB1:      adds    [[BASE]], #1
824 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
825   entry:
826     %a = alloca %struct.F, align 16
827     call void @use_F(ptr byval(%struct.F) align 16 %a)
828     ret void
829   }
830 ;ARM-LABEL:    <test_G_1>:
831 ;THUMB2-LABEL: <test_G_1>:
832 ;NO_NEON-LABEL:<test_G_1>:
833 ;THUMB1-LABEL: <test_G_1>:
834 ;T1POST-LABEL: <test_G_1>:
835   define void @test_G_1() {
836 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
838 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
840 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
842 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
843 ;THUMB1:      adds    [[BASE]], #1
845 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
846   entry:
847     %a = alloca %struct.G, align 1
848     call void @use_G(ptr byval(%struct.G) align 1 %a)
849     ret void
850   }
851 ;ARM-LABEL:    <test_G_2>:
852 ;THUMB2-LABEL: <test_G_2>:
853 ;NO_NEON-LABEL:<test_G_2>:
854 ;THUMB1-LABEL: <test_G_2>:
855 ;T1POST-LABEL: <test_G_2>:
856   define void @test_G_2() {
857 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
859 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
861 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
863 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
864 ;THUMB1:      adds    [[BASE]], #2
866 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
867   entry:
868     %a = alloca %struct.G, align 2
869     call void @use_G(ptr byval(%struct.G) align 2 %a)
870     ret void
871   }
872 ;ARM-LABEL:    <test_G_4>:
873 ;THUMB2-LABEL: <test_G_4>:
874 ;NO_NEON-LABEL:<test_G_4>:
875 ;THUMB1-LABEL: <test_G_4>:
876 ;T1POST-LABEL: <test_G_4>:
877   define void @test_G_4() {
878 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
880 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
882 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
884 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
885 ;THUMB1:      adds    [[BASE]], #4
887 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
888   entry:
889     %a = alloca %struct.G, align 4
890     call void @use_G(ptr byval(%struct.G) align 4 %a)
891     ret void
892   }
893 ;ARM-LABEL:    <test_G_8>:
894 ;THUMB2-LABEL: <test_G_8>:
895 ;NO_NEON-LABEL:<test_G_8>:
896 ;THUMB1-LABEL: <test_G_8>:
897 ;T1POST-LABEL: <test_G_8>:
898   define void @test_G_8() {
899 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
901 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
903 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
904 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
906 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
907 ;THUMB1:      adds    [[BASE]], #4
909 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
910   entry:
911     %a = alloca %struct.G, align 8
912     call void @use_G(ptr byval(%struct.G) align 8 %a)
913     ret void
914   }
915 ;ARM-LABEL:    <test_G_16>:
916 ;THUMB2-LABEL: <test_G_16>:
917 ;NO_NEON-LABEL:<test_G_16>:
918 ;THUMB1-LABEL: <test_G_16>:
919 ;T1POST-LABEL: <test_G_16>:
920   define void @test_G_16() {
921 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
923 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
925 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
926 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
928 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
929 ;THUMB1:      adds    [[BASE]], #4
931 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
932   entry:
933     %a = alloca %struct.G, align 16
934     call void @use_G(ptr byval(%struct.G) align 16 %a)
935     ret void
936   }
937 ;ARM-LABEL:    <test_H_1>:
938 ;THUMB2-LABEL: <test_H_1>:
939 ;NO_NEON-LABEL:<test_H_1>:
940 ;THUMB1-LABEL: <test_H_1>:
941 ;T1POST-LABEL: <test_H_1>:
942   define void @test_H_1() {
943 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
945 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
947 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
949 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
950 ;THUMB1:      adds    [[BASE]], #1
952 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
953   entry:
954     %a = alloca %struct.H, align 1
955     call void @use_H(ptr byval(%struct.H) align 1 %a)
956     ret void
957   }
958 ;ARM-LABEL:    <test_H_2>:
959 ;THUMB2-LABEL: <test_H_2>:
960 ;NO_NEON-LABEL:<test_H_2>:
961 ;THUMB1-LABEL: <test_H_2>:
962 ;T1POST-LABEL: <test_H_2>:
963   define void @test_H_2() {
964 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
966 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
968 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
970 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
971 ;THUMB1:      adds    [[BASE]], #2
973 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
974   entry:
975     %a = alloca %struct.H, align 2
976     call void @use_H(ptr byval(%struct.H) align 2 %a)
977     ret void
978   }
979 ;ARM-LABEL:    <test_H_4>:
980 ;THUMB2-LABEL: <test_H_4>:
981 ;NO_NEON-LABEL:<test_H_4>:
982 ;THUMB1-LABEL: <test_H_4>:
983 ;T1POST-LABEL: <test_H_4>:
984   define void @test_H_4() {
985 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
987 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
989 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
991 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
992 ;THUMB1:      adds    [[BASE]], #4
994 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
995   entry:
996     %a = alloca %struct.H, align 4
997     call void @use_H(ptr byval(%struct.H) align 4 %a)
998     ret void
999   }
1000 ;ARM-LABEL:    <test_H_8>:
1001 ;THUMB2-LABEL: <test_H_8>:
1002 ;NO_NEON-LABEL:<test_H_8>:
1003 ;THUMB1-LABEL: <test_H_8>:
1004 ;T1POST-LABEL: <test_H_8>:
1005   define void @test_H_8() {
1006 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1008 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1010 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1011 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1013 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1014 ;THUMB1:      adds    [[BASE]], #4
1016 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1017   entry:
1018     %a = alloca %struct.H, align 8
1019     call void @use_H(ptr byval(%struct.H) align 8 %a)
1020     ret void
1021   }
1022 ;ARM-LABEL:    <test_H_16>:
1023 ;THUMB2-LABEL: <test_H_16>:
1024 ;NO_NEON-LABEL:<test_H_16>:
1025 ;THUMB1-LABEL: <test_H_16>:
1026 ;T1POST-LABEL: <test_H_16>:
1027   define void @test_H_16() {
1028 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1030 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1032 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1033 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1035 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1036 ;THUMB1:      adds    [[BASE]], #4
1038 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1039   entry:
1040     %a = alloca %struct.H, align 16
1041     call void @use_H(ptr byval(%struct.H) align 16 %a)
1042     ret void
1043   }
1044 ;ARM-LABEL:    <test_I_1>:
1045 ;THUMB2-LABEL: <test_I_1>:
1046 ;NO_NEON-LABEL:<test_I_1>:
1047 ;THUMB1-LABEL: <test_I_1>:
1048 ;T1POST-LABEL: <test_I_1>:
1049   define void @test_I_1() {
1050 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
1052 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1054 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1056 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1057 ;THUMB1:      adds    [[BASE]], #1
1059 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1060   entry:
1061     %a = alloca %struct.I, align 1
1062     call void @use_I(ptr byval(%struct.I) align 1 %a)
1063     ret void
1064   }
1065 ;ARM-LABEL:    <test_I_2>:
1066 ;THUMB2-LABEL: <test_I_2>:
1067 ;NO_NEON-LABEL:<test_I_2>:
1068 ;THUMB1-LABEL: <test_I_2>:
1069 ;T1POST-LABEL: <test_I_2>:
1070   define void @test_I_2() {
1071 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
1073 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1075 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1077 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1078 ;THUMB1:      adds    [[BASE]], #2
1080 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1081   entry:
1082     %a = alloca %struct.I, align 2
1083     call void @use_I(ptr byval(%struct.I) align 2 %a)
1084     ret void
1085   }
1086 ;ARM-LABEL:    <test_I_4>:
1087 ;THUMB2-LABEL: <test_I_4>:
1088 ;NO_NEON-LABEL:<test_I_4>:
1089 ;THUMB1-LABEL: <test_I_4>:
1090 ;T1POST-LABEL: <test_I_4>:
1091   define void @test_I_4() {
1092 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
1094 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1096 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1098 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1099 ;THUMB1:      adds    [[BASE]], #4
1101 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1102   entry:
1103     %a = alloca %struct.I, align 4
1104     call void @use_I(ptr byval(%struct.I) align 4 %a)
1105     ret void
1106   }
1107 ;ARM-LABEL:    <test_I_8>:
1108 ;THUMB2-LABEL: <test_I_8>:
1109 ;NO_NEON-LABEL:<test_I_8>:
1110 ;THUMB1-LABEL: <test_I_8>:
1111 ;T1POST-LABEL: <test_I_8>:
1112   define void @test_I_8() {
1113 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1115 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1117 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1118 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1120 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1121 ;THUMB1:      adds    [[BASE]], #4
1123 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1124   entry:
1125     %a = alloca %struct.I, align 8
1126     call void @use_I(ptr byval(%struct.I) align 8 %a)
1127     ret void
1128   }
1129 ;ARM-LABEL:    <test_I_16>:
1130 ;THUMB2-LABEL: <test_I_16>:
1131 ;NO_NEON-LABEL:<test_I_16>:
1132 ;THUMB1-LABEL: <test_I_16>:
1133 ;T1POST-LABEL: <test_I_16>:
1134   define void @test_I_16() {
1135 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1137 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1139 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1140 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1142 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1143 ;THUMB1:      adds    [[BASE]], #4
1145 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1146   entry:
1147     %a = alloca %struct.I, align 16
1148     call void @use_I(ptr byval(%struct.I) align 16 %a)
1149     ret void
1150   }
1151 ;ARM-LABEL:    <test_J_1>:
1152 ;THUMB2-LABEL: <test_J_1>:
1153 ;NO_NEON-LABEL:<test_J_1>:
1154 ;THUMB1-LABEL: <test_J_1>:
1155 ;T1POST-LABEL: <test_J_1>:
1156   define void @test_J_1() {
1157 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
1158 ;ARM:         bne
1160 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1161 ;THUMB2:      bne
1163 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1164 ;NO_NEON:     bne
1166 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1167 ;THUMB1:      adds    [[BASE]], #1
1168 ;THUMB1:      bne
1170 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1171   entry:
1172     %a = alloca %struct.J, align 1
1173     call void @use_J(ptr byval(%struct.J) align 1 %a)
1174     ret void
1175   }
1176 ;ARM-LABEL:    <test_J_2>:
1177 ;THUMB2-LABEL: <test_J_2>:
1178 ;NO_NEON-LABEL:<test_J_2>:
1179 ;THUMB1-LABEL: <test_J_2>:
1180 ;T1POST-LABEL: <test_J_2>:
1181   define void @test_J_2() {
1182 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
1183 ;ARM:         bne
1185 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1186 ;THUMB2:      bne
1188 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1189 ;NO_NEON:     bne
1191 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1192 ;THUMB1:      adds    [[BASE]], #2
1193 ;THUMB1:      bne
1195 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1196   entry:
1197     %a = alloca %struct.J, align 2
1198     call void @use_J(ptr byval(%struct.J) align 2 %a)
1199     ret void
1200   }
1201 ;ARM-LABEL:    <test_J_4>:
1202 ;THUMB2-LABEL: <test_J_4>:
1203 ;NO_NEON-LABEL:<test_J_4>:
1204 ;THUMB1-LABEL: <test_J_4>:
1205 ;T1POST-LABEL: <test_J_4>:
1206   define void @test_J_4() {
1207 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
1208 ;ARM:         bne
1210 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1211 ;THUMB2:      bne
1213 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1214 ;NO_NEON:     bne
1216 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1217 ;THUMB1:      adds    [[BASE]], #4
1218 ;THUMB1:      bne
1220 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1221   entry:
1222     %a = alloca %struct.J, align 4
1223     call void @use_J(ptr byval(%struct.J) align 4 %a)
1224     ret void
1225   }
1226 ;ARM-LABEL:    <test_J_8>:
1227 ;THUMB2-LABEL: <test_J_8>:
1228 ;NO_NEON-LABEL:<test_J_8>:
1229 ;THUMB1-LABEL: <test_J_8>:
1230 ;T1POST-LABEL: <test_J_8>:
1231   define void @test_J_8() {
1232 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1233 ;ARM:         bne
1235 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1236 ;THUMB2:      bne
1238 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1239 ;NO_NEON:     bne
1240 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1242 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1243 ;THUMB1:      adds    [[BASE]], #4
1244 ;THUMB1:      bne
1246 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1247   entry:
1248     %a = alloca %struct.J, align 8
1249     call void @use_J(ptr byval(%struct.J) align 8 %a)
1250     ret void
1251   }
1252 ;ARM-LABEL:    <test_J_16>:
1253 ;THUMB2-LABEL: <test_J_16>:
1254 ;NO_NEON-LABEL:<test_J_16>:
1255 ;THUMB1-LABEL: <test_J_16>:
1256 ;T1POST-LABEL: <test_J_16>:
1257   define void @test_J_16() {
1258 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1259 ;ARM:         bne
1261 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1262 ;THUMB2:      bne
1264 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1265 ;NO_NEON:     bne
1266 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1268 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1269 ;THUMB1:      adds    [[BASE]], #4
1270 ;THUMB1:      bne
1272 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1273   entry:
1274     %a = alloca %struct.J, align 16
1275     call void @use_J(ptr byval(%struct.J) align 16 %a)
1276     ret void
1277   }
1278 ;ARM-LABEL:    <test_K_1>:
1279 ;THUMB2-LABEL: <test_K_1>:
1280 ;NO_NEON-LABEL:<test_K_1>:
1281 ;THUMB1-LABEL: <test_K_1>:
1282 ;T1POST-LABEL: <test_K_1>:
1283   define void @test_K_1() {
1284 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
1285 ;ARM:         bne
1287 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1288 ;THUMB2:      bne
1290 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1291 ;NO_NEON:     bne
1293 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1294 ;THUMB1:      adds    [[BASE]], #1
1295 ;THUMB1:      bne
1297 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1298   entry:
1299     %a = alloca %struct.K, align 1
1300     call void @use_K(ptr byval(%struct.K) align 1 %a)
1301     ret void
1302   }
1303 ;ARM-LABEL:    <test_K_2>:
1304 ;THUMB2-LABEL: <test_K_2>:
1305 ;NO_NEON-LABEL:<test_K_2>:
1306 ;THUMB1-LABEL: <test_K_2>:
1307 ;T1POST-LABEL: <test_K_2>:
1308   define void @test_K_2() {
1309 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
1310 ;ARM:         bne
1312 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1313 ;THUMB2:      bne
1315 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1316 ;NO_NEON:     bne
1318 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1319 ;THUMB1:      adds    [[BASE]], #2
1320 ;THUMB1:      bne
1322 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1323   entry:
1324     %a = alloca %struct.K, align 2
1325     call void @use_K(ptr byval(%struct.K) align 2 %a)
1326     ret void
1327   }
1328 ;ARM-LABEL:    <test_K_4>:
1329 ;THUMB2-LABEL: <test_K_4>:
1330 ;NO_NEON-LABEL:<test_K_4>:
1331 ;THUMB1-LABEL: <test_K_4>:
1332 ;T1POST-LABEL: <test_K_4>:
1333   define void @test_K_4() {
1334 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
1335 ;ARM:         bne
1337 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1338 ;THUMB2:      bne
1340 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1341 ;NO_NEON:     bne
1343 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1344 ;THUMB1:      adds    [[BASE]], #4
1345 ;THUMB1:      bne
1347 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1348   entry:
1349     %a = alloca %struct.K, align 4
1350     call void @use_K(ptr byval(%struct.K) align 4 %a)
1351     ret void
1352   }
1353 ;ARM-LABEL:    <test_K_8>:
1354 ;THUMB2-LABEL: <test_K_8>:
1355 ;NO_NEON-LABEL:<test_K_8>:
1356 ;THUMB1-LABEL: <test_K_8>:
1357 ;T1POST-LABEL: <test_K_8>:
1358   define void @test_K_8() {
1359 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1360 ;ARM:         bne
1362 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1363 ;THUMB2:      bne
1365 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1366 ;NO_NEON:     bne
1367 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1369 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1370 ;THUMB1:      adds    [[BASE]], #4
1371 ;THUMB1:      bne
1373 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1374   entry:
1375     %a = alloca %struct.K, align 8
1376     call void @use_K(ptr byval(%struct.K) align 8 %a)
1377     ret void
1378   }
1379 ;ARM-LABEL:    <test_K_16>:
1380 ;THUMB2-LABEL: <test_K_16>:
1381 ;NO_NEON-LABEL:<test_K_16>:
1382 ;THUMB1-LABEL: <test_K_16>:
1383 ;T1POST-LABEL: <test_K_16>:
1384   define void @test_K_16() {
1385 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1386 ;ARM:         bne
1388 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1389 ;THUMB2:      bne
1391 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1392 ;NO_NEON:     bne
1393 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1395 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1396 ;THUMB1:      adds    [[BASE]], #4
1397 ;THUMB1:      bne
1399 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1400   entry:
1401     %a = alloca %struct.K, align 16
1402     call void @use_K(ptr byval(%struct.K) align 16 %a)
1403     ret void
1404   }
1405 ;ARM-LABEL:    <test_L_1>:
1406 ;THUMB2-LABEL: <test_L_1>:
1407 ;NO_NEON-LABEL:<test_L_1>:
1408 ;THUMB1-LABEL: <test_L_1>:
1409 ;T1POST-LABEL: <test_L_1>:
1410   define void @test_L_1() {
1411 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
1412 ;ARM:         bne
1414 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1415 ;THUMB2:      bne
1417 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1418 ;NO_NEON:     bne
1420 ;THUMB1:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1421 ;THUMB1:      adds    [[BASE]], #1
1422 ;THUMB1:      bne
1424 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1425   entry:
1426     %a = alloca %struct.L, align 1
1427     call void @use_L(ptr byval(%struct.L) align 1 %a)
1428     ret void
1429   }
1430 ;ARM-LABEL:    <test_L_2>:
1431 ;THUMB2-LABEL: <test_L_2>:
1432 ;NO_NEON-LABEL:<test_L_2>:
1433 ;THUMB1-LABEL: <test_L_2>:
1434 ;T1POST-LABEL: <test_L_2>:
1435   define void @test_L_2() {
1436 ;ARM:         ldrh    r{{[0-9]+}}, [{{.*}}], #2
1437 ;ARM:         bne
1439 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1440 ;THUMB2:      bne
1442 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1443 ;NO_NEON:     bne
1445 ;THUMB1:      ldrh    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1446 ;THUMB1:      adds    [[BASE]], #2
1447 ;THUMB1:      bne
1449 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1450   entry:
1451     %a = alloca %struct.L, align 2
1452     call void @use_L(ptr byval(%struct.L) align 2 %a)
1453     ret void
1454   }
1455 ;ARM-LABEL:    <test_L_4>:
1456 ;THUMB2-LABEL: <test_L_4>:
1457 ;NO_NEON-LABEL:<test_L_4>:
1458 ;THUMB1-LABEL: <test_L_4>:
1459 ;T1POST-LABEL: <test_L_4>:
1460   define void @test_L_4() {
1461 ;ARM:         ldr     r{{[0-9]+}}, [{{.*}}], #4
1462 ;ARM:         bne
1464 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1465 ;THUMB2:      bne
1467 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1468 ;NO_NEON:     bne
1470 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1471 ;THUMB1:      adds    [[BASE]], #4
1472 ;THUMB1:      bne
1474 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1475   entry:
1476     %a = alloca %struct.L, align 4
1477     call void @use_L(ptr byval(%struct.L) align 4 %a)
1478     ret void
1479   }
1480 ;ARM-LABEL:    <test_L_8>:
1481 ;THUMB2-LABEL: <test_L_8>:
1482 ;NO_NEON-LABEL:<test_L_8>:
1483 ;THUMB1-LABEL: <test_L_8>:
1484 ;T1POST-LABEL: <test_L_8>:
1485   define void @test_L_8() {
1486 ;ARM:         vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1487 ;ARM:         bne
1489 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1490 ;THUMB2:      bne
1492 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1493 ;NO_NEON:     bne
1494 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1496 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1497 ;THUMB1:      adds    [[BASE]], #4
1498 ;THUMB1:      bne
1500 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [{{.*}}]!
1501   entry:
1502     %a = alloca %struct.L, align 8
1503     call void @use_L(ptr byval(%struct.L) align 8 %a)
1504     ret void
1505   }
1506 ;ARM-LABEL:    <test_L_16>:
1507 ;THUMB2-LABEL: <test_L_16>:
1508 ;NO_NEON-LABEL:<test_L_16>:
1509 ;THUMB1-LABEL: <test_L_16>:
1510 ;T1POST-LABEL: <test_L_16>:
1511   define void @test_L_16() {
1512 ;ARM:         vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1513 ;ARM:         bne
1515 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1516 ;THUMB2:      bne
1518 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1519 ;NO_NEON:     bne
1520 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1522 ;THUMB1:      ldr     r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1523 ;THUMB1:      adds    [[BASE]], #4
1524 ;THUMB1:      bne
1526 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!
1527   entry:
1528     %a = alloca %struct.L, align 16
1529     call void @use_L(ptr byval(%struct.L) align 16 %a)
1530     ret void
1531   }
1532 ;V8MBASE-LABEL: <test_M>:
1533   define void @test_M() {
1535 ;V8MBASE:      ldrb    r{{[0-9]+}}, [[[BASE:r[0-9]+]]]
1536 ;V8MBASE:      adds    [[BASE]], #1
1537 ;V8MBASE-NOT:  movw
1538   entry:
1539     %a = alloca %struct.M, align 1
1540     call void @use_M(ptr byval(%struct.M) align 1 %a)
1541     ret void
1542   }
1543 ;V8MBASE-LABEL: <test_N>:
1544   define void @test_N() {
1546 ;V8MBASE:      movw    r{{[0-9]+}}, #{{[0-9]+}}
1547 ;V8MBASE-NOT:  b       #{{[0-9]+}}
1548   entry:
1549     %a = alloca %struct.N, align 1
1550     call void @use_N(ptr byval(%struct.N) align 1 %a)
1551     ret void
1552   }