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