1324 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 -global-isel=0 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i8 @ti8(i1 %c, ptr %p, i8 %a, i8 %b) {6; CHECK-SD-LABEL: ti8:7; CHECK-SD: // %bb.0: // %entry8; CHECK-SD-NEXT: tbz w0, #0, .LBB0_29; CHECK-SD-NEXT: // %bb.1: // %t10; CHECK-SD-NEXT: mov w3, w211; CHECK-SD-NEXT: str wzr, [x1]12; CHECK-SD-NEXT: .LBB0_2: // %e13; CHECK-SD-NEXT: mov w0, w314; CHECK-SD-NEXT: ret15;16; CHECK-GI-LABEL: ti8:17; CHECK-GI: // %bb.0: // %entry18; CHECK-GI-NEXT: mov w8, w019; CHECK-GI-NEXT: mov w0, w320; CHECK-GI-NEXT: tbz w8, #0, .LBB0_221; CHECK-GI-NEXT: // %bb.1: // %t22; CHECK-GI-NEXT: mov w0, w223; CHECK-GI-NEXT: str wzr, [x1]24; CHECK-GI-NEXT: .LBB0_2: // %e25; CHECK-GI-NEXT: ret26entry:27 br i1 %c, label %t, label %e28t:29 store i32 0, ptr %p30 br label %e31e:32 %h = phi i8 [%a, %t], [%b, %entry]33 ret i8 %h34}35 36define i16 @ti16(i1 %c, ptr %p, i16 %a, i16 %b) {37; CHECK-SD-LABEL: ti16:38; CHECK-SD: // %bb.0: // %entry39; CHECK-SD-NEXT: tbz w0, #0, .LBB1_240; CHECK-SD-NEXT: // %bb.1: // %t41; CHECK-SD-NEXT: mov w3, w242; CHECK-SD-NEXT: str wzr, [x1]43; CHECK-SD-NEXT: .LBB1_2: // %e44; CHECK-SD-NEXT: mov w0, w345; CHECK-SD-NEXT: ret46;47; CHECK-GI-LABEL: ti16:48; CHECK-GI: // %bb.0: // %entry49; CHECK-GI-NEXT: mov w8, w050; CHECK-GI-NEXT: mov w0, w351; CHECK-GI-NEXT: tbz w8, #0, .LBB1_252; CHECK-GI-NEXT: // %bb.1: // %t53; CHECK-GI-NEXT: mov w0, w254; CHECK-GI-NEXT: str wzr, [x1]55; CHECK-GI-NEXT: .LBB1_2: // %e56; CHECK-GI-NEXT: ret57entry:58 br i1 %c, label %t, label %e59t:60 store i32 0, ptr %p61 br label %e62e:63 %h = phi i16 [%a, %t], [%b, %entry]64 ret i16 %h65}66 67define i32 @ti32(i1 %c, ptr %p, i32 %a, i32 %b) {68; CHECK-SD-LABEL: ti32:69; CHECK-SD: // %bb.0: // %entry70; CHECK-SD-NEXT: tbz w0, #0, .LBB2_271; CHECK-SD-NEXT: // %bb.1: // %t72; CHECK-SD-NEXT: mov w3, w273; CHECK-SD-NEXT: str wzr, [x1]74; CHECK-SD-NEXT: .LBB2_2: // %e75; CHECK-SD-NEXT: mov w0, w376; CHECK-SD-NEXT: ret77;78; CHECK-GI-LABEL: ti32:79; CHECK-GI: // %bb.0: // %entry80; CHECK-GI-NEXT: mov w8, w081; CHECK-GI-NEXT: mov w0, w382; CHECK-GI-NEXT: tbz w8, #0, .LBB2_283; CHECK-GI-NEXT: // %bb.1: // %t84; CHECK-GI-NEXT: mov w0, w285; CHECK-GI-NEXT: str wzr, [x1]86; CHECK-GI-NEXT: .LBB2_2: // %e87; CHECK-GI-NEXT: ret88entry:89 br i1 %c, label %t, label %e90t:91 store i32 0, ptr %p92 br label %e93e:94 %h = phi i32 [%a, %t], [%b, %entry]95 ret i32 %h96}97 98define i64 @ti64(i1 %c, ptr %p, i64 %a, i64 %b) {99; CHECK-SD-LABEL: ti64:100; CHECK-SD: // %bb.0: // %entry101; CHECK-SD-NEXT: tbz w0, #0, .LBB3_2102; CHECK-SD-NEXT: // %bb.1: // %t103; CHECK-SD-NEXT: mov x3, x2104; CHECK-SD-NEXT: str wzr, [x1]105; CHECK-SD-NEXT: .LBB3_2: // %e106; CHECK-SD-NEXT: mov x0, x3107; CHECK-SD-NEXT: ret108;109; CHECK-GI-LABEL: ti64:110; CHECK-GI: // %bb.0: // %entry111; CHECK-GI-NEXT: mov w8, w0112; CHECK-GI-NEXT: mov x0, x3113; CHECK-GI-NEXT: tbz w8, #0, .LBB3_2114; CHECK-GI-NEXT: // %bb.1: // %t115; CHECK-GI-NEXT: mov x0, x2116; CHECK-GI-NEXT: str wzr, [x1]117; CHECK-GI-NEXT: .LBB3_2: // %e118; CHECK-GI-NEXT: ret119entry:120 br i1 %c, label %t, label %e121t:122 store i32 0, ptr %p123 br label %e124e:125 %h = phi i64 [%a, %t], [%b, %entry]126 ret i64 %h127}128 129define i128 @ti128(i1 %c, ptr %p, i128 %a, i128 %b) {130; CHECK-SD-LABEL: ti128:131; CHECK-SD: // %bb.0: // %entry132; CHECK-SD-NEXT: tbz w0, #0, .LBB4_2133; CHECK-SD-NEXT: // %bb.1: // %t134; CHECK-SD-NEXT: mov x4, x2135; CHECK-SD-NEXT: mov x5, x3136; CHECK-SD-NEXT: str wzr, [x1]137; CHECK-SD-NEXT: .LBB4_2: // %e138; CHECK-SD-NEXT: mov x0, x4139; CHECK-SD-NEXT: mov x1, x5140; CHECK-SD-NEXT: ret141;142; CHECK-GI-LABEL: ti128:143; CHECK-GI: // %bb.0: // %entry144; CHECK-GI-NEXT: mov w8, w0145; CHECK-GI-NEXT: mov x0, x4146; CHECK-GI-NEXT: tbz w8, #0, .LBB4_2147; CHECK-GI-NEXT: // %bb.1: // %t148; CHECK-GI-NEXT: mov x0, x2149; CHECK-GI-NEXT: mov x5, x3150; CHECK-GI-NEXT: str wzr, [x1]151; CHECK-GI-NEXT: .LBB4_2: // %e152; CHECK-GI-NEXT: mov x1, x5153; CHECK-GI-NEXT: ret154entry:155 br i1 %c, label %t, label %e156t:157 store i32 0, ptr %p158 br label %e159e:160 %h = phi i128 [%a, %t], [%b, %entry]161 ret i128 %h162}163 164define ptr @tp0(i1 %c, ptr %p, ptr %a, ptr %b) {165; CHECK-SD-LABEL: tp0:166; CHECK-SD: // %bb.0: // %entry167; CHECK-SD-NEXT: tbz w0, #0, .LBB5_2168; CHECK-SD-NEXT: // %bb.1: // %t169; CHECK-SD-NEXT: mov x3, x2170; CHECK-SD-NEXT: str wzr, [x1]171; CHECK-SD-NEXT: .LBB5_2: // %e172; CHECK-SD-NEXT: mov x0, x3173; CHECK-SD-NEXT: ret174;175; CHECK-GI-LABEL: tp0:176; CHECK-GI: // %bb.0: // %entry177; CHECK-GI-NEXT: mov w8, w0178; CHECK-GI-NEXT: mov x0, x3179; CHECK-GI-NEXT: tbz w8, #0, .LBB5_2180; CHECK-GI-NEXT: // %bb.1: // %t181; CHECK-GI-NEXT: mov x0, x2182; CHECK-GI-NEXT: str wzr, [x1]183; CHECK-GI-NEXT: .LBB5_2: // %e184; CHECK-GI-NEXT: ret185entry:186 br i1 %c, label %t, label %e187t:188 store i32 0, ptr %p189 br label %e190e:191 %h = phi ptr [%a, %t], [%b, %entry]192 ret ptr %h193}194 195define half @tf16(i1 %c, ptr %p, half %a, half %b) {196; CHECK-LABEL: tf16:197; CHECK: // %bb.0: // %entry198; CHECK-NEXT: tbz w0, #0, .LBB6_2199; CHECK-NEXT: // %bb.1: // %t200; CHECK-NEXT: fmov s1, s0201; CHECK-NEXT: str wzr, [x1]202; CHECK-NEXT: .LBB6_2: // %e203; CHECK-NEXT: fmov s0, s1204; CHECK-NEXT: ret205entry:206 br i1 %c, label %t, label %e207t:208 store i32 0, ptr %p209 br label %e210e:211 %h = phi half [%a, %t], [%b, %entry]212 ret half %h213}214 215define float @tf32(i1 %c, ptr %p, float %a, float %b) {216; CHECK-LABEL: tf32:217; CHECK: // %bb.0: // %entry218; CHECK-NEXT: tbz w0, #0, .LBB7_2219; CHECK-NEXT: // %bb.1: // %t220; CHECK-NEXT: fmov s1, s0221; CHECK-NEXT: str wzr, [x1]222; CHECK-NEXT: .LBB7_2: // %e223; CHECK-NEXT: fmov s0, s1224; CHECK-NEXT: ret225entry:226 br i1 %c, label %t, label %e227t:228 store i32 0, ptr %p229 br label %e230e:231 %h = phi float [%a, %t], [%b, %entry]232 ret float %h233}234 235define double @tf64(i1 %c, ptr %p, double %a, double %b) {236; CHECK-LABEL: tf64:237; CHECK: // %bb.0: // %entry238; CHECK-NEXT: tbz w0, #0, .LBB8_2239; CHECK-NEXT: // %bb.1: // %t240; CHECK-NEXT: fmov d1, d0241; CHECK-NEXT: str wzr, [x1]242; CHECK-NEXT: .LBB8_2: // %e243; CHECK-NEXT: fmov d0, d1244; CHECK-NEXT: ret245entry:246 br i1 %c, label %t, label %e247t:248 store i32 0, ptr %p249 br label %e250e:251 %h = phi double [%a, %t], [%b, %entry]252 ret double %h253}254 255define fp128 @tf128(i1 %c, ptr %p, fp128 %a, fp128 %b) {256; CHECK-SD-LABEL: tf128:257; CHECK-SD: // %bb.0: // %entry258; CHECK-SD-NEXT: tbz w0, #0, .LBB9_2259; CHECK-SD-NEXT: // %bb.1: // %t260; CHECK-SD-NEXT: mov v1.16b, v0.16b261; CHECK-SD-NEXT: str wzr, [x1]262; CHECK-SD-NEXT: .LBB9_2: // %e263; CHECK-SD-NEXT: mov v0.16b, v1.16b264; CHECK-SD-NEXT: ret265;266; CHECK-GI-LABEL: tf128:267; CHECK-GI: // %bb.0: // %entry268; CHECK-GI-NEXT: tbz w0, #0, .LBB9_2269; CHECK-GI-NEXT: // %bb.1: // %t270; CHECK-GI-NEXT: mov d2, v0.d[1]271; CHECK-GI-NEXT: fmov d1, d0272; CHECK-GI-NEXT: str wzr, [x1]273; CHECK-GI-NEXT: b .LBB9_3274; CHECK-GI-NEXT: .LBB9_2:275; CHECK-GI-NEXT: mov d2, v1.d[1]276; CHECK-GI-NEXT: .LBB9_3: // %e277; CHECK-GI-NEXT: fmov x8, d1278; CHECK-GI-NEXT: mov v0.d[0], x8279; CHECK-GI-NEXT: fmov x8, d2280; CHECK-GI-NEXT: mov v0.d[1], x8281; CHECK-GI-NEXT: ret282entry:283 br i1 %c, label %t, label %e284t:285 store i32 0, ptr %p286 br label %e287e:288 %h = phi fp128 [%a, %t], [%b, %entry]289 ret fp128 %h290}291 292define <2 x i8> @tv2i8(i1 %c, ptr %p, <2 x i8> %a, <2 x i8> %b) {293; CHECK-SD-LABEL: tv2i8:294; CHECK-SD: // %bb.0: // %entry295; CHECK-SD-NEXT: tbz w0, #0, .LBB10_2296; CHECK-SD-NEXT: // %bb.1: // %t297; CHECK-SD-NEXT: fmov d1, d0298; CHECK-SD-NEXT: str wzr, [x1]299; CHECK-SD-NEXT: .LBB10_2: // %e300; CHECK-SD-NEXT: fmov d0, d1301; CHECK-SD-NEXT: ret302;303; CHECK-GI-LABEL: tv2i8:304; CHECK-GI: // %bb.0: // %entry305; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0306; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1307; CHECK-GI-NEXT: tbz w0, #0, .LBB10_2308; CHECK-GI-NEXT: // %bb.1: // %t309; CHECK-GI-NEXT: mov w8, v0.s[1]310; CHECK-GI-NEXT: str wzr, [x1]311; CHECK-GI-NEXT: mov v0.b[1], w8312; CHECK-GI-NEXT: fmov d1, d0313; CHECK-GI-NEXT: b .LBB10_3314; CHECK-GI-NEXT: .LBB10_2:315; CHECK-GI-NEXT: mov w8, v1.s[1]316; CHECK-GI-NEXT: mov v1.b[1], w8317; CHECK-GI-NEXT: .LBB10_3: // %e318; CHECK-GI-NEXT: umov w8, v1.b[0]319; CHECK-GI-NEXT: umov w9, v1.b[1]320; CHECK-GI-NEXT: fmov s0, w8321; CHECK-GI-NEXT: mov v0.s[1], w9322; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0323; CHECK-GI-NEXT: ret324entry:325 br i1 %c, label %t, label %e326t:327 store i32 0, ptr %p328 br label %e329e:330 %h = phi <2 x i8> [%a, %t], [%b, %entry]331 ret <2 x i8> %h332}333 334define <3 x i8> @tv3i8(i1 %c, ptr %p, <3 x i8> %a, <3 x i8> %b) {335; CHECK-SD-LABEL: tv3i8:336; CHECK-SD: // %bb.0: // %entry337; CHECK-SD-NEXT: tbz w0, #0, .LBB11_2338; CHECK-SD-NEXT: // %bb.1: // %t339; CHECK-SD-NEXT: mov w5, w2340; CHECK-SD-NEXT: mov w6, w3341; CHECK-SD-NEXT: mov w7, w4342; CHECK-SD-NEXT: str wzr, [x1]343; CHECK-SD-NEXT: .LBB11_2: // %e344; CHECK-SD-NEXT: mov w0, w5345; CHECK-SD-NEXT: mov w1, w6346; CHECK-SD-NEXT: mov w2, w7347; CHECK-SD-NEXT: ret348;349; CHECK-GI-LABEL: tv3i8:350; CHECK-GI: // %bb.0: // %entry351; CHECK-GI-NEXT: tbz w0, #0, .LBB11_2352; CHECK-GI-NEXT: // %bb.1: // %t353; CHECK-GI-NEXT: fmov s0, w2354; CHECK-GI-NEXT: str wzr, [x1]355; CHECK-GI-NEXT: mov v0.b[1], w3356; CHECK-GI-NEXT: mov v0.b[2], w4357; CHECK-GI-NEXT: b .LBB11_3358; CHECK-GI-NEXT: .LBB11_2:359; CHECK-GI-NEXT: fmov s0, w5360; CHECK-GI-NEXT: mov v0.b[1], w6361; CHECK-GI-NEXT: mov v0.b[2], w7362; CHECK-GI-NEXT: .LBB11_3: // %e363; CHECK-GI-NEXT: umov w0, v0.b[0]364; CHECK-GI-NEXT: umov w1, v0.b[1]365; CHECK-GI-NEXT: umov w2, v0.b[2]366; CHECK-GI-NEXT: ret367entry:368 br i1 %c, label %t, label %e369t:370 store i32 0, ptr %p371 br label %e372e:373 %h = phi <3 x i8> [%a, %t], [%b, %entry]374 ret <3 x i8> %h375}376 377define <4 x i8> @tv4i8(i1 %c, ptr %p, <4 x i8> %a, <4 x i8> %b) {378; CHECK-SD-LABEL: tv4i8:379; CHECK-SD: // %bb.0: // %entry380; CHECK-SD-NEXT: tbz w0, #0, .LBB12_2381; CHECK-SD-NEXT: // %bb.1: // %t382; CHECK-SD-NEXT: fmov d1, d0383; CHECK-SD-NEXT: str wzr, [x1]384; CHECK-SD-NEXT: .LBB12_2: // %e385; CHECK-SD-NEXT: fmov d0, d1386; CHECK-SD-NEXT: ret387;388; CHECK-GI-LABEL: tv4i8:389; CHECK-GI: // %bb.0: // %entry390; CHECK-GI-NEXT: tbz w0, #0, .LBB12_2391; CHECK-GI-NEXT: // %bb.1: // %t392; CHECK-GI-NEXT: uzp1 v0.8b, v0.8b, v0.8b393; CHECK-GI-NEXT: str wzr, [x1]394; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0395; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0396; CHECK-GI-NEXT: ret397; CHECK-GI-NEXT: .LBB12_2:398; CHECK-GI-NEXT: uzp1 v0.8b, v1.8b, v0.8b399; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0400; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0401; CHECK-GI-NEXT: ret402entry:403 br i1 %c, label %t, label %e404t:405 store i32 0, ptr %p406 br label %e407e:408 %h = phi <4 x i8> [%a, %t], [%b, %entry]409 ret <4 x i8> %h410}411 412define <8 x i8> @tv8i8(i1 %c, ptr %p, <8 x i8> %a, <8 x i8> %b) {413; CHECK-LABEL: tv8i8:414; CHECK: // %bb.0: // %entry415; CHECK-NEXT: tbz w0, #0, .LBB13_2416; CHECK-NEXT: // %bb.1: // %t417; CHECK-NEXT: fmov d1, d0418; CHECK-NEXT: str wzr, [x1]419; CHECK-NEXT: .LBB13_2: // %e420; CHECK-NEXT: fmov d0, d1421; CHECK-NEXT: ret422entry:423 br i1 %c, label %t, label %e424t:425 store i32 0, ptr %p426 br label %e427e:428 %h = phi <8 x i8> [%a, %t], [%b, %entry]429 ret <8 x i8> %h430}431 432define <16 x i8> @tv16i8(i1 %c, ptr %p, <16 x i8> %a, <16 x i8> %b) {433; CHECK-LABEL: tv16i8:434; CHECK: // %bb.0: // %entry435; CHECK-NEXT: tbz w0, #0, .LBB14_2436; CHECK-NEXT: // %bb.1: // %t437; CHECK-NEXT: mov v1.16b, v0.16b438; CHECK-NEXT: str wzr, [x1]439; CHECK-NEXT: .LBB14_2: // %e440; CHECK-NEXT: mov v0.16b, v1.16b441; CHECK-NEXT: ret442entry:443 br i1 %c, label %t, label %e444t:445 store i32 0, ptr %p446 br label %e447e:448 %h = phi <16 x i8> [%a, %t], [%b, %entry]449 ret <16 x i8> %h450}451 452define <32 x i8> @tv32i8(i1 %c, ptr %p, <32 x i8> %a, <32 x i8> %b) {453; CHECK-SD-LABEL: tv32i8:454; CHECK-SD: // %bb.0: // %entry455; CHECK-SD-NEXT: tbz w0, #0, .LBB15_2456; CHECK-SD-NEXT: // %bb.1: // %t457; CHECK-SD-NEXT: mov v2.16b, v0.16b458; CHECK-SD-NEXT: mov v3.16b, v1.16b459; CHECK-SD-NEXT: str wzr, [x1]460; CHECK-SD-NEXT: .LBB15_2: // %e461; CHECK-SD-NEXT: mov v0.16b, v2.16b462; CHECK-SD-NEXT: mov v1.16b, v3.16b463; CHECK-SD-NEXT: ret464;465; CHECK-GI-LABEL: tv32i8:466; CHECK-GI: // %bb.0: // %entry467; CHECK-GI-NEXT: mov v4.16b, v0.16b468; CHECK-GI-NEXT: mov v0.16b, v2.16b469; CHECK-GI-NEXT: tbz w0, #0, .LBB15_2470; CHECK-GI-NEXT: // %bb.1: // %t471; CHECK-GI-NEXT: mov v0.16b, v4.16b472; CHECK-GI-NEXT: mov v3.16b, v1.16b473; CHECK-GI-NEXT: str wzr, [x1]474; CHECK-GI-NEXT: .LBB15_2: // %e475; CHECK-GI-NEXT: mov v1.16b, v3.16b476; CHECK-GI-NEXT: ret477entry:478 br i1 %c, label %t, label %e479t:480 store i32 0, ptr %p481 br label %e482e:483 %h = phi <32 x i8> [%a, %t], [%b, %entry]484 ret <32 x i8> %h485}486 487define <2 x i16> @tv2i16(i1 %c, ptr %p, <2 x i16> %a, <2 x i16> %b) {488; CHECK-SD-LABEL: tv2i16:489; CHECK-SD: // %bb.0: // %entry490; CHECK-SD-NEXT: tbz w0, #0, .LBB16_2491; CHECK-SD-NEXT: // %bb.1: // %t492; CHECK-SD-NEXT: fmov d1, d0493; CHECK-SD-NEXT: str wzr, [x1]494; CHECK-SD-NEXT: .LBB16_2: // %e495; CHECK-SD-NEXT: fmov d0, d1496; CHECK-SD-NEXT: ret497;498; CHECK-GI-LABEL: tv2i16:499; CHECK-GI: // %bb.0: // %entry500; CHECK-GI-NEXT: tbz w0, #0, .LBB16_2501; CHECK-GI-NEXT: // %bb.1: // %t502; CHECK-GI-NEXT: uzp1 v0.4h, v0.4h, v0.4h503; CHECK-GI-NEXT: str wzr, [x1]504; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0505; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0506; CHECK-GI-NEXT: ret507; CHECK-GI-NEXT: .LBB16_2:508; CHECK-GI-NEXT: uzp1 v0.4h, v1.4h, v0.4h509; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0510; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0511; CHECK-GI-NEXT: ret512entry:513 br i1 %c, label %t, label %e514t:515 store i32 0, ptr %p516 br label %e517e:518 %h = phi <2 x i16> [%a, %t], [%b, %entry]519 ret <2 x i16> %h520}521 522define <3 x i16> @tv3i16(i1 %c, ptr %p, <3 x i16> %a, <3 x i16> %b) {523; CHECK-LABEL: tv3i16:524; CHECK: // %bb.0: // %entry525; CHECK-NEXT: tbz w0, #0, .LBB17_2526; CHECK-NEXT: // %bb.1: // %t527; CHECK-NEXT: fmov d1, d0528; CHECK-NEXT: str wzr, [x1]529; CHECK-NEXT: .LBB17_2: // %e530; CHECK-NEXT: fmov d0, d1531; CHECK-NEXT: ret532entry:533 br i1 %c, label %t, label %e534t:535 store i32 0, ptr %p536 br label %e537e:538 %h = phi <3 x i16> [%a, %t], [%b, %entry]539 ret <3 x i16> %h540}541 542define <4 x i16> @tv4i16(i1 %c, ptr %p, <4 x i16> %a, <4 x i16> %b) {543; CHECK-LABEL: tv4i16:544; CHECK: // %bb.0: // %entry545; CHECK-NEXT: tbz w0, #0, .LBB18_2546; CHECK-NEXT: // %bb.1: // %t547; CHECK-NEXT: fmov d1, d0548; CHECK-NEXT: str wzr, [x1]549; CHECK-NEXT: .LBB18_2: // %e550; CHECK-NEXT: fmov d0, d1551; CHECK-NEXT: ret552entry:553 br i1 %c, label %t, label %e554t:555 store i32 0, ptr %p556 br label %e557e:558 %h = phi <4 x i16> [%a, %t], [%b, %entry]559 ret <4 x i16> %h560}561 562define <8 x i16> @tv8i16(i1 %c, ptr %p, <8 x i16> %a, <8 x i16> %b) {563; CHECK-LABEL: tv8i16:564; CHECK: // %bb.0: // %entry565; CHECK-NEXT: tbz w0, #0, .LBB19_2566; CHECK-NEXT: // %bb.1: // %t567; CHECK-NEXT: mov v1.16b, v0.16b568; CHECK-NEXT: str wzr, [x1]569; CHECK-NEXT: .LBB19_2: // %e570; CHECK-NEXT: mov v0.16b, v1.16b571; CHECK-NEXT: ret572entry:573 br i1 %c, label %t, label %e574t:575 store i32 0, ptr %p576 br label %e577e:578 %h = phi <8 x i16> [%a, %t], [%b, %entry]579 ret <8 x i16> %h580}581 582define <16 x i16> @tv16i16(i1 %c, ptr %p, <16 x i16> %a, <16 x i16> %b) {583; CHECK-SD-LABEL: tv16i16:584; CHECK-SD: // %bb.0: // %entry585; CHECK-SD-NEXT: tbz w0, #0, .LBB20_2586; CHECK-SD-NEXT: // %bb.1: // %t587; CHECK-SD-NEXT: mov v2.16b, v0.16b588; CHECK-SD-NEXT: mov v3.16b, v1.16b589; CHECK-SD-NEXT: str wzr, [x1]590; CHECK-SD-NEXT: .LBB20_2: // %e591; CHECK-SD-NEXT: mov v0.16b, v2.16b592; CHECK-SD-NEXT: mov v1.16b, v3.16b593; CHECK-SD-NEXT: ret594;595; CHECK-GI-LABEL: tv16i16:596; CHECK-GI: // %bb.0: // %entry597; CHECK-GI-NEXT: mov v4.16b, v0.16b598; CHECK-GI-NEXT: mov v0.16b, v2.16b599; CHECK-GI-NEXT: tbz w0, #0, .LBB20_2600; CHECK-GI-NEXT: // %bb.1: // %t601; CHECK-GI-NEXT: mov v0.16b, v4.16b602; CHECK-GI-NEXT: mov v3.16b, v1.16b603; CHECK-GI-NEXT: str wzr, [x1]604; CHECK-GI-NEXT: .LBB20_2: // %e605; CHECK-GI-NEXT: mov v1.16b, v3.16b606; CHECK-GI-NEXT: ret607entry:608 br i1 %c, label %t, label %e609t:610 store i32 0, ptr %p611 br label %e612e:613 %h = phi <16 x i16> [%a, %t], [%b, %entry]614 ret <16 x i16> %h615}616 617define <2 x i32> @tv2i32(i1 %c, ptr %p, <2 x i32> %a, <2 x i32> %b) {618; CHECK-LABEL: tv2i32:619; CHECK: // %bb.0: // %entry620; CHECK-NEXT: tbz w0, #0, .LBB21_2621; CHECK-NEXT: // %bb.1: // %t622; CHECK-NEXT: fmov d1, d0623; CHECK-NEXT: str wzr, [x1]624; CHECK-NEXT: .LBB21_2: // %e625; CHECK-NEXT: fmov d0, d1626; CHECK-NEXT: ret627entry:628 br i1 %c, label %t, label %e629t:630 store i32 0, ptr %p631 br label %e632e:633 %h = phi <2 x i32> [%a, %t], [%b, %entry]634 ret <2 x i32> %h635}636 637define <3 x i32> @tv3i32(i1 %c, ptr %p, <3 x i32> %a, <3 x i32> %b) {638; CHECK-LABEL: tv3i32:639; CHECK: // %bb.0: // %entry640; CHECK-NEXT: tbz w0, #0, .LBB22_2641; CHECK-NEXT: // %bb.1: // %t642; CHECK-NEXT: mov v1.16b, v0.16b643; CHECK-NEXT: str wzr, [x1]644; CHECK-NEXT: .LBB22_2: // %e645; CHECK-NEXT: mov v0.16b, v1.16b646; CHECK-NEXT: ret647entry:648 br i1 %c, label %t, label %e649t:650 store i32 0, ptr %p651 br label %e652e:653 %h = phi <3 x i32> [%a, %t], [%b, %entry]654 ret <3 x i32> %h655}656 657define <4 x i32> @tv4i32(i1 %c, ptr %p, <4 x i32> %a, <4 x i32> %b) {658; CHECK-LABEL: tv4i32:659; CHECK: // %bb.0: // %entry660; CHECK-NEXT: tbz w0, #0, .LBB23_2661; CHECK-NEXT: // %bb.1: // %t662; CHECK-NEXT: mov v1.16b, v0.16b663; CHECK-NEXT: str wzr, [x1]664; CHECK-NEXT: .LBB23_2: // %e665; CHECK-NEXT: mov v0.16b, v1.16b666; CHECK-NEXT: ret667entry:668 br i1 %c, label %t, label %e669t:670 store i32 0, ptr %p671 br label %e672e:673 %h = phi <4 x i32> [%a, %t], [%b, %entry]674 ret <4 x i32> %h675}676 677define <8 x i32> @tv8i32(i1 %c, ptr %p, <8 x i32> %a, <8 x i32> %b) {678; CHECK-SD-LABEL: tv8i32:679; CHECK-SD: // %bb.0: // %entry680; CHECK-SD-NEXT: tbz w0, #0, .LBB24_2681; CHECK-SD-NEXT: // %bb.1: // %t682; CHECK-SD-NEXT: mov v2.16b, v0.16b683; CHECK-SD-NEXT: mov v3.16b, v1.16b684; CHECK-SD-NEXT: str wzr, [x1]685; CHECK-SD-NEXT: .LBB24_2: // %e686; CHECK-SD-NEXT: mov v0.16b, v2.16b687; CHECK-SD-NEXT: mov v1.16b, v3.16b688; CHECK-SD-NEXT: ret689;690; CHECK-GI-LABEL: tv8i32:691; CHECK-GI: // %bb.0: // %entry692; CHECK-GI-NEXT: mov v4.16b, v0.16b693; CHECK-GI-NEXT: mov v0.16b, v2.16b694; CHECK-GI-NEXT: tbz w0, #0, .LBB24_2695; CHECK-GI-NEXT: // %bb.1: // %t696; CHECK-GI-NEXT: mov v0.16b, v4.16b697; CHECK-GI-NEXT: mov v3.16b, v1.16b698; CHECK-GI-NEXT: str wzr, [x1]699; CHECK-GI-NEXT: .LBB24_2: // %e700; CHECK-GI-NEXT: mov v1.16b, v3.16b701; CHECK-GI-NEXT: ret702entry:703 br i1 %c, label %t, label %e704t:705 store i32 0, ptr %p706 br label %e707e:708 %h = phi <8 x i32> [%a, %t], [%b, %entry]709 ret <8 x i32> %h710}711 712define <2 x i64> @tv2i64(i1 %c, ptr %p, <2 x i64> %a, <2 x i64> %b) {713; CHECK-LABEL: tv2i64:714; CHECK: // %bb.0: // %entry715; CHECK-NEXT: tbz w0, #0, .LBB25_2716; CHECK-NEXT: // %bb.1: // %t717; CHECK-NEXT: mov v1.16b, v0.16b718; CHECK-NEXT: str wzr, [x1]719; CHECK-NEXT: .LBB25_2: // %e720; CHECK-NEXT: mov v0.16b, v1.16b721; CHECK-NEXT: ret722entry:723 br i1 %c, label %t, label %e724t:725 store i32 0, ptr %p726 br label %e727e:728 %h = phi <2 x i64> [%a, %t], [%b, %entry]729 ret <2 x i64> %h730}731 732define <3 x i64> @tv3i64(i1 %c, ptr %p, <3 x i64> %a, <3 x i64> %b) {733; CHECK-SD-LABEL: tv3i64:734; CHECK-SD: // %bb.0: // %entry735; CHECK-SD-NEXT: tbz w0, #0, .LBB26_2736; CHECK-SD-NEXT: // %bb.1: // %t737; CHECK-SD-NEXT: fmov d3, d0738; CHECK-SD-NEXT: fmov d4, d1739; CHECK-SD-NEXT: str wzr, [x1]740; CHECK-SD-NEXT: fmov d5, d2741; CHECK-SD-NEXT: .LBB26_2: // %e742; CHECK-SD-NEXT: fmov d0, d3743; CHECK-SD-NEXT: fmov d1, d4744; CHECK-SD-NEXT: fmov d2, d5745; CHECK-SD-NEXT: ret746;747; CHECK-GI-LABEL: tv3i64:748; CHECK-GI: // %bb.0: // %entry749; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1750; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q4751; CHECK-GI-NEXT: tbz w0, #0, .LBB26_2752; CHECK-GI-NEXT: // %bb.1: // %t753; CHECK-GI-NEXT: fmov d6, d0754; CHECK-GI-NEXT: fmov d7, d2755; CHECK-GI-NEXT: str wzr, [x1]756; CHECK-GI-NEXT: mov v6.d[1], v1.d[0]757; CHECK-GI-NEXT: mov v2.16b, v7.16b758; CHECK-GI-NEXT: // kill: def $d2 killed $d2 killed $q2759; CHECK-GI-NEXT: mov d1, v6.d[1]760; CHECK-GI-NEXT: mov v0.16b, v6.16b761; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0762; CHECK-GI-NEXT: ret763; CHECK-GI-NEXT: .LBB26_2:764; CHECK-GI-NEXT: fmov d0, d3765; CHECK-GI-NEXT: fmov d2, d5766; CHECK-GI-NEXT: // kill: def $d2 killed $d2 killed $q2767; CHECK-GI-NEXT: mov v0.d[1], v4.d[0]768; CHECK-GI-NEXT: mov d1, v0.d[1]769; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0770; CHECK-GI-NEXT: ret771entry:772 br i1 %c, label %t, label %e773t:774 store i32 0, ptr %p775 br label %e776e:777 %h = phi <3 x i64> [%a, %t], [%b, %entry]778 ret <3 x i64> %h779}780 781define <4 x i64> @tv4i64(i1 %c, ptr %p, <4 x i64> %a, <4 x i64> %b) {782; CHECK-SD-LABEL: tv4i64:783; CHECK-SD: // %bb.0: // %entry784; CHECK-SD-NEXT: tbz w0, #0, .LBB27_2785; CHECK-SD-NEXT: // %bb.1: // %t786; CHECK-SD-NEXT: mov v2.16b, v0.16b787; CHECK-SD-NEXT: mov v3.16b, v1.16b788; CHECK-SD-NEXT: str wzr, [x1]789; CHECK-SD-NEXT: .LBB27_2: // %e790; CHECK-SD-NEXT: mov v0.16b, v2.16b791; CHECK-SD-NEXT: mov v1.16b, v3.16b792; CHECK-SD-NEXT: ret793;794; CHECK-GI-LABEL: tv4i64:795; CHECK-GI: // %bb.0: // %entry796; CHECK-GI-NEXT: mov v4.16b, v0.16b797; CHECK-GI-NEXT: mov v0.16b, v2.16b798; CHECK-GI-NEXT: tbz w0, #0, .LBB27_2799; CHECK-GI-NEXT: // %bb.1: // %t800; CHECK-GI-NEXT: mov v0.16b, v4.16b801; CHECK-GI-NEXT: mov v3.16b, v1.16b802; CHECK-GI-NEXT: str wzr, [x1]803; CHECK-GI-NEXT: .LBB27_2: // %e804; CHECK-GI-NEXT: mov v1.16b, v3.16b805; CHECK-GI-NEXT: ret806entry:807 br i1 %c, label %t, label %e808t:809 store i32 0, ptr %p810 br label %e811e:812 %h = phi <4 x i64> [%a, %t], [%b, %entry]813 ret <4 x i64> %h814}815 816define <2 x i128> @tv2i128(i1 %c, ptr %p, <2 x i128> %a, <2 x i128> %b) {817; CHECK-SD-LABEL: tv2i128:818; CHECK-SD: // %bb.0: // %entry819; CHECK-SD-NEXT: tbz w0, #0, .LBB28_2820; CHECK-SD-NEXT: // %bb.1: // %t821; CHECK-SD-NEXT: mov x6, x2822; CHECK-SD-NEXT: mov x7, x3823; CHECK-SD-NEXT: str wzr, [x1]824; CHECK-SD-NEXT: b .LBB28_3825; CHECK-SD-NEXT: .LBB28_2:826; CHECK-SD-NEXT: ldp x4, x5, [sp]827; CHECK-SD-NEXT: .LBB28_3: // %e828; CHECK-SD-NEXT: mov x0, x6829; CHECK-SD-NEXT: mov x1, x7830; CHECK-SD-NEXT: mov x2, x4831; CHECK-SD-NEXT: mov x3, x5832; CHECK-SD-NEXT: ret833;834; CHECK-GI-LABEL: tv2i128:835; CHECK-GI: // %bb.0: // %entry836; CHECK-GI-NEXT: tbz w0, #0, .LBB28_2837; CHECK-GI-NEXT: // %bb.1: // %t838; CHECK-GI-NEXT: mov x9, x2839; CHECK-GI-NEXT: mov x10, x3840; CHECK-GI-NEXT: mov x2, x4841; CHECK-GI-NEXT: mov x3, x5842; CHECK-GI-NEXT: str wzr, [x1]843; CHECK-GI-NEXT: mov x0, x9844; CHECK-GI-NEXT: mov x1, x10845; CHECK-GI-NEXT: ret846; CHECK-GI-NEXT: .LBB28_2:847; CHECK-GI-NEXT: ldp x2, x3, [sp]848; CHECK-GI-NEXT: mov x0, x6849; CHECK-GI-NEXT: mov x1, x7850; CHECK-GI-NEXT: ret851entry:852 br i1 %c, label %t, label %e853t:854 store i32 0, ptr %p855 br label %e856e:857 %h = phi <2 x i128> [%a, %t], [%b, %entry]858 ret <2 x i128> %h859}860 861define <2 x ptr> @tv2p0(i1 %c, ptr %p, <2 x ptr> %a, <2 x ptr> %b) {862; CHECK-LABEL: tv2p0:863; CHECK: // %bb.0: // %entry864; CHECK-NEXT: tbz w0, #0, .LBB29_2865; CHECK-NEXT: // %bb.1: // %t866; CHECK-NEXT: mov v1.16b, v0.16b867; CHECK-NEXT: str wzr, [x1]868; CHECK-NEXT: .LBB29_2: // %e869; CHECK-NEXT: mov v0.16b, v1.16b870; CHECK-NEXT: ret871entry:872 br i1 %c, label %t, label %e873t:874 store i32 0, ptr %p875 br label %e876e:877 %h = phi <2 x ptr> [%a, %t], [%b, %entry]878 ret <2 x ptr> %h879}880 881define <3 x ptr> @tv3p0(i1 %c, ptr %p, <3 x ptr> %a, <3 x ptr> %b) {882; CHECK-SD-LABEL: tv3p0:883; CHECK-SD: // %bb.0: // %entry884; CHECK-SD-NEXT: tbz w0, #0, .LBB30_2885; CHECK-SD-NEXT: // %bb.1: // %t886; CHECK-SD-NEXT: fmov d3, d0887; CHECK-SD-NEXT: fmov d4, d1888; CHECK-SD-NEXT: str wzr, [x1]889; CHECK-SD-NEXT: fmov d5, d2890; CHECK-SD-NEXT: .LBB30_2: // %e891; CHECK-SD-NEXT: fmov d0, d3892; CHECK-SD-NEXT: fmov d1, d4893; CHECK-SD-NEXT: fmov d2, d5894; CHECK-SD-NEXT: ret895;896; CHECK-GI-LABEL: tv3p0:897; CHECK-GI: // %bb.0: // %entry898; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0899; CHECK-GI-NEXT: // kill: def $d2 killed $d2 def $q2900; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q3901; CHECK-GI-NEXT: // kill: def $d5 killed $d5 def $q5902; CHECK-GI-NEXT: tbz w0, #0, .LBB30_2903; CHECK-GI-NEXT: // %bb.1: // %t904; CHECK-GI-NEXT: fmov x8, d1905; CHECK-GI-NEXT: mov v5.16b, v2.16b906; CHECK-GI-NEXT: str wzr, [x1]907; CHECK-GI-NEXT: mov v0.d[1], x8908; CHECK-GI-NEXT: mov v3.16b, v0.16b909; CHECK-GI-NEXT: b .LBB30_3910; CHECK-GI-NEXT: .LBB30_2:911; CHECK-GI-NEXT: fmov x8, d4912; CHECK-GI-NEXT: mov v3.d[1], x8913; CHECK-GI-NEXT: .LBB30_3: // %e914; CHECK-GI-NEXT: mov d0, v3.d[1]915; CHECK-GI-NEXT: fmov d2, d5916; CHECK-GI-NEXT: fmov x9, d0917; CHECK-GI-NEXT: fmov d0, d3918; CHECK-GI-NEXT: fmov d1, x9919; CHECK-GI-NEXT: ret920entry:921 br i1 %c, label %t, label %e922t:923 store i32 0, ptr %p924 br label %e925e:926 %h = phi <3 x ptr> [%a, %t], [%b, %entry]927 ret <3 x ptr> %h928}929 930define <4 x ptr> @tv4p0(i1 %c, ptr %p, <4 x ptr> %a, <4 x ptr> %b) {931; CHECK-SD-LABEL: tv4p0:932; CHECK-SD: // %bb.0: // %entry933; CHECK-SD-NEXT: tbz w0, #0, .LBB31_2934; CHECK-SD-NEXT: // %bb.1: // %t935; CHECK-SD-NEXT: mov v2.16b, v0.16b936; CHECK-SD-NEXT: mov v3.16b, v1.16b937; CHECK-SD-NEXT: str wzr, [x1]938; CHECK-SD-NEXT: .LBB31_2: // %e939; CHECK-SD-NEXT: mov v0.16b, v2.16b940; CHECK-SD-NEXT: mov v1.16b, v3.16b941; CHECK-SD-NEXT: ret942;943; CHECK-GI-LABEL: tv4p0:944; CHECK-GI: // %bb.0: // %entry945; CHECK-GI-NEXT: mov v4.16b, v0.16b946; CHECK-GI-NEXT: mov v0.16b, v2.16b947; CHECK-GI-NEXT: tbz w0, #0, .LBB31_2948; CHECK-GI-NEXT: // %bb.1: // %t949; CHECK-GI-NEXT: mov v0.16b, v4.16b950; CHECK-GI-NEXT: mov v3.16b, v1.16b951; CHECK-GI-NEXT: str wzr, [x1]952; CHECK-GI-NEXT: .LBB31_2: // %e953; CHECK-GI-NEXT: mov v1.16b, v3.16b954; CHECK-GI-NEXT: ret955entry:956 br i1 %c, label %t, label %e957t:958 store i32 0, ptr %p959 br label %e960e:961 %h = phi <4 x ptr> [%a, %t], [%b, %entry]962 ret <4 x ptr> %h963}964 965define <2 x half> @tv2f16(i1 %c, ptr %p, <2 x half> %a, <2 x half> %b) {966; CHECK-LABEL: tv2f16:967; CHECK: // %bb.0: // %entry968; CHECK-NEXT: tbz w0, #0, .LBB32_2969; CHECK-NEXT: // %bb.1: // %t970; CHECK-NEXT: fmov d1, d0971; CHECK-NEXT: str wzr, [x1]972; CHECK-NEXT: .LBB32_2: // %e973; CHECK-NEXT: fmov d0, d1974; CHECK-NEXT: ret975entry:976 br i1 %c, label %t, label %e977t:978 store i32 0, ptr %p979 br label %e980e:981 %h = phi <2 x half> [%a, %t], [%b, %entry]982 ret <2 x half> %h983}984 985define <3 x half> @tv3f16(i1 %c, ptr %p, <3 x half> %a, <3 x half> %b) {986; CHECK-LABEL: tv3f16:987; CHECK: // %bb.0: // %entry988; CHECK-NEXT: tbz w0, #0, .LBB33_2989; CHECK-NEXT: // %bb.1: // %t990; CHECK-NEXT: fmov d1, d0991; CHECK-NEXT: str wzr, [x1]992; CHECK-NEXT: .LBB33_2: // %e993; CHECK-NEXT: fmov d0, d1994; CHECK-NEXT: ret995entry:996 br i1 %c, label %t, label %e997t:998 store i32 0, ptr %p999 br label %e1000e:1001 %h = phi <3 x half> [%a, %t], [%b, %entry]1002 ret <3 x half> %h1003}1004 1005define <4 x half> @tv4f16(i1 %c, ptr %p, <4 x half> %a, <4 x half> %b) {1006; CHECK-LABEL: tv4f16:1007; CHECK: // %bb.0: // %entry1008; CHECK-NEXT: tbz w0, #0, .LBB34_21009; CHECK-NEXT: // %bb.1: // %t1010; CHECK-NEXT: fmov d1, d01011; CHECK-NEXT: str wzr, [x1]1012; CHECK-NEXT: .LBB34_2: // %e1013; CHECK-NEXT: fmov d0, d11014; CHECK-NEXT: ret1015entry:1016 br i1 %c, label %t, label %e1017t:1018 store i32 0, ptr %p1019 br label %e1020e:1021 %h = phi <4 x half> [%a, %t], [%b, %entry]1022 ret <4 x half> %h1023}1024 1025define <8 x half> @tv8f16(i1 %c, ptr %p, <8 x half> %a, <8 x half> %b) {1026; CHECK-LABEL: tv8f16:1027; CHECK: // %bb.0: // %entry1028; CHECK-NEXT: tbz w0, #0, .LBB35_21029; CHECK-NEXT: // %bb.1: // %t1030; CHECK-NEXT: mov v1.16b, v0.16b1031; CHECK-NEXT: str wzr, [x1]1032; CHECK-NEXT: .LBB35_2: // %e1033; CHECK-NEXT: mov v0.16b, v1.16b1034; CHECK-NEXT: ret1035entry:1036 br i1 %c, label %t, label %e1037t:1038 store i32 0, ptr %p1039 br label %e1040e:1041 %h = phi <8 x half> [%a, %t], [%b, %entry]1042 ret <8 x half> %h1043}1044 1045define <16 x half> @tv16f16(i1 %c, ptr %p, <16 x half> %a, <16 x half> %b) {1046; CHECK-SD-LABEL: tv16f16:1047; CHECK-SD: // %bb.0: // %entry1048; CHECK-SD-NEXT: tbz w0, #0, .LBB36_21049; CHECK-SD-NEXT: // %bb.1: // %t1050; CHECK-SD-NEXT: mov v2.16b, v0.16b1051; CHECK-SD-NEXT: mov v3.16b, v1.16b1052; CHECK-SD-NEXT: str wzr, [x1]1053; CHECK-SD-NEXT: .LBB36_2: // %e1054; CHECK-SD-NEXT: mov v0.16b, v2.16b1055; CHECK-SD-NEXT: mov v1.16b, v3.16b1056; CHECK-SD-NEXT: ret1057;1058; CHECK-GI-LABEL: tv16f16:1059; CHECK-GI: // %bb.0: // %entry1060; CHECK-GI-NEXT: mov v4.16b, v0.16b1061; CHECK-GI-NEXT: mov v0.16b, v2.16b1062; CHECK-GI-NEXT: tbz w0, #0, .LBB36_21063; CHECK-GI-NEXT: // %bb.1: // %t1064; CHECK-GI-NEXT: mov v0.16b, v4.16b1065; CHECK-GI-NEXT: mov v3.16b, v1.16b1066; CHECK-GI-NEXT: str wzr, [x1]1067; CHECK-GI-NEXT: .LBB36_2: // %e1068; CHECK-GI-NEXT: mov v1.16b, v3.16b1069; CHECK-GI-NEXT: ret1070entry:1071 br i1 %c, label %t, label %e1072t:1073 store i32 0, ptr %p1074 br label %e1075e:1076 %h = phi <16 x half> [%a, %t], [%b, %entry]1077 ret <16 x half> %h1078}1079 1080define <2 x float> @tv2f32(i1 %c, ptr %p, <2 x float> %a, <2 x float> %b) {1081; CHECK-LABEL: tv2f32:1082; CHECK: // %bb.0: // %entry1083; CHECK-NEXT: tbz w0, #0, .LBB37_21084; CHECK-NEXT: // %bb.1: // %t1085; CHECK-NEXT: fmov d1, d01086; CHECK-NEXT: str wzr, [x1]1087; CHECK-NEXT: .LBB37_2: // %e1088; CHECK-NEXT: fmov d0, d11089; CHECK-NEXT: ret1090entry:1091 br i1 %c, label %t, label %e1092t:1093 store i32 0, ptr %p1094 br label %e1095e:1096 %h = phi <2 x float> [%a, %t], [%b, %entry]1097 ret <2 x float> %h1098}1099 1100define <3 x float> @tv3f32(i1 %c, ptr %p, <3 x float> %a, <3 x float> %b) {1101; CHECK-LABEL: tv3f32:1102; CHECK: // %bb.0: // %entry1103; CHECK-NEXT: tbz w0, #0, .LBB38_21104; CHECK-NEXT: // %bb.1: // %t1105; CHECK-NEXT: mov v1.16b, v0.16b1106; CHECK-NEXT: str wzr, [x1]1107; CHECK-NEXT: .LBB38_2: // %e1108; CHECK-NEXT: mov v0.16b, v1.16b1109; CHECK-NEXT: ret1110entry:1111 br i1 %c, label %t, label %e1112t:1113 store i32 0, ptr %p1114 br label %e1115e:1116 %h = phi <3 x float> [%a, %t], [%b, %entry]1117 ret <3 x float> %h1118}1119 1120define <4 x float> @tv4f32(i1 %c, ptr %p, <4 x float> %a, <4 x float> %b) {1121; CHECK-LABEL: tv4f32:1122; CHECK: // %bb.0: // %entry1123; CHECK-NEXT: tbz w0, #0, .LBB39_21124; CHECK-NEXT: // %bb.1: // %t1125; CHECK-NEXT: mov v1.16b, v0.16b1126; CHECK-NEXT: str wzr, [x1]1127; CHECK-NEXT: .LBB39_2: // %e1128; CHECK-NEXT: mov v0.16b, v1.16b1129; CHECK-NEXT: ret1130entry:1131 br i1 %c, label %t, label %e1132t:1133 store i32 0, ptr %p1134 br label %e1135e:1136 %h = phi <4 x float> [%a, %t], [%b, %entry]1137 ret <4 x float> %h1138}1139 1140define <8 x float> @tv8f32(i1 %c, ptr %p, <8 x float> %a, <8 x float> %b) {1141; CHECK-SD-LABEL: tv8f32:1142; CHECK-SD: // %bb.0: // %entry1143; CHECK-SD-NEXT: tbz w0, #0, .LBB40_21144; CHECK-SD-NEXT: // %bb.1: // %t1145; CHECK-SD-NEXT: mov v2.16b, v0.16b1146; CHECK-SD-NEXT: mov v3.16b, v1.16b1147; CHECK-SD-NEXT: str wzr, [x1]1148; CHECK-SD-NEXT: .LBB40_2: // %e1149; CHECK-SD-NEXT: mov v0.16b, v2.16b1150; CHECK-SD-NEXT: mov v1.16b, v3.16b1151; CHECK-SD-NEXT: ret1152;1153; CHECK-GI-LABEL: tv8f32:1154; CHECK-GI: // %bb.0: // %entry1155; CHECK-GI-NEXT: mov v4.16b, v0.16b1156; CHECK-GI-NEXT: mov v0.16b, v2.16b1157; CHECK-GI-NEXT: tbz w0, #0, .LBB40_21158; CHECK-GI-NEXT: // %bb.1: // %t1159; CHECK-GI-NEXT: mov v0.16b, v4.16b1160; CHECK-GI-NEXT: mov v3.16b, v1.16b1161; CHECK-GI-NEXT: str wzr, [x1]1162; CHECK-GI-NEXT: .LBB40_2: // %e1163; CHECK-GI-NEXT: mov v1.16b, v3.16b1164; CHECK-GI-NEXT: ret1165entry:1166 br i1 %c, label %t, label %e1167t:1168 store i32 0, ptr %p1169 br label %e1170e:1171 %h = phi <8 x float> [%a, %t], [%b, %entry]1172 ret <8 x float> %h1173}1174 1175define <2 x double> @tv2f64(i1 %c, ptr %p, <2 x double> %a, <2 x double> %b) {1176; CHECK-LABEL: tv2f64:1177; CHECK: // %bb.0: // %entry1178; CHECK-NEXT: tbz w0, #0, .LBB41_21179; CHECK-NEXT: // %bb.1: // %t1180; CHECK-NEXT: mov v1.16b, v0.16b1181; CHECK-NEXT: str wzr, [x1]1182; CHECK-NEXT: .LBB41_2: // %e1183; CHECK-NEXT: mov v0.16b, v1.16b1184; CHECK-NEXT: ret1185entry:1186 br i1 %c, label %t, label %e1187t:1188 store i32 0, ptr %p1189 br label %e1190e:1191 %h = phi <2 x double> [%a, %t], [%b, %entry]1192 ret <2 x double> %h1193}1194 1195define <3 x double> @tv3f64(i1 %c, ptr %p, <3 x double> %a, <3 x double> %b) {1196; CHECK-SD-LABEL: tv3f64:1197; CHECK-SD: // %bb.0: // %entry1198; CHECK-SD-NEXT: tbz w0, #0, .LBB42_21199; CHECK-SD-NEXT: // %bb.1: // %t1200; CHECK-SD-NEXT: fmov d3, d01201; CHECK-SD-NEXT: fmov d4, d11202; CHECK-SD-NEXT: str wzr, [x1]1203; CHECK-SD-NEXT: fmov d5, d21204; CHECK-SD-NEXT: .LBB42_2: // %e1205; CHECK-SD-NEXT: fmov d0, d31206; CHECK-SD-NEXT: fmov d1, d41207; CHECK-SD-NEXT: fmov d2, d51208; CHECK-SD-NEXT: ret1209;1210; CHECK-GI-LABEL: tv3f64:1211; CHECK-GI: // %bb.0: // %entry1212; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q11213; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q41214; CHECK-GI-NEXT: tbz w0, #0, .LBB42_21215; CHECK-GI-NEXT: // %bb.1: // %t1216; CHECK-GI-NEXT: fmov d6, d01217; CHECK-GI-NEXT: fmov d7, d21218; CHECK-GI-NEXT: str wzr, [x1]1219; CHECK-GI-NEXT: mov v6.d[1], v1.d[0]1220; CHECK-GI-NEXT: mov v2.16b, v7.16b1221; CHECK-GI-NEXT: // kill: def $d2 killed $d2 killed $q21222; CHECK-GI-NEXT: mov d1, v6.d[1]1223; CHECK-GI-NEXT: mov v0.16b, v6.16b1224; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01225; CHECK-GI-NEXT: ret1226; CHECK-GI-NEXT: .LBB42_2:1227; CHECK-GI-NEXT: fmov d0, d31228; CHECK-GI-NEXT: fmov d2, d51229; CHECK-GI-NEXT: // kill: def $d2 killed $d2 killed $q21230; CHECK-GI-NEXT: mov v0.d[1], v4.d[0]1231; CHECK-GI-NEXT: mov d1, v0.d[1]1232; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01233; CHECK-GI-NEXT: ret1234entry:1235 br i1 %c, label %t, label %e1236t:1237 store i32 0, ptr %p1238 br label %e1239e:1240 %h = phi <3 x double> [%a, %t], [%b, %entry]1241 ret <3 x double> %h1242}1243 1244define <4 x double> @tv4f64(i1 %c, ptr %p, <4 x double> %a, <4 x double> %b) {1245; CHECK-SD-LABEL: tv4f64:1246; CHECK-SD: // %bb.0: // %entry1247; CHECK-SD-NEXT: tbz w0, #0, .LBB43_21248; CHECK-SD-NEXT: // %bb.1: // %t1249; CHECK-SD-NEXT: mov v2.16b, v0.16b1250; CHECK-SD-NEXT: mov v3.16b, v1.16b1251; CHECK-SD-NEXT: str wzr, [x1]1252; CHECK-SD-NEXT: .LBB43_2: // %e1253; CHECK-SD-NEXT: mov v0.16b, v2.16b1254; CHECK-SD-NEXT: mov v1.16b, v3.16b1255; CHECK-SD-NEXT: ret1256;1257; CHECK-GI-LABEL: tv4f64:1258; CHECK-GI: // %bb.0: // %entry1259; CHECK-GI-NEXT: mov v4.16b, v0.16b1260; CHECK-GI-NEXT: mov v0.16b, v2.16b1261; CHECK-GI-NEXT: tbz w0, #0, .LBB43_21262; CHECK-GI-NEXT: // %bb.1: // %t1263; CHECK-GI-NEXT: mov v0.16b, v4.16b1264; CHECK-GI-NEXT: mov v3.16b, v1.16b1265; CHECK-GI-NEXT: str wzr, [x1]1266; CHECK-GI-NEXT: .LBB43_2: // %e1267; CHECK-GI-NEXT: mov v1.16b, v3.16b1268; CHECK-GI-NEXT: ret1269entry:1270 br i1 %c, label %t, label %e1271t:1272 store i32 0, ptr %p1273 br label %e1274e:1275 %h = phi <4 x double> [%a, %t], [%b, %entry]1276 ret <4 x double> %h1277}1278 1279define <2 x fp128> @tv2f128(i1 %c, ptr %p, <2 x fp128> %a, <2 x fp128> %b) {1280; CHECK-SD-LABEL: tv2f128:1281; CHECK-SD: // %bb.0: // %entry1282; CHECK-SD-NEXT: tbz w0, #0, .LBB44_21283; CHECK-SD-NEXT: // %bb.1: // %t1284; CHECK-SD-NEXT: mov v2.16b, v0.16b1285; CHECK-SD-NEXT: mov v3.16b, v1.16b1286; CHECK-SD-NEXT: str wzr, [x1]1287; CHECK-SD-NEXT: .LBB44_2: // %e1288; CHECK-SD-NEXT: mov v0.16b, v2.16b1289; CHECK-SD-NEXT: mov v1.16b, v3.16b1290; CHECK-SD-NEXT: ret1291;1292; CHECK-GI-LABEL: tv2f128:1293; CHECK-GI: // %bb.0: // %entry1294; CHECK-GI-NEXT: tbz w0, #0, .LBB44_21295; CHECK-GI-NEXT: // %bb.1: // %t1296; CHECK-GI-NEXT: mov d4, v1.d[1]1297; CHECK-GI-NEXT: mov d5, v0.d[1]1298; CHECK-GI-NEXT: str wzr, [x1]1299; CHECK-GI-NEXT: fmov d2, d01300; CHECK-GI-NEXT: fmov d3, d11301; CHECK-GI-NEXT: b .LBB44_31302; CHECK-GI-NEXT: .LBB44_2:1303; CHECK-GI-NEXT: mov d4, v3.d[1]1304; CHECK-GI-NEXT: mov d5, v2.d[1]1305; CHECK-GI-NEXT: .LBB44_3: // %e1306; CHECK-GI-NEXT: fmov x8, d21307; CHECK-GI-NEXT: fmov x9, d31308; CHECK-GI-NEXT: mov v0.d[0], x81309; CHECK-GI-NEXT: mov v1.d[0], x91310; CHECK-GI-NEXT: fmov x8, d51311; CHECK-GI-NEXT: fmov x9, d41312; CHECK-GI-NEXT: mov v0.d[1], x81313; CHECK-GI-NEXT: mov v1.d[1], x91314; CHECK-GI-NEXT: ret1315entry:1316 br i1 %c, label %t, label %e1317t:1318 store i32 0, ptr %p1319 br label %e1320e:1321 %h = phi <2 x fp128> [%a, %t], [%b, %entry]1322 ret <2 x fp128> %h1323}1324