1553 lines · plain
1;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=armv7-none-linux-gnueabi -d - | FileCheck %s --check-prefix=ARM2;RUN: llc < %s -mtriple=thumbv7-none-linux-gnueabi -mattr=+neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=thumbv7-none-linux-gnueabi -d - | FileCheck %s --check-prefix=THUMB23;RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=-neon -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=armv7-none-linux-gnueabi -d - | FileCheck %s --check-prefix=NO_NEON4;We want to have both positive and negative checks for thumb1. These checks5;are not easy to do in a single pass so we generate the output once to a6;temp file and run filecheck twice with different prefixes.7;RUN: llc < %s -mtriple=thumbv5-none-linux-gnueabi -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=thumbv5-none-linux-gnueabi -d - > %t8;RUN: cat %t | FileCheck %s --check-prefix=THUMB19;RUN: cat %t | FileCheck %s --check-prefix=T1POST10;RUN: llc < %s -mtriple=thumbv8m.base-arm-none-eabi -verify-machineinstrs -filetype=obj | llvm-objdump --no-print-imm-hex --triple=thumbv8m.base-arm-none-eabi -d - > %t11;RUN: cat %t | FileCheck %s --check-prefix=THUMB112;RUN: cat %t | FileCheck %s --check-prefix=T1POST13;RUN: cat %t | FileCheck %s --check-prefix=V8MBASE14 15;This file contains auto generated tests for the lowering of passing structs16;byval in the arm backend. We have tests for both packed and unpacked17;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-objdump19;because it provides better assurance that we are generating instructions20;for the correct architecture. Otherwise we could accidentally generate an21;ARM instruction for THUMB1 and wouldn't detect it because the assembly22;code representation is the same, but the object code would be generated23;incorrectly. For each test we check for the label, a load instruction of the24;correct form, a branch if it will be generated with a loop, and the leftover25;cleanup if the number of bytes does not divide evenly by the store size26 27%struct.A = type <{ [ 10 x i32 ] }> ; 40 bytes28declare void @use_A(ptr byval(%struct.A))29%struct.B = type <{ [ 10 x i32 ], i8 }> ; 41 bytes30declare void @use_B(ptr byval(%struct.B))31%struct.C = type <{ [ 10 x i32 ], [ 3 x i8 ] }> ; 43 bytes32declare void @use_C(ptr byval(%struct.C))33%struct.D = type <{ [ 100 x i32 ] }> ; 400 bytes34declare void @use_D(ptr byval(%struct.D))35%struct.E = type <{ [ 100 x i32 ], i8 }> ; 401 bytes36declare void @use_E(ptr byval(%struct.E))37%struct.F = type <{ [ 100 x i32 ], [ 3 x i8 ] }> ; 403 bytes38declare void @use_F(ptr byval(%struct.F))39%struct.G = type { [ 10 x i32 ] } ; 40 bytes40declare void @use_G(ptr byval(%struct.G))41%struct.H = type { [ 10 x i32 ], i8 } ; 41 bytes42declare void @use_H(ptr byval(%struct.H))43%struct.I = type { [ 10 x i32 ], [ 3 x i8 ] } ; 43 bytes44declare void @use_I(ptr byval(%struct.I))45%struct.J = type { [ 100 x i32 ] } ; 400 bytes46declare void @use_J(ptr byval(%struct.J))47%struct.K = type { [ 100 x i32 ], i8 } ; 401 bytes48declare void @use_K(ptr byval(%struct.K))49%struct.L = type { [ 100 x i32 ], [ 3 x i8 ] } ; 403 bytes50declare void @use_L(ptr byval(%struct.L))51%struct.M = type { [ 64 x i8 ] } ; 64 bytes52declare void @use_M(ptr byval(%struct.M))53%struct.N = type { [ 128 x i8 ] } ; 128 bytes54declare void @use_N(ptr 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]+}}, [{{.*}}], #163 64;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #165 66;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #167 68;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]69;THUMB1: adds [[BASE]], #170 71;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #172 entry:73 %a = alloca %struct.A, align 174 call void @use_A(ptr byval(%struct.A) align 1 %a)75 ret void76 }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]+}}, [{{.*}}], #284 85;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #286 87;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #288 89;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]90;THUMB1: adds [[BASE]], #291 92;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #293 entry:94 %a = alloca %struct.A, align 295 call void @use_A(ptr byval(%struct.A) align 2 %a)96 ret void97 }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]+}}, [{{.*}}], #4105 106;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4107 108;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4109 110;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]111;THUMB1: adds [[BASE]], #4112 113;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4114 entry:115 %a = alloca %struct.A, align 4116 call void @use_A(ptr byval(%struct.A) align 4 %a)117 ret void118 }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]+}}, [{{.*}}], #4130;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!131 132;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]133;THUMB1: adds [[BASE]], #4134 135;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!136 entry:137 %a = alloca %struct.A, align 8138 call void @use_A(ptr byval(%struct.A) align 8 %a)139 ret void140 }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]+}}, [{{.*}}], #1149 150;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!151;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1152 153;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4154;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]], #4158 159;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!160 entry:161 %a = alloca %struct.A, align 16162 call void @use_A(ptr byval(%struct.A) align 16 %a)163 ret void164 }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]+}}, [{{.*}}], #1172 173;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1174 175;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1176 177;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]178;THUMB1: adds [[BASE]], #1179 180;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1181 entry:182 %a = alloca %struct.B, align 1183 call void @use_B(ptr byval(%struct.B) align 1 %a)184 ret void185 }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]+}}, [{{.*}}], #2193;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1194 195;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2196;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1197 198;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2199;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1200 201;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]202;THUMB1: adds [[BASE]], #2203;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]204 205;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2206 entry:207 %a = alloca %struct.B, align 2208 call void @use_B(ptr byval(%struct.B) align 2 %a)209 ret void210 }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]+}}, [{{.*}}], #4218;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1219 220;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4221;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1222 223;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4224;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1225 226;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]227;THUMB1: adds [[BASE]], #4228;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]229 230;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4231 entry:232 %a = alloca %struct.B, align 4233 call void @use_B(ptr byval(%struct.B) align 4 %a)234 ret void235 }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]+}}, [{{.*}}], #1244 245;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!246;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1247 248;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4249;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1250;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!251 252;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]253;THUMB1: adds [[BASE]], #4254;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 8259 call void @use_B(ptr byval(%struct.B) align 8 %a)260 ret void261 }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]+}}, [{{.*}}], #1270 271;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!272;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1273 274;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4275;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1276;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]], #4280;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 16285 call void @use_B(ptr byval(%struct.B) align 16 %a)286 ret void287 }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]+}}, [{{.*}}], #1295 296;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1297 298;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1299 300;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]301;THUMB1: adds [[BASE]], #1302 303;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1304 entry:305 %a = alloca %struct.C, align 1306 call void @use_C(ptr byval(%struct.C) align 1 %a)307 ret void308 }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]+}}, [{{.*}}], #2316;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1317 318;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2319;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1320 321;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2322;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1323 324;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]325;THUMB1: adds [[BASE]], #2326;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]327 328;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2329 entry:330 %a = alloca %struct.C, align 2331 call void @use_C(ptr byval(%struct.C) align 2 %a)332 ret void333 }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]+}}, [{{.*}}], #4341;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1342 343;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4344;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1345 346;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4347;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1348 349;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]350;THUMB1: adds [[BASE]], #4351;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]352;THUMB1: adds [[BASE]], #1353 354;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4355 entry:356 %a = alloca %struct.C, align 4357 call void @use_C(ptr byval(%struct.C) align 4 %a)358 ret void359 }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]+}}, [{{.*}}], #1368 369;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!370;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1371 372;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4373;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1374;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!375 376;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]377;THUMB1: adds [[BASE]], #4378;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]379;THUMB1: adds [[BASE]], #1380 381;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!382 entry:383 %a = alloca %struct.C, align 8384 call void @use_C(ptr byval(%struct.C) align 8 %a)385 ret void386 }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]+}}, [{{.*}}], #1395 396;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!397;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1398 399;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4400;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1401;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]], #4405;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]406;THUMB1: adds [[BASE]], #1407 408;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!409 entry:410 %a = alloca %struct.C, align 16411 call void @use_C(ptr byval(%struct.C) align 16 %a)412 ret void413 }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]+}}, [{{.*}}], #1421;ARM: bne422 423;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1424;THUMB2: bne425 426;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1427;NO_NEON: bne428 429;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]430;THUMB1: adds [[BASE]], #1431;THUMB1: bne432 433;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1434 entry:435 %a = alloca %struct.D, align 1436 call void @use_D(ptr byval(%struct.D) align 1 %a)437 ret void438 }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]+}}, [{{.*}}], #2446;ARM: bne447 448;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2449;THUMB2: bne450 451;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2452;NO_NEON: bne453 454;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]455;THUMB1: adds [[BASE]], #2456;THUMB1: bne457 458;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2459 entry:460 %a = alloca %struct.D, align 2461 call void @use_D(ptr byval(%struct.D) align 2 %a)462 ret void463 }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]+}}, [{{.*}}], #4471;ARM: bne472 473;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4474;THUMB2: bne475 476;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4477;NO_NEON: bne478 479;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]480;THUMB1: adds [[BASE]], #4481;THUMB1: bne482 483;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4484 entry:485 %a = alloca %struct.D, align 4486 call void @use_D(ptr byval(%struct.D) align 4 %a)487 ret void488 }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: bne497 498;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!499;THUMB2: bne500 501;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4502;NO_NEON: bne503;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!504 505;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]506;THUMB1: adds [[BASE]], #4507;THUMB1: bne508 509;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!510 entry:511 %a = alloca %struct.D, align 8512 call void @use_D(ptr byval(%struct.D) align 8 %a)513 ret void514 }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: bne523 524;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!525;THUMB2: bne526 527;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4528;NO_NEON: bne529;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]], #4533;THUMB1: bne534 535;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!536 entry:537 %a = alloca %struct.D, align 16538 call void @use_D(ptr byval(%struct.D) align 16 %a)539 ret void540 }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]+}}, [{{.*}}], #1548;ARM: bne549 550;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1551;THUMB2: bne552 553;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1554;NO_NEON: bne555 556;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]557;THUMB1: adds [[BASE]], #1558;THUMB1: bne559 560;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1561 entry:562 %a = alloca %struct.E, align 1563 call void @use_E(ptr byval(%struct.E) align 1 %a)564 ret void565 }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]+}}, [{{.*}}], #2573;ARM: bne574;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1575 576;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2577;THUMB2: bne578;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1579 580;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2581;NO_NEON: bne582;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1583 584;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]585;THUMB1: adds [[BASE]], #2586;THUMB1: bne587;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]588 589;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2590 entry:591 %a = alloca %struct.E, align 2592 call void @use_E(ptr byval(%struct.E) align 2 %a)593 ret void594 }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]+}}, [{{.*}}], #4602;ARM: bne603;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1604 605;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4606;THUMB2: bne607;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1608 609;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4610;NO_NEON: bne611;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1612 613;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]614;THUMB1: adds [[BASE]], #4615;THUMB1: bne616;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]617 618;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4619 entry:620 %a = alloca %struct.E, align 4621 call void @use_E(ptr byval(%struct.E) align 4 %a)622 ret void623 }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: bne632;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1633 634;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!635;THUMB2: bne636;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1637 638;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4639;NO_NEON: bne640;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1641;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!642 643;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]644;THUMB1: adds [[BASE]], #4645;THUMB1: bne646;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 8651 call void @use_E(ptr byval(%struct.E) align 8 %a)652 ret void653 }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: bne662;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1663 664;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!665;THUMB2: bne666;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1667 668;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4669;NO_NEON: bne670;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1671;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]], #4675;THUMB1: bne676;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 16681 call void @use_E(ptr byval(%struct.E) align 16 %a)682 ret void683 }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]+}}, [{{.*}}], #1691;ARM: bne692 693;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1694;THUMB2: bne695 696;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1697;NO_NEON: bne698 699;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]700;THUMB1: adds [[BASE]], #1701;THUMB1: bne702 703;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1704 entry:705 %a = alloca %struct.F, align 1706 call void @use_F(ptr byval(%struct.F) align 1 %a)707 ret void708 }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]+}}, [{{.*}}], #2716;ARM: bne717;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1718 719;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2720;THUMB2: bne721;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1722 723;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2724;NO_NEON: bne725;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1726 727;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]728;THUMB1: adds [[BASE]], #2729;THUMB1: bne730;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]731 732;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2733 entry:734 %a = alloca %struct.F, align 2735 call void @use_F(ptr byval(%struct.F) align 2 %a)736 ret void737 }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]+}}, [{{.*}}], #4745;ARM: bne746;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1747 748;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4749;THUMB2: bne750;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1751 752;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4753;NO_NEON: bne754;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1755 756;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]757;THUMB1: adds [[BASE]], #4758;THUMB1: bne759;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]760;THUMB1: adds [[BASE]], #1761 762;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4763 entry:764 %a = alloca %struct.F, align 4765 call void @use_F(ptr byval(%struct.F) align 4 %a)766 ret void767 }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: bne776;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1777 778;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!779;THUMB2: bne780;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1781 782;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4783;NO_NEON: bne784;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1785;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!786 787;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]788;THUMB1: adds [[BASE]], #4789;THUMB1: bne790;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]791;THUMB1: adds [[BASE]], #1792 793;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!794 entry:795 %a = alloca %struct.F, align 8796 call void @use_F(ptr byval(%struct.F) align 8 %a)797 ret void798 }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: bne807;ARM: ldrb r{{[0-9]+}}, [{{.*}}], #1808 809;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!810;THUMB2: bne811;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1812 813;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4814;NO_NEON: bne815;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1816;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]], #4820;THUMB1: bne821;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]822;THUMB1: adds [[BASE]], #1823 824;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!825 entry:826 %a = alloca %struct.F, align 16827 call void @use_F(ptr byval(%struct.F) align 16 %a)828 ret void829 }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]+}}, [{{.*}}], #1837 838;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1839 840;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1841 842;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]843;THUMB1: adds [[BASE]], #1844 845;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1846 entry:847 %a = alloca %struct.G, align 1848 call void @use_G(ptr byval(%struct.G) align 1 %a)849 ret void850 }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]+}}, [{{.*}}], #2858 859;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2860 861;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2862 863;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]864;THUMB1: adds [[BASE]], #2865 866;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2867 entry:868 %a = alloca %struct.G, align 2869 call void @use_G(ptr byval(%struct.G) align 2 %a)870 ret void871 }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]+}}, [{{.*}}], #4879 880;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4881 882;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4883 884;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]885;THUMB1: adds [[BASE]], #4886 887;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4888 entry:889 %a = alloca %struct.G, align 4890 call void @use_G(ptr byval(%struct.G) align 4 %a)891 ret void892 }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]+}}, [{{.*}}], #4904;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!905 906;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]907;THUMB1: adds [[BASE]], #4908 909;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!910 entry:911 %a = alloca %struct.G, align 8912 call void @use_G(ptr byval(%struct.G) align 8 %a)913 ret void914 }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]+}}, [{{.*}}], #4926;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]], #4930 931;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!932 entry:933 %a = alloca %struct.G, align 16934 call void @use_G(ptr byval(%struct.G) align 16 %a)935 ret void936 }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]+}}, [{{.*}}], #1944 945;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #1946 947;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #1948 949;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]950;THUMB1: adds [[BASE]], #1951 952;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #1953 entry:954 %a = alloca %struct.H, align 1955 call void @use_H(ptr byval(%struct.H) align 1 %a)956 ret void957 }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]+}}, [{{.*}}], #2965 966;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #2967 968;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #2969 970;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]971;THUMB1: adds [[BASE]], #2972 973;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #2974 entry:975 %a = alloca %struct.H, align 2976 call void @use_H(ptr byval(%struct.H) align 2 %a)977 ret void978 }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]+}}, [{{.*}}], #4986 987;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #4988 989;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #4990 991;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]992;THUMB1: adds [[BASE]], #4993 994;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #4995 entry:996 %a = alloca %struct.H, align 4997 call void @use_H(ptr byval(%struct.H) align 4 %a)998 ret void999 }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]+}}, [{{.*}}], #41011;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1012 1013;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1014;THUMB1: adds [[BASE]], #41015 1016;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1017 entry:1018 %a = alloca %struct.H, align 81019 call void @use_H(ptr byval(%struct.H) align 8 %a)1020 ret void1021 }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]+}}, [{{.*}}], #41033;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]], #41037 1038;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1039 entry:1040 %a = alloca %struct.H, align 161041 call void @use_H(ptr byval(%struct.H) align 16 %a)1042 ret void1043 }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]+}}, [{{.*}}], #11051 1052;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #11053 1054;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #11055 1056;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1057;THUMB1: adds [[BASE]], #11058 1059;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #11060 entry:1061 %a = alloca %struct.I, align 11062 call void @use_I(ptr byval(%struct.I) align 1 %a)1063 ret void1064 }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]+}}, [{{.*}}], #21072 1073;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #21074 1075;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #21076 1077;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1078;THUMB1: adds [[BASE]], #21079 1080;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #21081 entry:1082 %a = alloca %struct.I, align 21083 call void @use_I(ptr byval(%struct.I) align 2 %a)1084 ret void1085 }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]+}}, [{{.*}}], #41093 1094;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #41095 1096;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41097 1098;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1099;THUMB1: adds [[BASE]], #41100 1101;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #41102 entry:1103 %a = alloca %struct.I, align 41104 call void @use_I(ptr byval(%struct.I) align 4 %a)1105 ret void1106 }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]+}}, [{{.*}}], #41118;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1119 1120;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1121;THUMB1: adds [[BASE]], #41122 1123;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1124 entry:1125 %a = alloca %struct.I, align 81126 call void @use_I(ptr byval(%struct.I) align 8 %a)1127 ret void1128 }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]+}}, [{{.*}}], #41140;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]], #41144 1145;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1146 entry:1147 %a = alloca %struct.I, align 161148 call void @use_I(ptr byval(%struct.I) align 16 %a)1149 ret void1150 }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]+}}, [{{.*}}], #11158;ARM: bne1159 1160;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #11161;THUMB2: bne1162 1163;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #11164;NO_NEON: bne1165 1166;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1167;THUMB1: adds [[BASE]], #11168;THUMB1: bne1169 1170;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #11171 entry:1172 %a = alloca %struct.J, align 11173 call void @use_J(ptr byval(%struct.J) align 1 %a)1174 ret void1175 }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]+}}, [{{.*}}], #21183;ARM: bne1184 1185;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #21186;THUMB2: bne1187 1188;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #21189;NO_NEON: bne1190 1191;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1192;THUMB1: adds [[BASE]], #21193;THUMB1: bne1194 1195;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #21196 entry:1197 %a = alloca %struct.J, align 21198 call void @use_J(ptr byval(%struct.J) align 2 %a)1199 ret void1200 }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]+}}, [{{.*}}], #41208;ARM: bne1209 1210;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #41211;THUMB2: bne1212 1213;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41214;NO_NEON: bne1215 1216;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1217;THUMB1: adds [[BASE]], #41218;THUMB1: bne1219 1220;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #41221 entry:1222 %a = alloca %struct.J, align 41223 call void @use_J(ptr byval(%struct.J) align 4 %a)1224 ret void1225 }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: bne1234 1235;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1236;THUMB2: bne1237 1238;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41239;NO_NEON: bne1240;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1241 1242;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1243;THUMB1: adds [[BASE]], #41244;THUMB1: bne1245 1246;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1247 entry:1248 %a = alloca %struct.J, align 81249 call void @use_J(ptr byval(%struct.J) align 8 %a)1250 ret void1251 }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: bne1260 1261;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1262;THUMB2: bne1263 1264;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41265;NO_NEON: bne1266;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]], #41270;THUMB1: bne1271 1272;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1273 entry:1274 %a = alloca %struct.J, align 161275 call void @use_J(ptr byval(%struct.J) align 16 %a)1276 ret void1277 }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]+}}, [{{.*}}], #11285;ARM: bne1286 1287;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #11288;THUMB2: bne1289 1290;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #11291;NO_NEON: bne1292 1293;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1294;THUMB1: adds [[BASE]], #11295;THUMB1: bne1296 1297;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #11298 entry:1299 %a = alloca %struct.K, align 11300 call void @use_K(ptr byval(%struct.K) align 1 %a)1301 ret void1302 }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]+}}, [{{.*}}], #21310;ARM: bne1311 1312;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #21313;THUMB2: bne1314 1315;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #21316;NO_NEON: bne1317 1318;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1319;THUMB1: adds [[BASE]], #21320;THUMB1: bne1321 1322;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #21323 entry:1324 %a = alloca %struct.K, align 21325 call void @use_K(ptr byval(%struct.K) align 2 %a)1326 ret void1327 }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]+}}, [{{.*}}], #41335;ARM: bne1336 1337;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #41338;THUMB2: bne1339 1340;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41341;NO_NEON: bne1342 1343;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1344;THUMB1: adds [[BASE]], #41345;THUMB1: bne1346 1347;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #41348 entry:1349 %a = alloca %struct.K, align 41350 call void @use_K(ptr byval(%struct.K) align 4 %a)1351 ret void1352 }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: bne1361 1362;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1363;THUMB2: bne1364 1365;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41366;NO_NEON: bne1367;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1368 1369;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1370;THUMB1: adds [[BASE]], #41371;THUMB1: bne1372 1373;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1374 entry:1375 %a = alloca %struct.K, align 81376 call void @use_K(ptr byval(%struct.K) align 8 %a)1377 ret void1378 }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: bne1387 1388;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1389;THUMB2: bne1390 1391;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41392;NO_NEON: bne1393;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]], #41397;THUMB1: bne1398 1399;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1400 entry:1401 %a = alloca %struct.K, align 161402 call void @use_K(ptr byval(%struct.K) align 16 %a)1403 ret void1404 }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]+}}, [{{.*}}], #11412;ARM: bne1413 1414;THUMB2: ldrb r{{[0-9]+}}, [{{.*}}], #11415;THUMB2: bne1416 1417;NO_NEON: ldrb r{{[0-9]+}}, [{{.*}}], #11418;NO_NEON: bne1419 1420;THUMB1: ldrb r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1421;THUMB1: adds [[BASE]], #11422;THUMB1: bne1423 1424;T1POST-NOT: ldrb r{{[0-9]+}}, [{{.*}}], #11425 entry:1426 %a = alloca %struct.L, align 11427 call void @use_L(ptr byval(%struct.L) align 1 %a)1428 ret void1429 }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]+}}, [{{.*}}], #21437;ARM: bne1438 1439;THUMB2: ldrh r{{[0-9]+}}, [{{.*}}], #21440;THUMB2: bne1441 1442;NO_NEON: ldrh r{{[0-9]+}}, [{{.*}}], #21443;NO_NEON: bne1444 1445;THUMB1: ldrh r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1446;THUMB1: adds [[BASE]], #21447;THUMB1: bne1448 1449;T1POST-NOT: ldrh r{{[0-9]+}}, [{{.*}}], #21450 entry:1451 %a = alloca %struct.L, align 21452 call void @use_L(ptr byval(%struct.L) align 2 %a)1453 ret void1454 }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]+}}, [{{.*}}], #41462;ARM: bne1463 1464;THUMB2: ldr r{{[0-9]+}}, [{{.*}}], #41465;THUMB2: bne1466 1467;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41468;NO_NEON: bne1469 1470;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1471;THUMB1: adds [[BASE]], #41472;THUMB1: bne1473 1474;T1POST-NOT: ldr r{{[0-9]+}}, [{{.*}}], #41475 entry:1476 %a = alloca %struct.L, align 41477 call void @use_L(ptr byval(%struct.L) align 4 %a)1478 ret void1479 }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: bne1488 1489;THUMB2: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1490;THUMB2: bne1491 1492;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41493;NO_NEON: bne1494;NO_NEON-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1495 1496;THUMB1: ldr r{{[0-9]+}}, [[[BASE:r[0-9]+]]]1497;THUMB1: adds [[BASE]], #41498;THUMB1: bne1499 1500;T1POST-NOT: vld1.32 {d{{[0-9]+}}}, [{{.*}}]!1501 entry:1502 %a = alloca %struct.L, align 81503 call void @use_L(ptr byval(%struct.L) align 8 %a)1504 ret void1505 }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: bne1514 1515;THUMB2: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1516;THUMB2: bne1517 1518;NO_NEON: ldr r{{[0-9]+}}, [{{.*}}], #41519;NO_NEON: bne1520;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]], #41524;THUMB1: bne1525 1526;T1POST-NOT: vld1.32 {d{{[0-9]+}}, d{{[0-9]+}}}, [{{.*}}]!1527 entry:1528 %a = alloca %struct.L, align 161529 call void @use_L(ptr byval(%struct.L) align 16 %a)1530 ret void1531 }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]], #11537;V8MBASE-NOT: movw1538 entry:1539 %a = alloca %struct.M, align 11540 call void @use_M(ptr byval(%struct.M) align 1 %a)1541 ret void1542 }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 11550 call void @use_N(ptr byval(%struct.N) align 1 %a)1551 ret void1552 }1553