• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
24declare void @use_A(%struct.A* byval)
25%struct.B = type <{ [ 10 x i32 ], i8 }> ; 41 bytes
26declare void @use_B(%struct.B* byval)
27%struct.C = type <{ [ 10 x i32 ], [ 3 x i8 ] }> ; 43 bytes
28declare void @use_C(%struct.C* byval)
29%struct.D = type <{ [ 100 x i32 ] }> ; 400 bytes
30declare void @use_D(%struct.D* byval)
31%struct.E = type <{ [ 100 x i32 ], i8 }> ; 401 bytes
32declare void @use_E(%struct.E* byval)
33%struct.F = type <{ [ 100 x i32 ], [ 3 x i8 ] }> ; 403 bytes
34declare void @use_F(%struct.F* byval)
35%struct.G = type  { [ 10 x i32 ] }  ; 40 bytes
36declare void @use_G(%struct.G* byval)
37%struct.H = type  { [ 10 x i32 ], i8 }  ; 41 bytes
38declare void @use_H(%struct.H* byval)
39%struct.I = type  { [ 10 x i32 ], [ 3 x i8 ] }  ; 43 bytes
40declare void @use_I(%struct.I* byval)
41%struct.J = type  { [ 100 x i32 ] }  ; 400 bytes
42declare void @use_J(%struct.J* byval)
43%struct.K = type  { [ 100 x i32 ], i8 }  ; 401 bytes
44declare void @use_K(%struct.K* byval)
45%struct.L = type  { [ 100 x i32 ], [ 3 x i8 ] }  ; 403 bytes
46declare 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  }
1524