brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.4 KiB · 02842c0 Raw
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