[ARM] Enable shrink-wrapping by default.
[oota-llvm.git] / test / CodeGen / ARM / struct_byval_arm_t1_t2.ll
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
10
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
22
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)
47
48 ;ARM-LABEL:    test_A_1:
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
55
56 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
57
58 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
59
60 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
61 ;THUMB1:      adds    [[BASE]], #1
62
63 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
64   entry:
65     %a = alloca %struct.A, align 1
66     call void @use_A(%struct.A* byval align 1 %a)
67     ret void
68   }
69 ;ARM-LABEL:    test_A_2:
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
76
77 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
78
79 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
80
81 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
82 ;THUMB1:      adds    [[BASE]], #2
83
84 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
85   entry:
86     %a = alloca %struct.A, align 2
87     call void @use_A(%struct.A* byval align 2 %a)
88     ret void
89   }
90 ;ARM-LABEL:    test_A_4:
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
97
98 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
99
100 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
101
102 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
103 ;THUMB1:      adds    [[BASE]], #4
104
105 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
106   entry:
107     %a = alloca %struct.A, align 4
108     call void @use_A(%struct.A* byval align 4 %a)
109     ret void
110   }
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{{.*}}]!
118
119 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
120
121 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
122 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
123
124 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
125 ;THUMB1:      adds    [[BASE]], #4
126
127 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
128   entry:
129     %a = alloca %struct.A, align 8
130     call void @use_A(%struct.A* byval align 8 %a)
131     ret void
132   }
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
141
142 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
143 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
144
145 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
146 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
147
148 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
149 ;THUMB1:      adds    [[BASE]], #4
150
151 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
152   entry:
153     %a = alloca %struct.A, align 16
154     call void @use_A(%struct.A* byval align 16 %a)
155     ret void
156   }
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
164
165 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
166
167 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
168
169 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
170 ;THUMB1:      adds    [[BASE]], #1
171
172 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
173   entry:
174     %a = alloca %struct.B, align 1
175     call void @use_B(%struct.B* byval align 1 %a)
176     ret void
177   }
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
186
187 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
188 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
189
190 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
191 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
192
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]+]]{{\]}}
196
197 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
198   entry:
199     %a = alloca %struct.B, align 2
200     call void @use_B(%struct.B* byval align 2 %a)
201     ret void
202   }
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
211
212 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
213 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
214
215 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
216 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
217
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]+]]{{\]}}
221
222 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
223   entry:
224     %a = alloca %struct.B, align 4
225     call void @use_B(%struct.B* byval align 4 %a)
226     ret void
227   }
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
236
237 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
238 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
239
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{{.*}}]!
243
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]+]]{{\]}}
247
248 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
249   entry:
250     %a = alloca %struct.B, align 8
251     call void @use_B(%struct.B* byval align 8 %a)
252     ret void
253   }
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
262
263 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
264 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
265
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{{.*}}]!
269
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]+]]{{\]}}
273
274 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
275   entry:
276     %a = alloca %struct.B, align 16
277     call void @use_B(%struct.B* byval align 16 %a)
278     ret void
279   }
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
287
288 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
289
290 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
291
292 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
293 ;THUMB1:      adds    [[BASE]], #1
294
295 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
296   entry:
297     %a = alloca %struct.C, align 1
298     call void @use_C(%struct.C* byval align 1 %a)
299     ret void
300   }
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
309
310 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
311 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
312
313 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
314 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
315
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]+]]{{\]}}
319
320 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
321   entry:
322     %a = alloca %struct.C, align 2
323     call void @use_C(%struct.C* byval align 2 %a)
324     ret void
325   }
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
334
335 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
336 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
337
338 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
339 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
340
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
345
346 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
347   entry:
348     %a = alloca %struct.C, align 4
349     call void @use_C(%struct.C* byval align 4 %a)
350     ret void
351   }
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
360
361 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
362 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
363
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{{.*}}]!
367
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
372
373 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
374   entry:
375     %a = alloca %struct.C, align 8
376     call void @use_C(%struct.C* byval align 8 %a)
377     ret void
378   }
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
387
388 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
389 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
390
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{{.*}}]!
394
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
399
400 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
401   entry:
402     %a = alloca %struct.C, align 16
403     call void @use_C(%struct.C* byval align 16 %a)
404     ret void
405   }
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
413 ;ARM:         bne
414
415 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
416 ;THUMB2:      bne
417
418 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
419 ;NO_NEON:     bne
420
421 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
422 ;THUMB1:      adds    [[BASE]], #1
423 ;THUMB1:      bne
424
425 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
426   entry:
427     %a = alloca %struct.D, align 1
428     call void @use_D(%struct.D* byval align 1 %a)
429     ret void
430   }
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
438 ;ARM:         bne
439
440 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
441 ;THUMB2:      bne
442
443 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
444 ;NO_NEON:     bne
445
446 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
447 ;THUMB1:      adds    [[BASE]], #2
448 ;THUMB1:      bne
449
450 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
451   entry:
452     %a = alloca %struct.D, align 2
453     call void @use_D(%struct.D* byval align 2 %a)
454     ret void
455   }
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
463 ;ARM:         bne
464
465 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
466 ;THUMB2:      bne
467
468 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
469 ;NO_NEON:     bne
470
471 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
472 ;THUMB1:      adds    [[BASE]], #4
473 ;THUMB1:      bne
474
475 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
476   entry:
477     %a = alloca %struct.D, align 4
478     call void @use_D(%struct.D* byval align 4 %a)
479     ret void
480   }
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{{.*}}]!
488 ;ARM:         bne
489
490 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
491 ;THUMB2:      bne
492
493 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
494 ;NO_NEON:     bne
495 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
496
497 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
498 ;THUMB1:      adds    [[BASE]], #4
499 ;THUMB1:      bne
500
501 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
502   entry:
503     %a = alloca %struct.D, align 8
504     call void @use_D(%struct.D* byval align 8 %a)
505     ret void
506   }
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{{.*}}]!
514 ;ARM:         bne
515
516 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
517 ;THUMB2:      bne
518
519 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
520 ;NO_NEON:     bne
521 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
522
523 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
524 ;THUMB1:      adds    [[BASE]], #4
525 ;THUMB1:      bne
526
527 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
528   entry:
529     %a = alloca %struct.D, align 16
530     call void @use_D(%struct.D* byval align 16 %a)
531     ret void
532   }
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
540 ;ARM:         bne
541
542 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
543 ;THUMB2:      bne
544
545 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
546 ;NO_NEON:     bne
547
548 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
549 ;THUMB1:      adds    [[BASE]], #1
550 ;THUMB1:      bne
551
552 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
553   entry:
554     %a = alloca %struct.E, align 1
555     call void @use_E(%struct.E* byval align 1 %a)
556     ret void
557   }
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
565 ;ARM:         bne
566 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
567
568 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
569 ;THUMB2:      bne
570 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
571
572 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
573 ;NO_NEON:     bne
574 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
575
576 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
577 ;THUMB1:      adds    [[BASE]], #2
578 ;THUMB1:      bne
579 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
580
581 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
582   entry:
583     %a = alloca %struct.E, align 2
584     call void @use_E(%struct.E* byval align 2 %a)
585     ret void
586   }
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
594 ;ARM:         bne
595 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
596
597 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
598 ;THUMB2:      bne
599 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
600
601 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
602 ;NO_NEON:     bne
603 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
604
605 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
606 ;THUMB1:      adds    [[BASE]], #4
607 ;THUMB1:      bne
608 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
609
610 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
611   entry:
612     %a = alloca %struct.E, align 4
613     call void @use_E(%struct.E* byval align 4 %a)
614     ret void
615   }
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{{.*}}]!
623 ;ARM:         bne
624 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
625
626 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
627 ;THUMB2:      bne
628 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
629
630 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
631 ;NO_NEON:     bne
632 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
633 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
634
635 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
636 ;THUMB1:      adds    [[BASE]], #4
637 ;THUMB1:      bne
638 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
639
640 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
641   entry:
642     %a = alloca %struct.E, align 8
643     call void @use_E(%struct.E* byval align 8 %a)
644     ret void
645   }
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{{.*}}]!
653 ;ARM:         bne
654 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
655
656 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
657 ;THUMB2:      bne
658 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
659
660 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
661 ;NO_NEON:     bne
662 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
663 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
664
665 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
666 ;THUMB1:      adds    [[BASE]], #4
667 ;THUMB1:      bne
668 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
669
670 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
671   entry:
672     %a = alloca %struct.E, align 16
673     call void @use_E(%struct.E* byval align 16 %a)
674     ret void
675   }
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
683 ;ARM:         bne
684
685 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
686 ;THUMB2:      bne
687
688 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
689 ;NO_NEON:     bne
690
691 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
692 ;THUMB1:      adds    [[BASE]], #1
693 ;THUMB1:      bne
694
695 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
696   entry:
697     %a = alloca %struct.F, align 1
698     call void @use_F(%struct.F* byval align 1 %a)
699     ret void
700   }
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
708 ;ARM:         bne
709 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
710
711 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
712 ;THUMB2:      bne
713 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
714
715 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
716 ;NO_NEON:     bne
717 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
718
719 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
720 ;THUMB1:      adds    [[BASE]], #2
721 ;THUMB1:      bne
722 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
723
724 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
725   entry:
726     %a = alloca %struct.F, align 2
727     call void @use_F(%struct.F* byval align 2 %a)
728     ret void
729   }
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
737 ;ARM:         bne
738 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
739
740 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
741 ;THUMB2:      bne
742 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
743
744 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
745 ;NO_NEON:     bne
746 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
747
748 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
749 ;THUMB1:      adds    [[BASE]], #4
750 ;THUMB1:      bne
751 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
752 ;THUMB1:      adds    [[BASE]], #1
753
754 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
755   entry:
756     %a = alloca %struct.F, align 4
757     call void @use_F(%struct.F* byval align 4 %a)
758     ret void
759   }
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{{.*}}]!
767 ;ARM:         bne
768 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
769
770 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
771 ;THUMB2:      bne
772 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
773
774 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
775 ;NO_NEON:     bne
776 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
777 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
778
779 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
780 ;THUMB1:      adds    [[BASE]], #4
781 ;THUMB1:      bne
782 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
783 ;THUMB1:      adds    [[BASE]], #1
784
785 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
786   entry:
787     %a = alloca %struct.F, align 8
788     call void @use_F(%struct.F* byval align 8 %a)
789     ret void
790   }
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{{.*}}]!
798 ;ARM:         bne
799 ;ARM:         ldrb    r{{[0-9]+}}, [{{.*}}], #1
800
801 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
802 ;THUMB2:      bne
803 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
804
805 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
806 ;NO_NEON:     bne
807 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
808 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
809
810 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
811 ;THUMB1:      adds    [[BASE]], #4
812 ;THUMB1:      bne
813 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
814 ;THUMB1:      adds    [[BASE]], #1
815
816 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
817   entry:
818     %a = alloca %struct.F, align 16
819     call void @use_F(%struct.F* byval align 16 %a)
820     ret void
821   }
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
829
830 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
831
832 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
833
834 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
835 ;THUMB1:      adds    [[BASE]], #1
836
837 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
838   entry:
839     %a = alloca %struct.G, align 1
840     call void @use_G(%struct.G* byval align 1 %a)
841     ret void
842   }
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
850
851 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
852
853 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
854
855 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
856 ;THUMB1:      adds    [[BASE]], #2
857
858 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
859   entry:
860     %a = alloca %struct.G, align 2
861     call void @use_G(%struct.G* byval align 2 %a)
862     ret void
863   }
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
871
872 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
873
874 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
875
876 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
877 ;THUMB1:      adds    [[BASE]], #4
878
879 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
880   entry:
881     %a = alloca %struct.G, align 4
882     call void @use_G(%struct.G* byval align 4 %a)
883     ret void
884   }
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{{.*}}]!
892
893 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
894
895 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
896 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
897
898 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
899 ;THUMB1:      adds    [[BASE]], #4
900
901 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
902   entry:
903     %a = alloca %struct.G, align 8
904     call void @use_G(%struct.G* byval align 8 %a)
905     ret void
906   }
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{{.*}}]!
914
915 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
916
917 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
918 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
919
920 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
921 ;THUMB1:      adds    [[BASE]], #4
922
923 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
924   entry:
925     %a = alloca %struct.G, align 16
926     call void @use_G(%struct.G* byval align 16 %a)
927     ret void
928   }
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
936
937 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
938
939 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
940
941 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
942 ;THUMB1:      adds    [[BASE]], #1
943
944 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
945   entry:
946     %a = alloca %struct.H, align 1
947     call void @use_H(%struct.H* byval align 1 %a)
948     ret void
949   }
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
957
958 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
959
960 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
961
962 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
963 ;THUMB1:      adds    [[BASE]], #2
964
965 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
966   entry:
967     %a = alloca %struct.H, align 2
968     call void @use_H(%struct.H* byval align 2 %a)
969     ret void
970   }
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
978
979 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
980
981 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
982
983 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
984 ;THUMB1:      adds    [[BASE]], #4
985
986 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
987   entry:
988     %a = alloca %struct.H, align 4
989     call void @use_H(%struct.H* byval align 4 %a)
990     ret void
991   }
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{{.*}}]!
999
1000 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1001
1002 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1003 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1004
1005 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1006 ;THUMB1:      adds    [[BASE]], #4
1007
1008 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1009   entry:
1010     %a = alloca %struct.H, align 8
1011     call void @use_H(%struct.H* byval align 8 %a)
1012     ret void
1013   }
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{{.*}}]!
1021
1022 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1023
1024 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1025 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1026
1027 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1028 ;THUMB1:      adds    [[BASE]], #4
1029
1030 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1031   entry:
1032     %a = alloca %struct.H, align 16
1033     call void @use_H(%struct.H* byval align 16 %a)
1034     ret void
1035   }
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
1043
1044 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1045
1046 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1047
1048 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1049 ;THUMB1:      adds    [[BASE]], #1
1050
1051 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1052   entry:
1053     %a = alloca %struct.I, align 1
1054     call void @use_I(%struct.I* byval align 1 %a)
1055     ret void
1056   }
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
1064
1065 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1066
1067 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1068
1069 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1070 ;THUMB1:      adds    [[BASE]], #2
1071
1072 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1073   entry:
1074     %a = alloca %struct.I, align 2
1075     call void @use_I(%struct.I* byval align 2 %a)
1076     ret void
1077   }
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
1085
1086 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1087
1088 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1089
1090 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1091 ;THUMB1:      adds    [[BASE]], #4
1092
1093 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1094   entry:
1095     %a = alloca %struct.I, align 4
1096     call void @use_I(%struct.I* byval align 4 %a)
1097     ret void
1098   }
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{{.*}}]!
1106
1107 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1108
1109 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1110 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1111
1112 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1113 ;THUMB1:      adds    [[BASE]], #4
1114
1115 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1116   entry:
1117     %a = alloca %struct.I, align 8
1118     call void @use_I(%struct.I* byval align 8 %a)
1119     ret void
1120   }
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{{.*}}]!
1128
1129 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1130
1131 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1132 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1133
1134 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1135 ;THUMB1:      adds    [[BASE]], #4
1136
1137 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1138   entry:
1139     %a = alloca %struct.I, align 16
1140     call void @use_I(%struct.I* byval align 16 %a)
1141     ret void
1142   }
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
1150 ;ARM:         bne
1151
1152 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1153 ;THUMB2:      bne
1154
1155 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1156 ;NO_NEON:     bne
1157
1158 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1159 ;THUMB1:      adds    [[BASE]], #1
1160 ;THUMB1:      bne
1161
1162 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1163   entry:
1164     %a = alloca %struct.J, align 1
1165     call void @use_J(%struct.J* byval align 1 %a)
1166     ret void
1167   }
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
1175 ;ARM:         bne
1176
1177 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1178 ;THUMB2:      bne
1179
1180 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1181 ;NO_NEON:     bne
1182
1183 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1184 ;THUMB1:      adds    [[BASE]], #2
1185 ;THUMB1:      bne
1186
1187 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1188   entry:
1189     %a = alloca %struct.J, align 2
1190     call void @use_J(%struct.J* byval align 2 %a)
1191     ret void
1192   }
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
1200 ;ARM:         bne
1201
1202 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1203 ;THUMB2:      bne
1204
1205 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1206 ;NO_NEON:     bne
1207
1208 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1209 ;THUMB1:      adds    [[BASE]], #4
1210 ;THUMB1:      bne
1211
1212 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1213   entry:
1214     %a = alloca %struct.J, align 4
1215     call void @use_J(%struct.J* byval align 4 %a)
1216     ret void
1217   }
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{{.*}}]!
1225 ;ARM:         bne
1226
1227 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1228 ;THUMB2:      bne
1229
1230 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1231 ;NO_NEON:     bne
1232 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1233
1234 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1235 ;THUMB1:      adds    [[BASE]], #4
1236 ;THUMB1:      bne
1237
1238 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1239   entry:
1240     %a = alloca %struct.J, align 8
1241     call void @use_J(%struct.J* byval align 8 %a)
1242     ret void
1243   }
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{{.*}}]!
1251 ;ARM:         bne
1252
1253 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1254 ;THUMB2:      bne
1255
1256 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1257 ;NO_NEON:     bne
1258 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1259
1260 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1261 ;THUMB1:      adds    [[BASE]], #4
1262 ;THUMB1:      bne
1263
1264 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1265   entry:
1266     %a = alloca %struct.J, align 16
1267     call void @use_J(%struct.J* byval align 16 %a)
1268     ret void
1269   }
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
1277 ;ARM:         bne
1278
1279 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1280 ;THUMB2:      bne
1281
1282 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1283 ;NO_NEON:     bne
1284
1285 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1286 ;THUMB1:      adds    [[BASE]], #1
1287 ;THUMB1:      bne
1288
1289 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1290   entry:
1291     %a = alloca %struct.K, align 1
1292     call void @use_K(%struct.K* byval align 1 %a)
1293     ret void
1294   }
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
1302 ;ARM:         bne
1303
1304 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1305 ;THUMB2:      bne
1306
1307 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1308 ;NO_NEON:     bne
1309
1310 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1311 ;THUMB1:      adds    [[BASE]], #2
1312 ;THUMB1:      bne
1313
1314 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1315   entry:
1316     %a = alloca %struct.K, align 2
1317     call void @use_K(%struct.K* byval align 2 %a)
1318     ret void
1319   }
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
1327 ;ARM:         bne
1328
1329 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1330 ;THUMB2:      bne
1331
1332 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1333 ;NO_NEON:     bne
1334
1335 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1336 ;THUMB1:      adds    [[BASE]], #4
1337 ;THUMB1:      bne
1338
1339 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1340   entry:
1341     %a = alloca %struct.K, align 4
1342     call void @use_K(%struct.K* byval align 4 %a)
1343     ret void
1344   }
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{{.*}}]!
1352 ;ARM:         bne
1353
1354 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1355 ;THUMB2:      bne
1356
1357 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1358 ;NO_NEON:     bne
1359 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1360
1361 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1362 ;THUMB1:      adds    [[BASE]], #4
1363 ;THUMB1:      bne
1364
1365 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1366   entry:
1367     %a = alloca %struct.K, align 8
1368     call void @use_K(%struct.K* byval align 8 %a)
1369     ret void
1370   }
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{{.*}}]!
1378 ;ARM:         bne
1379
1380 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1381 ;THUMB2:      bne
1382
1383 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1384 ;NO_NEON:     bne
1385 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1386
1387 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1388 ;THUMB1:      adds    [[BASE]], #4
1389 ;THUMB1:      bne
1390
1391 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1392   entry:
1393     %a = alloca %struct.K, align 16
1394     call void @use_K(%struct.K* byval align 16 %a)
1395     ret void
1396   }
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
1404 ;ARM:         bne
1405
1406 ;THUMB2:      ldrb    r{{[0-9]+}}, [{{.*}}], #1
1407 ;THUMB2:      bne
1408
1409 ;NO_NEON:     ldrb    r{{[0-9]+}}, [{{.*}}], #1
1410 ;NO_NEON:     bne
1411
1412 ;THUMB1:      ldrb    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1413 ;THUMB1:      adds    [[BASE]], #1
1414 ;THUMB1:      bne
1415
1416 ;T1POST-NOT:  ldrb    r{{[0-9]+}}, [{{.*}}], #1
1417   entry:
1418     %a = alloca %struct.L, align 1
1419     call void @use_L(%struct.L* byval align 1 %a)
1420     ret void
1421   }
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
1429 ;ARM:         bne
1430
1431 ;THUMB2:      ldrh    r{{[0-9]+}}, [{{.*}}], #2
1432 ;THUMB2:      bne
1433
1434 ;NO_NEON:     ldrh    r{{[0-9]+}}, [{{.*}}], #2
1435 ;NO_NEON:     bne
1436
1437 ;THUMB1:      ldrh    r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1438 ;THUMB1:      adds    [[BASE]], #2
1439 ;THUMB1:      bne
1440
1441 ;T1POST-NOT:  ldrh    r{{[0-9]+}}, [{{.*}}], #2
1442   entry:
1443     %a = alloca %struct.L, align 2
1444     call void @use_L(%struct.L* byval align 2 %a)
1445     ret void
1446   }
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
1454 ;ARM:         bne
1455
1456 ;THUMB2:      ldr     r{{[0-9]+}}, [{{.*}}], #4
1457 ;THUMB2:      bne
1458
1459 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1460 ;NO_NEON:     bne
1461
1462 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1463 ;THUMB1:      adds    [[BASE]], #4
1464 ;THUMB1:      bne
1465
1466 ;T1POST-NOT:  ldr     r{{[0-9]+}}, [{{.*}}], #4
1467   entry:
1468     %a = alloca %struct.L, align 4
1469     call void @use_L(%struct.L* byval align 4 %a)
1470     ret void
1471   }
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{{.*}}]!
1479 ;ARM:         bne
1480
1481 ;THUMB2:      vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1482 ;THUMB2:      bne
1483
1484 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1485 ;NO_NEON:     bne
1486 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1487
1488 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1489 ;THUMB1:      adds    [[BASE]], #4
1490 ;THUMB1:      bne
1491
1492 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}}, [r{{.*}}]!
1493   entry:
1494     %a = alloca %struct.L, align 8
1495     call void @use_L(%struct.L* byval align 8 %a)
1496     ret void
1497   }
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{{.*}}]!
1505 ;ARM:         bne
1506
1507 ;THUMB2:      vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1508 ;THUMB2:      bne
1509
1510 ;NO_NEON:     ldr     r{{[0-9]+}}, [{{.*}}], #4
1511 ;NO_NEON:     bne
1512 ;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1513
1514 ;THUMB1:      ldr     r{{[0-9]+}}, {{\[}}[[BASE:r[0-9]+]]{{\]}}
1515 ;THUMB1:      adds    [[BASE]], #4
1516 ;THUMB1:      bne
1517
1518 ;T1POST-NOT:  vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [r{{.*}}]!
1519   entry:
1520     %a = alloca %struct.L, align 16
1521     call void @use_L(%struct.L* byval align 16 %a)
1522     ret void
1523   }