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