1;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump --triple=armv7-none-linux-gnueabi -d - | 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 -d - | 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 -d - | 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 -d - > %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 -d - > %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(%struct.A)) 29%struct.B = type <{ [ 10 x i32 ], i8 }> ; 41 bytes 30declare void @use_B(%struct.B* byval(%struct.B)) 31%struct.C = type <{ [ 10 x i32 ], [ 3 x i8 ] }> ; 43 bytes 32declare void @use_C(%struct.C* byval(%struct.C)) 33%struct.D = type <{ [ 100 x i32 ] }> ; 400 bytes 34declare void @use_D(%struct.D* byval(%struct.D)) 35%struct.E = type <{ [ 100 x i32 ], i8 }> ; 401 bytes 36declare void @use_E(%struct.E* byval(%struct.E)) 37%struct.F = type <{ [ 100 x i32 ], [ 3 x i8 ] }> ; 403 bytes 38declare void @use_F(%struct.F* byval(%struct.F)) 39%struct.G = type { [ 10 x i32 ] } ; 40 bytes 40declare void @use_G(%struct.G* byval(%struct.G)) 41%struct.H = type { [ 10 x i32 ], i8 } ; 41 bytes 42declare void @use_H(%struct.H* byval(%struct.H)) 43%struct.I = type { [ 10 x i32 ], [ 3 x i8 ] } ; 43 bytes 44declare void @use_I(%struct.I* byval(%struct.I)) 45%struct.J = type { [ 100 x i32 ] } ; 400 bytes 46declare void @use_J(%struct.J* byval(%struct.J)) 47%struct.K = type { [ 100 x i32 ], i8 } ; 401 bytes 48declare void @use_K(%struct.K* byval(%struct.K)) 49%struct.L = type { [ 100 x i32 ], [ 3 x i8 ] } ; 403 bytes 50declare void @use_L(%struct.L* byval(%struct.L)) 51%struct.M = type { [ 64 x i8 ] } ; 64 bytes 52declare void @use_M(%struct.M* byval(%struct.M)) 53%struct.N = type { [ 128 x i8 ] } ; 128 bytes 54declare void @use_N(%struct.N* byval(%struct.N)) 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(%struct.A) 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(%struct.A) 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(%struct.A) 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(%struct.A) 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(%struct.A) 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(%struct.B) 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(%struct.B) 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(%struct.B) 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(%struct.B) 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(%struct.B) 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(%struct.C) 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(%struct.C) 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(%struct.C) 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(%struct.C) 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(%struct.C) 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(%struct.D) 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(%struct.D) 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(%struct.D) 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(%struct.D) 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(%struct.D) 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(%struct.E) 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(%struct.E) 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(%struct.E) 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(%struct.E) 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(%struct.E) 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(%struct.F) 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(%struct.F) 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(%struct.F) 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(%struct.F) 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(%struct.F) 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(%struct.G) 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(%struct.G) 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(%struct.G) 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(%struct.G) 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(%struct.G) 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(%struct.H) 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(%struct.H) 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(%struct.H) 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(%struct.H) 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(%struct.H) 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(%struct.I) 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(%struct.I) 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(%struct.I) 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(%struct.I) 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(%struct.I) 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(%struct.J) 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(%struct.J) 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(%struct.J) 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(%struct.J) 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(%struct.J) 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(%struct.K) 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(%struct.K) 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(%struct.K) 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(%struct.K) 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(%struct.K) 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(%struct.L) 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(%struct.L) 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(%struct.L) 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(%struct.L) 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(%struct.L) 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(%struct.M) 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(%struct.N) align 1 %a) 1551 ret void 1552 } 1553