Home | History | Annotate | Download | only in ARM
      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   }
   1524