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