brintos

brintos / llvm-project-archived public Read only

0
0
Text · 43.3 KiB · e4763f0 Raw
1086 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible  < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8define <4 x i8> @select_v4i8(<4 x i8> %op1, <4 x i8> %op2, <4 x i1> %mask) {9; CHECK-LABEL: select_v4i8:10; CHECK:       // %bb.0:11; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z212; CHECK-NEXT:    ptrue p0.h13; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z014; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z115; CHECK-NEXT:    lsl z2.h, z2.h, #1516; CHECK-NEXT:    asr z2.h, z2.h, #1517; CHECK-NEXT:    and z2.h, z2.h, #0x118; CHECK-NEXT:    cmpne p0.h, p0/z, z2.h, #019; CHECK-NEXT:    sel z0.h, p0, z0.h, z1.h20; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z021; CHECK-NEXT:    ret22;23; NONEON-NOSVE-LABEL: select_v4i8:24; NONEON-NOSVE:       // %bb.0:25; NONEON-NOSVE-NEXT:    sub sp, sp, #3226; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3227; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #8]28; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #22]29; NONEON-NOSVE-NEXT:    str d0, [sp]30; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #20]31; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #14]32; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #6]33; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #18]34; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #135; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #136; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]37; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #138; NONEON-NOSVE-NEXT:    tst w9, #0xffff39; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #140; NONEON-NOSVE-NEXT:    csel w9, w13, w12, ne41; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #4]42; NONEON-NOSVE-NEXT:    tst w11, #0xffff43; NONEON-NOSVE-NEXT:    strh w9, [sp, #30]44; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]45; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #2]46; NONEON-NOSVE-NEXT:    csel w9, w12, w9, ne47; NONEON-NOSVE-NEXT:    tst w10, #0xffff48; NONEON-NOSVE-NEXT:    ldrh w10, [sp]49; NONEON-NOSVE-NEXT:    strh w9, [sp, #28]50; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]51; NONEON-NOSVE-NEXT:    csel w9, w11, w9, ne52; NONEON-NOSVE-NEXT:    tst w8, #0xffff53; NONEON-NOSVE-NEXT:    strh w9, [sp, #26]54; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]55; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne56; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]57; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]58; NONEON-NOSVE-NEXT:    add sp, sp, #3259; NONEON-NOSVE-NEXT:    ret60  %sel = select <4 x i1> %mask, <4 x i8> %op1, <4 x i8> %op261  ret <4 x i8> %sel62}63 64define <8 x i8> @select_v8i8(<8 x i8> %op1, <8 x i8> %op2, <8 x i1> %mask) {65; CHECK-LABEL: select_v8i8:66; CHECK:       // %bb.0:67; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z268; CHECK-NEXT:    ptrue p0.b69; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z070; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z171; CHECK-NEXT:    lsl z2.b, z2.b, #772; CHECK-NEXT:    asr z2.b, z2.b, #773; CHECK-NEXT:    and z2.b, z2.b, #0x174; CHECK-NEXT:    cmpne p0.b, p0/z, z2.b, #075; CHECK-NEXT:    sel z0.b, p0, z0.b, z1.b76; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z077; CHECK-NEXT:    ret78;79; NONEON-NOSVE-LABEL: select_v8i8:80; NONEON-NOSVE:       // %bb.0:81; NONEON-NOSVE-NEXT:    sub sp, sp, #3282; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3283; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #8]84; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #23]85; NONEON-NOSVE-NEXT:    str d0, [sp]86; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #22]87; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #15]88; NONEON-NOSVE-NEXT:    ldrb w17, [sp, #7]89; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #21]90; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #191; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #192; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #20]93; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #194; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #19]95; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #18]96; NONEON-NOSVE-NEXT:    tst w13, #0xff97; NONEON-NOSVE-NEXT:    sbfx w12, w12, #0, #198; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #17]99; NONEON-NOSVE-NEXT:    csel w13, w17, w16, ne100; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #6]101; NONEON-NOSVE-NEXT:    tst w15, #0xff102; NONEON-NOSVE-NEXT:    strb w13, [sp, #31]103; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #14]104; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #5]105; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1106; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1107; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1108; NONEON-NOSVE-NEXT:    csel w13, w16, w13, ne109; NONEON-NOSVE-NEXT:    tst w14, #0xff110; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #4]111; NONEON-NOSVE-NEXT:    strb w13, [sp, #30]112; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #13]113; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]114; NONEON-NOSVE-NEXT:    csel w13, w15, w13, ne115; NONEON-NOSVE-NEXT:    tst w12, #0xff116; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1117; NONEON-NOSVE-NEXT:    strb w13, [sp, #29]118; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #12]119; NONEON-NOSVE-NEXT:    csel w12, w14, w13, ne120; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #3]121; NONEON-NOSVE-NEXT:    tst w11, #0xff122; NONEON-NOSVE-NEXT:    strb w12, [sp, #28]123; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #11]124; NONEON-NOSVE-NEXT:    csel w11, w13, w12, ne125; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #2]126; NONEON-NOSVE-NEXT:    tst w10, #0xff127; NONEON-NOSVE-NEXT:    strb w11, [sp, #27]128; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #10]129; NONEON-NOSVE-NEXT:    csel w10, w12, w11, ne130; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #1]131; NONEON-NOSVE-NEXT:    tst w9, #0xff132; NONEON-NOSVE-NEXT:    strb w10, [sp, #26]133; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #9]134; NONEON-NOSVE-NEXT:    csel w9, w11, w10, ne135; NONEON-NOSVE-NEXT:    ldrb w10, [sp]136; NONEON-NOSVE-NEXT:    tst w8, #0xff137; NONEON-NOSVE-NEXT:    strb w9, [sp, #25]138; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]139; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne140; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]141; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]142; NONEON-NOSVE-NEXT:    add sp, sp, #32143; NONEON-NOSVE-NEXT:    ret144  %sel = select <8 x i1> %mask, <8 x i8> %op1, <8 x i8> %op2145  ret <8 x i8> %sel146}147 148define <16 x i8> @select_v16i8(<16 x i8> %op1, <16 x i8> %op2, <16 x i1> %mask) {149; CHECK-LABEL: select_v16i8:150; CHECK:       // %bb.0:151; CHECK-NEXT:    // kill: def $q2 killed $q2 def $z2152; CHECK-NEXT:    ptrue p0.b153; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0154; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1155; CHECK-NEXT:    lsl z2.b, z2.b, #7156; CHECK-NEXT:    asr z2.b, z2.b, #7157; CHECK-NEXT:    and z2.b, z2.b, #0x1158; CHECK-NEXT:    cmpne p0.b, p0/z, z2.b, #0159; CHECK-NEXT:    sel z0.b, p0, z0.b, z1.b160; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0161; CHECK-NEXT:    ret162;163; NONEON-NOSVE-LABEL: select_v16i8:164; NONEON-NOSVE:       // %bb.0:165; NONEON-NOSVE-NEXT:    sub sp, sp, #64166; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 64167; NONEON-NOSVE-NEXT:    stp q1, q2, [sp, #16]168; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #47]169; NONEON-NOSVE-NEXT:    str q0, [sp]170; NONEON-NOSVE-NEXT:    ldrb w4, [sp, #46]171; NONEON-NOSVE-NEXT:    ldrb w5, [sp, #31]172; NONEON-NOSVE-NEXT:    ldrb w6, [sp, #15]173; NONEON-NOSVE-NEXT:    ldrb w3, [sp, #45]174; NONEON-NOSVE-NEXT:    sbfx w2, w2, #0, #1175; NONEON-NOSVE-NEXT:    sbfx w4, w4, #0, #1176; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #44]177; NONEON-NOSVE-NEXT:    sbfx w3, w3, #0, #1178; NONEON-NOSVE-NEXT:    ldrb w0, [sp, #43]179; NONEON-NOSVE-NEXT:    ldrb w18, [sp, #42]180; NONEON-NOSVE-NEXT:    tst w2, #0xff181; NONEON-NOSVE-NEXT:    sbfx w1, w1, #0, #1182; NONEON-NOSVE-NEXT:    ldrb w17, [sp, #41]183; NONEON-NOSVE-NEXT:    csel w2, w6, w5, ne184; NONEON-NOSVE-NEXT:    ldrb w5, [sp, #14]185; NONEON-NOSVE-NEXT:    tst w4, #0xff186; NONEON-NOSVE-NEXT:    strb w2, [sp, #63]187; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #30]188; NONEON-NOSVE-NEXT:    ldrb w4, [sp, #13]189; NONEON-NOSVE-NEXT:    sbfx w0, w0, #0, #1190; NONEON-NOSVE-NEXT:    sbfx w18, w18, #0, #1191; NONEON-NOSVE-NEXT:    sbfx w17, w17, #0, #1192; NONEON-NOSVE-NEXT:    csel w2, w5, w2, ne193; NONEON-NOSVE-NEXT:    tst w3, #0xff194; NONEON-NOSVE-NEXT:    ldrb w3, [sp, #12]195; NONEON-NOSVE-NEXT:    strb w2, [sp, #62]196; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #29]197; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #40]198; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #39]199; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #38]200; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #37]201; NONEON-NOSVE-NEXT:    csel w2, w4, w2, ne202; NONEON-NOSVE-NEXT:    tst w1, #0xff203; NONEON-NOSVE-NEXT:    sbfx w16, w16, #0, #1204; NONEON-NOSVE-NEXT:    strb w2, [sp, #61]205; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #28]206; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1207; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1208; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1209; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #36]210; NONEON-NOSVE-NEXT:    csel w1, w3, w2, ne211; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #11]212; NONEON-NOSVE-NEXT:    tst w0, #0xff213; NONEON-NOSVE-NEXT:    strb w1, [sp, #60]214; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #27]215; NONEON-NOSVE-NEXT:    sbfx w12, w12, #0, #1216; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #35]217; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #34]218; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #33]219; NONEON-NOSVE-NEXT:    csel w0, w2, w1, ne220; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #10]221; NONEON-NOSVE-NEXT:    tst w18, #0xff222; NONEON-NOSVE-NEXT:    strb w0, [sp, #59]223; NONEON-NOSVE-NEXT:    ldrb w0, [sp, #26]224; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1225; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1226; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1227; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #32]228; NONEON-NOSVE-NEXT:    csel w18, w1, w0, ne229; NONEON-NOSVE-NEXT:    ldrb w0, [sp, #9]230; NONEON-NOSVE-NEXT:    tst w17, #0xff231; NONEON-NOSVE-NEXT:    strb w18, [sp, #58]232; NONEON-NOSVE-NEXT:    ldrb w18, [sp, #25]233; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1234; NONEON-NOSVE-NEXT:    csel w17, w0, w18, ne235; NONEON-NOSVE-NEXT:    ldrb w18, [sp, #8]236; NONEON-NOSVE-NEXT:    tst w16, #0xff237; NONEON-NOSVE-NEXT:    strb w17, [sp, #57]238; NONEON-NOSVE-NEXT:    ldrb w17, [sp, #24]239; NONEON-NOSVE-NEXT:    csel w16, w18, w17, ne240; NONEON-NOSVE-NEXT:    ldrb w17, [sp, #7]241; NONEON-NOSVE-NEXT:    tst w15, #0xff242; NONEON-NOSVE-NEXT:    strb w16, [sp, #56]243; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #23]244; NONEON-NOSVE-NEXT:    csel w15, w17, w16, ne245; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #6]246; NONEON-NOSVE-NEXT:    tst w14, #0xff247; NONEON-NOSVE-NEXT:    strb w15, [sp, #55]248; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #22]249; NONEON-NOSVE-NEXT:    csel w14, w16, w15, ne250; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #5]251; NONEON-NOSVE-NEXT:    tst w13, #0xff252; NONEON-NOSVE-NEXT:    strb w14, [sp, #54]253; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #21]254; NONEON-NOSVE-NEXT:    csel w13, w15, w14, ne255; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #4]256; NONEON-NOSVE-NEXT:    tst w12, #0xff257; NONEON-NOSVE-NEXT:    strb w13, [sp, #53]258; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #20]259; NONEON-NOSVE-NEXT:    csel w12, w14, w13, ne260; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #3]261; NONEON-NOSVE-NEXT:    tst w11, #0xff262; NONEON-NOSVE-NEXT:    strb w12, [sp, #52]263; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #19]264; NONEON-NOSVE-NEXT:    csel w11, w13, w12, ne265; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #2]266; NONEON-NOSVE-NEXT:    tst w10, #0xff267; NONEON-NOSVE-NEXT:    strb w11, [sp, #51]268; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #18]269; NONEON-NOSVE-NEXT:    csel w10, w12, w11, ne270; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #1]271; NONEON-NOSVE-NEXT:    tst w9, #0xff272; NONEON-NOSVE-NEXT:    strb w10, [sp, #50]273; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #17]274; NONEON-NOSVE-NEXT:    csel w9, w11, w10, ne275; NONEON-NOSVE-NEXT:    ldrb w10, [sp]276; NONEON-NOSVE-NEXT:    tst w8, #0xff277; NONEON-NOSVE-NEXT:    strb w9, [sp, #49]278; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #16]279; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne280; NONEON-NOSVE-NEXT:    strb w8, [sp, #48]281; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]282; NONEON-NOSVE-NEXT:    add sp, sp, #64283; NONEON-NOSVE-NEXT:    ret284  %sel = select <16 x i1> %mask, <16 x i8> %op1, <16 x i8> %op2285  ret <16 x i8> %sel286}287 288define void @select_v32i8(ptr %a, ptr %b) {289; CHECK-LABEL: select_v32i8:290; CHECK:       // %bb.0:291; CHECK-NEXT:    ldp q3, q0, [x1]292; CHECK-NEXT:    ptrue p0.b, vl16293; CHECK-NEXT:    ldp q2, q1, [x0]294; CHECK-NEXT:    mov w8, #16 // =0x10295; CHECK-NEXT:    cmpne p1.b, p0/z, z1.b, z0.b296; CHECK-NEXT:    cmpne p0.b, p0/z, z2.b, z3.b297; CHECK-NEXT:    st1b { z0.b }, p1, [x0, x8]298; CHECK-NEXT:    st1b { z3.b }, p0, [x0]299; CHECK-NEXT:    ret300;301; NONEON-NOSVE-LABEL: select_v32i8:302; NONEON-NOSVE:       // %bb.0:303; NONEON-NOSVE-NEXT:    sub sp, sp, #208304; NONEON-NOSVE-NEXT:    stp x29, x30, [sp, #112] // 16-byte Folded Spill305; NONEON-NOSVE-NEXT:    stp x28, x27, [sp, #128] // 16-byte Folded Spill306; NONEON-NOSVE-NEXT:    stp x26, x25, [sp, #144] // 16-byte Folded Spill307; NONEON-NOSVE-NEXT:    stp x24, x23, [sp, #160] // 16-byte Folded Spill308; NONEON-NOSVE-NEXT:    stp x22, x21, [sp, #176] // 16-byte Folded Spill309; NONEON-NOSVE-NEXT:    stp x20, x19, [sp, #192] // 16-byte Folded Spill310; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 208311; NONEON-NOSVE-NEXT:    .cfi_offset w19, -8312; NONEON-NOSVE-NEXT:    .cfi_offset w20, -16313; NONEON-NOSVE-NEXT:    .cfi_offset w21, -24314; NONEON-NOSVE-NEXT:    .cfi_offset w22, -32315; NONEON-NOSVE-NEXT:    .cfi_offset w23, -40316; NONEON-NOSVE-NEXT:    .cfi_offset w24, -48317; NONEON-NOSVE-NEXT:    .cfi_offset w25, -56318; NONEON-NOSVE-NEXT:    .cfi_offset w26, -64319; NONEON-NOSVE-NEXT:    .cfi_offset w27, -72320; NONEON-NOSVE-NEXT:    .cfi_offset w28, -80321; NONEON-NOSVE-NEXT:    .cfi_offset w30, -88322; NONEON-NOSVE-NEXT:    .cfi_offset w29, -96323; NONEON-NOSVE-NEXT:    ldp q0, q3, [x1]324; NONEON-NOSVE-NEXT:    ldp q1, q2, [x0]325; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #16]326; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #33]327; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #17]328; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #34]329; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #18]330; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #35]331; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #19]332; NONEON-NOSVE-NEXT:    cmp w9, w8333; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #36]334; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #20]335; NONEON-NOSVE-NEXT:    csel w8, w9, w8, eq336; NONEON-NOSVE-NEXT:    cmp w11, w10337; NONEON-NOSVE-NEXT:    ldrb w18, [sp, #37]338; NONEON-NOSVE-NEXT:    csel w9, w11, w10, eq339; NONEON-NOSVE-NEXT:    cmp w13, w12340; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #21]341; NONEON-NOSVE-NEXT:    str w8, [sp, #12] // 4-byte Spill342; NONEON-NOSVE-NEXT:    csel w8, w13, w12, eq343; NONEON-NOSVE-NEXT:    cmp w16, w14344; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #38]345; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #22]346; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #4] // 8-byte Folded Spill347; NONEON-NOSVE-NEXT:    csel w8, w16, w14, eq348; NONEON-NOSVE-NEXT:    cmp w1, w18349; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #39]350; NONEON-NOSVE-NEXT:    ldrb w16, [sp, #23]351; NONEON-NOSVE-NEXT:    csel w12, w1, w18, eq352; NONEON-NOSVE-NEXT:    cmp w2, w13353; NONEON-NOSVE-NEXT:    ldrb w18, [sp, #40]354; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #24]355; NONEON-NOSVE-NEXT:    csel w13, w2, w13, eq356; NONEON-NOSVE-NEXT:    cmp w16, w14357; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #41]358; NONEON-NOSVE-NEXT:    ldrb w5, [sp, #25]359; NONEON-NOSVE-NEXT:    csel w14, w16, w14, eq360; NONEON-NOSVE-NEXT:    cmp w1, w18361; NONEON-NOSVE-NEXT:    ldrb w6, [sp, #26]362; NONEON-NOSVE-NEXT:    csel w16, w1, w18, eq363; NONEON-NOSVE-NEXT:    ldrb w1, [sp, #42]364; NONEON-NOSVE-NEXT:    cmp w5, w2365; NONEON-NOSVE-NEXT:    csel w18, w5, w2, eq366; NONEON-NOSVE-NEXT:    ldrb w2, [sp, #43]367; NONEON-NOSVE-NEXT:    ldrb w5, [sp, #27]368; NONEON-NOSVE-NEXT:    cmp w6, w1369; NONEON-NOSVE-NEXT:    ldrb w19, [sp, #28]370; NONEON-NOSVE-NEXT:    ldrb w29, [sp, #45]371; NONEON-NOSVE-NEXT:    csel w1, w6, w1, eq372; NONEON-NOSVE-NEXT:    ldrb w6, [sp, #44]373; NONEON-NOSVE-NEXT:    cmp w5, w2374; NONEON-NOSVE-NEXT:    ldrb w30, [sp, #29]375; NONEON-NOSVE-NEXT:    str w8, [sp] // 4-byte Spill376; NONEON-NOSVE-NEXT:    csel w2, w5, w2, eq377; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #46]378; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]379; NONEON-NOSVE-NEXT:    cmp w19, w6380; NONEON-NOSVE-NEXT:    stp q2, q3, [sp, #48]381; NONEON-NOSVE-NEXT:    ldrb w21, [sp, #47]382; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #31]383; NONEON-NOSVE-NEXT:    csel w5, w19, w6, eq384; NONEON-NOSVE-NEXT:    cmp w30, w29385; NONEON-NOSVE-NEXT:    ldrb w22, [sp, #64]386; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #48]387; NONEON-NOSVE-NEXT:    csel w6, w30, w29, eq388; NONEON-NOSVE-NEXT:    cmp w8, w9389; NONEON-NOSVE-NEXT:    ldrb w28, [sp, #65]390; NONEON-NOSVE-NEXT:    ldrb w29, [sp, #49]391; NONEON-NOSVE-NEXT:    csel w19, w8, w9, eq392; NONEON-NOSVE-NEXT:    cmp w10, w21393; NONEON-NOSVE-NEXT:    ldrb w27, [sp, #66]394; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #50]395; NONEON-NOSVE-NEXT:    csel w21, w10, w21, eq396; NONEON-NOSVE-NEXT:    cmp w11, w22397; NONEON-NOSVE-NEXT:    ldrb w26, [sp, #67]398; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #51]399; NONEON-NOSVE-NEXT:    csel w22, w11, w22, eq400; NONEON-NOSVE-NEXT:    cmp w29, w28401; NONEON-NOSVE-NEXT:    ldrb w25, [sp, #68]402; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #52]403; NONEON-NOSVE-NEXT:    csel w11, w29, w28, eq404; NONEON-NOSVE-NEXT:    cmp w8, w27405; NONEON-NOSVE-NEXT:    ldrb w24, [sp, #69]406; NONEON-NOSVE-NEXT:    ldrb w28, [sp, #53]407; NONEON-NOSVE-NEXT:    csel w8, w8, w27, eq408; NONEON-NOSVE-NEXT:    cmp w9, w26409; NONEON-NOSVE-NEXT:    ldrb w23, [sp, #70]410; NONEON-NOSVE-NEXT:    ldrb w27, [sp, #54]411; NONEON-NOSVE-NEXT:    csel w9, w9, w26, eq412; NONEON-NOSVE-NEXT:    cmp w10, w25413; NONEON-NOSVE-NEXT:    ldrb w20, [sp, #71]414; NONEON-NOSVE-NEXT:    ldrb w26, [sp, #55]415; NONEON-NOSVE-NEXT:    csel w10, w10, w25, eq416; NONEON-NOSVE-NEXT:    cmp w28, w24417; NONEON-NOSVE-NEXT:    ldrb w7, [sp, #72]418; NONEON-NOSVE-NEXT:    ldrb w25, [sp, #56]419; NONEON-NOSVE-NEXT:    csel w24, w28, w24, eq420; NONEON-NOSVE-NEXT:    cmp w27, w23421; NONEON-NOSVE-NEXT:    ldrb w4, [sp, #73]422; NONEON-NOSVE-NEXT:    ldrb w28, [sp, #57]423; NONEON-NOSVE-NEXT:    csel w23, w27, w23, eq424; NONEON-NOSVE-NEXT:    cmp w26, w20425; NONEON-NOSVE-NEXT:    ldrb w3, [sp, #74]426; NONEON-NOSVE-NEXT:    ldrb w27, [sp, #58]427; NONEON-NOSVE-NEXT:    csel w20, w26, w20, eq428; NONEON-NOSVE-NEXT:    cmp w25, w7429; NONEON-NOSVE-NEXT:    ldrb w17, [sp, #75]430; NONEON-NOSVE-NEXT:    ldrb w26, [sp, #59]431; NONEON-NOSVE-NEXT:    csel w7, w25, w7, eq432; NONEON-NOSVE-NEXT:    cmp w28, w4433; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #76]434; NONEON-NOSVE-NEXT:    ldrb w25, [sp, #60]435; NONEON-NOSVE-NEXT:    csel w4, w28, w4, eq436; NONEON-NOSVE-NEXT:    cmp w27, w3437; NONEON-NOSVE-NEXT:    csel w3, w27, w3, eq438; NONEON-NOSVE-NEXT:    cmp w26, w17439; NONEON-NOSVE-NEXT:    ldrb w28, [sp, #77]440; NONEON-NOSVE-NEXT:    ldrb w27, [sp, #61]441; NONEON-NOSVE-NEXT:    csel w17, w26, w17, eq442; NONEON-NOSVE-NEXT:    cmp w25, w15443; NONEON-NOSVE-NEXT:    ldrb w26, [sp, #78]444; NONEON-NOSVE-NEXT:    csel w15, w25, w15, eq445; NONEON-NOSVE-NEXT:    ldrb w25, [sp, #62]446; NONEON-NOSVE-NEXT:    cmp w27, w28447; NONEON-NOSVE-NEXT:    ldrb w29, [sp, #79]448; NONEON-NOSVE-NEXT:    ldrb w30, [sp, #63]449; NONEON-NOSVE-NEXT:    strb w9, [sp, #99]450; NONEON-NOSVE-NEXT:    csel w27, w27, w28, eq451; NONEON-NOSVE-NEXT:    cmp w25, w26452; NONEON-NOSVE-NEXT:    strb w8, [sp, #98]453; NONEON-NOSVE-NEXT:    csel w25, w25, w26, eq454; NONEON-NOSVE-NEXT:    cmp w30, w29455; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp] // 8-byte Folded Reload456; NONEON-NOSVE-NEXT:    csel w26, w30, w29, eq457; NONEON-NOSVE-NEXT:    ldrb w28, [sp, #32]458; NONEON-NOSVE-NEXT:    ldrb w29, [sp, #16]459; NONEON-NOSVE-NEXT:    strb w26, [sp, #111]460; NONEON-NOSVE-NEXT:    strb w9, [sp, #84]461; NONEON-NOSVE-NEXT:    cmp w29, w28462; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]463; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp, #8] // 8-byte Folded Reload464; NONEON-NOSVE-NEXT:    strb w25, [sp, #110]465; NONEON-NOSVE-NEXT:    ldp x26, x25, [sp, #144] // 16-byte Folded Reload466; NONEON-NOSVE-NEXT:    strb w27, [sp, #109]467; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]468; NONEON-NOSVE-NEXT:    csel w8, w29, w28, eq469; NONEON-NOSVE-NEXT:    strb w15, [sp, #108]470; NONEON-NOSVE-NEXT:    ldp x28, x27, [sp, #128] // 16-byte Folded Reload471; NONEON-NOSVE-NEXT:    strb w17, [sp, #107]472; NONEON-NOSVE-NEXT:    ldp x29, x30, [sp, #112] // 16-byte Folded Reload473; NONEON-NOSVE-NEXT:    strb w3, [sp, #106]474; NONEON-NOSVE-NEXT:    strb w4, [sp, #105]475; NONEON-NOSVE-NEXT:    strb w7, [sp, #104]476; NONEON-NOSVE-NEXT:    strb w20, [sp, #103]477; NONEON-NOSVE-NEXT:    strb w23, [sp, #102]478; NONEON-NOSVE-NEXT:    strb w24, [sp, #101]479; NONEON-NOSVE-NEXT:    ldp x24, x23, [sp, #160] // 16-byte Folded Reload480; NONEON-NOSVE-NEXT:    strb w10, [sp, #100]481; NONEON-NOSVE-NEXT:    strb w11, [sp, #97]482; NONEON-NOSVE-NEXT:    strb w22, [sp, #96]483; NONEON-NOSVE-NEXT:    strb w21, [sp, #95]484; NONEON-NOSVE-NEXT:    ldp x22, x21, [sp, #176] // 16-byte Folded Reload485; NONEON-NOSVE-NEXT:    strb w19, [sp, #94]486; NONEON-NOSVE-NEXT:    ldp x20, x19, [sp, #192] // 16-byte Folded Reload487; NONEON-NOSVE-NEXT:    strb w6, [sp, #93]488; NONEON-NOSVE-NEXT:    strb w5, [sp, #92]489; NONEON-NOSVE-NEXT:    strb w2, [sp, #91]490; NONEON-NOSVE-NEXT:    strb w1, [sp, #90]491; NONEON-NOSVE-NEXT:    strb w18, [sp, #89]492; NONEON-NOSVE-NEXT:    strb w16, [sp, #88]493; NONEON-NOSVE-NEXT:    strb w14, [sp, #87]494; NONEON-NOSVE-NEXT:    strb w13, [sp, #86]495; NONEON-NOSVE-NEXT:    strb w12, [sp, #85]496; NONEON-NOSVE-NEXT:    strb w9, [sp, #82]497; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]498; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #80]499; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]500; NONEON-NOSVE-NEXT:    add sp, sp, #208501; NONEON-NOSVE-NEXT:    ret502  %op1 = load <32 x i8>, ptr %a503  %op2 = load <32 x i8>, ptr %b504  %mask = icmp eq <32 x i8> %op1, %op2505  %sel = select <32 x i1> %mask, <32 x i8> %op1, <32 x i8> %op2506  store <32 x i8> %sel, ptr %a507  ret void508}509 510define <2 x i16> @select_v2i16(<2 x i16> %op1, <2 x i16> %op2, <2 x i1> %mask) {511; CHECK-LABEL: select_v2i16:512; CHECK:       // %bb.0:513; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z2514; CHECK-NEXT:    ptrue p0.s515; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0516; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1517; CHECK-NEXT:    lsl z2.s, z2.s, #31518; CHECK-NEXT:    asr z2.s, z2.s, #31519; CHECK-NEXT:    and z2.s, z2.s, #0x1520; CHECK-NEXT:    cmpne p0.s, p0/z, z2.s, #0521; CHECK-NEXT:    sel z0.s, p0, z0.s, z1.s522; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0523; CHECK-NEXT:    ret524;525; NONEON-NOSVE-LABEL: select_v2i16:526; NONEON-NOSVE:       // %bb.0:527; NONEON-NOSVE-NEXT:    sub sp, sp, #32528; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32529; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #8]530; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp, #16]531; NONEON-NOSVE-NEXT:    str d0, [sp]532; NONEON-NOSVE-NEXT:    ldr w10, [sp, #12]533; NONEON-NOSVE-NEXT:    ldr w11, [sp, #4]534; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1535; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1536; NONEON-NOSVE-NEXT:    cmp w8, #0537; NONEON-NOSVE-NEXT:    csel w8, w11, w10, ne538; NONEON-NOSVE-NEXT:    ldr w10, [sp]539; NONEON-NOSVE-NEXT:    cmp w9, #0540; NONEON-NOSVE-NEXT:    str w8, [sp, #28]541; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]542; NONEON-NOSVE-NEXT:    csel w8, w10, w8, ne543; NONEON-NOSVE-NEXT:    str w8, [sp, #24]544; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]545; NONEON-NOSVE-NEXT:    add sp, sp, #32546; NONEON-NOSVE-NEXT:    ret547  %sel = select <2 x i1> %mask, <2 x i16> %op1, <2 x i16> %op2548  ret <2 x i16> %sel549}550 551define <4 x i16> @select_v4i16(<4 x i16> %op1, <4 x i16> %op2, <4 x i1> %mask) {552; CHECK-LABEL: select_v4i16:553; CHECK:       // %bb.0:554; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z2555; CHECK-NEXT:    ptrue p0.h556; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0557; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1558; CHECK-NEXT:    lsl z2.h, z2.h, #15559; CHECK-NEXT:    asr z2.h, z2.h, #15560; CHECK-NEXT:    and z2.h, z2.h, #0x1561; CHECK-NEXT:    cmpne p0.h, p0/z, z2.h, #0562; CHECK-NEXT:    sel z0.h, p0, z0.h, z1.h563; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0564; CHECK-NEXT:    ret565;566; NONEON-NOSVE-LABEL: select_v4i16:567; NONEON-NOSVE:       // %bb.0:568; NONEON-NOSVE-NEXT:    sub sp, sp, #32569; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32570; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #8]571; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #22]572; NONEON-NOSVE-NEXT:    str d0, [sp]573; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #20]574; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #14]575; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #6]576; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #18]577; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1578; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1579; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]580; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1581; NONEON-NOSVE-NEXT:    tst w9, #0xffff582; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1583; NONEON-NOSVE-NEXT:    csel w9, w13, w12, ne584; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #4]585; NONEON-NOSVE-NEXT:    tst w11, #0xffff586; NONEON-NOSVE-NEXT:    strh w9, [sp, #30]587; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]588; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #2]589; NONEON-NOSVE-NEXT:    csel w9, w12, w9, ne590; NONEON-NOSVE-NEXT:    tst w10, #0xffff591; NONEON-NOSVE-NEXT:    ldrh w10, [sp]592; NONEON-NOSVE-NEXT:    strh w9, [sp, #28]593; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]594; NONEON-NOSVE-NEXT:    csel w9, w11, w9, ne595; NONEON-NOSVE-NEXT:    tst w8, #0xffff596; NONEON-NOSVE-NEXT:    strh w9, [sp, #26]597; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]598; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne599; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]600; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]601; NONEON-NOSVE-NEXT:    add sp, sp, #32602; NONEON-NOSVE-NEXT:    ret603  %sel = select <4 x i1> %mask, <4 x i16> %op1, <4 x i16> %op2604  ret <4 x i16> %sel605}606 607define <8 x i16> @select_v8i16(<8 x i16> %op1, <8 x i16> %op2, <8 x i1> %mask) {608; CHECK-LABEL: select_v8i16:609; CHECK:       // %bb.0:610; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z2611; CHECK-NEXT:    ptrue p0.h612; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0613; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1614; CHECK-NEXT:    uunpklo z2.h, z2.b615; CHECK-NEXT:    lsl z2.h, z2.h, #15616; CHECK-NEXT:    asr z2.h, z2.h, #15617; CHECK-NEXT:    and z2.h, z2.h, #0x1618; CHECK-NEXT:    cmpne p0.h, p0/z, z2.h, #0619; CHECK-NEXT:    sel z0.h, p0, z0.h, z1.h620; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0621; CHECK-NEXT:    ret622;623; NONEON-NOSVE-LABEL: select_v8i16:624; NONEON-NOSVE:       // %bb.0:625; NONEON-NOSVE-NEXT:    sub sp, sp, #64626; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 64627; NONEON-NOSVE-NEXT:    str d2, [sp, #40]628; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #47]629; NONEON-NOSVE-NEXT:    stp q0, q1, [sp]630; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #46]631; NONEON-NOSVE-NEXT:    ldrh w16, [sp, #30]632; NONEON-NOSVE-NEXT:    ldrh w17, [sp, #14]633; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #45]634; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1635; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1636; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #44]637; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1638; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #43]639; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #42]640; NONEON-NOSVE-NEXT:    tst w13, #0xffff641; NONEON-NOSVE-NEXT:    sbfx w12, w12, #0, #1642; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #41]643; NONEON-NOSVE-NEXT:    csel w13, w17, w16, ne644; NONEON-NOSVE-NEXT:    ldrh w16, [sp, #12]645; NONEON-NOSVE-NEXT:    tst w15, #0xffff646; NONEON-NOSVE-NEXT:    strh w13, [sp, #62]647; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #28]648; NONEON-NOSVE-NEXT:    ldrh w15, [sp, #10]649; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1650; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1651; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1652; NONEON-NOSVE-NEXT:    csel w13, w16, w13, ne653; NONEON-NOSVE-NEXT:    tst w14, #0xffff654; NONEON-NOSVE-NEXT:    ldrh w14, [sp, #8]655; NONEON-NOSVE-NEXT:    strh w13, [sp, #60]656; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #26]657; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #40]658; NONEON-NOSVE-NEXT:    csel w13, w15, w13, ne659; NONEON-NOSVE-NEXT:    tst w12, #0xffff660; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1661; NONEON-NOSVE-NEXT:    strh w13, [sp, #58]662; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #24]663; NONEON-NOSVE-NEXT:    csel w12, w14, w13, ne664; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #6]665; NONEON-NOSVE-NEXT:    tst w11, #0xffff666; NONEON-NOSVE-NEXT:    strh w12, [sp, #56]667; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #22]668; NONEON-NOSVE-NEXT:    csel w11, w13, w12, ne669; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #4]670; NONEON-NOSVE-NEXT:    tst w10, #0xffff671; NONEON-NOSVE-NEXT:    strh w11, [sp, #54]672; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #20]673; NONEON-NOSVE-NEXT:    csel w10, w12, w11, ne674; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #2]675; NONEON-NOSVE-NEXT:    tst w9, #0xffff676; NONEON-NOSVE-NEXT:    strh w10, [sp, #52]677; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #18]678; NONEON-NOSVE-NEXT:    csel w9, w11, w10, ne679; NONEON-NOSVE-NEXT:    ldrh w10, [sp]680; NONEON-NOSVE-NEXT:    tst w8, #0xffff681; NONEON-NOSVE-NEXT:    strh w9, [sp, #50]682; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #16]683; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne684; NONEON-NOSVE-NEXT:    strh w8, [sp, #48]685; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]686; NONEON-NOSVE-NEXT:    add sp, sp, #64687; NONEON-NOSVE-NEXT:    ret688  %sel = select <8 x i1> %mask, <8 x i16> %op1, <8 x i16> %op2689  ret <8 x i16> %sel690}691 692define void @select_v16i16(ptr %a, ptr %b) {693; CHECK-LABEL: select_v16i16:694; CHECK:       // %bb.0:695; CHECK-NEXT:    ldp q3, q0, [x1]696; CHECK-NEXT:    ptrue p0.h, vl8697; CHECK-NEXT:    ldp q2, q1, [x0]698; CHECK-NEXT:    mov x8, #8 // =0x8699; CHECK-NEXT:    cmpne p1.h, p0/z, z1.h, z0.h700; CHECK-NEXT:    cmpne p0.h, p0/z, z2.h, z3.h701; CHECK-NEXT:    st1h { z0.h }, p1, [x0, x8, lsl #1]702; CHECK-NEXT:    st1h { z3.h }, p0, [x0]703; CHECK-NEXT:    ret704;705; NONEON-NOSVE-LABEL: select_v16i16:706; NONEON-NOSVE:       // %bb.0:707; NONEON-NOSVE-NEXT:    sub sp, sp, #112708; NONEON-NOSVE-NEXT:    str x19, [sp, #96] // 8-byte Spill709; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 112710; NONEON-NOSVE-NEXT:    .cfi_offset w19, -16711; NONEON-NOSVE-NEXT:    ldp q0, q3, [x1]712; NONEON-NOSVE-NEXT:    ldp q1, q2, [x0]713; NONEON-NOSVE-NEXT:    stp q1, q0, [sp]714; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]715; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]716; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #20]717; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #4]718; NONEON-NOSVE-NEXT:    ldrh w14, [sp, #22]719; NONEON-NOSVE-NEXT:    ldrh w15, [sp, #6]720; NONEON-NOSVE-NEXT:    cmp w9, w8721; NONEON-NOSVE-NEXT:    ldrh w16, [sp, #24]722; NONEON-NOSVE-NEXT:    ldrh w17, [sp, #8]723; NONEON-NOSVE-NEXT:    csel w8, w9, w8, eq724; NONEON-NOSVE-NEXT:    cmp w13, w12725; NONEON-NOSVE-NEXT:    ldrh w1, [sp, #12]726; NONEON-NOSVE-NEXT:    csel w9, w13, w12, eq727; NONEON-NOSVE-NEXT:    cmp w15, w14728; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #26]729; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #10]730; NONEON-NOSVE-NEXT:    csel w14, w15, w14, eq731; NONEON-NOSVE-NEXT:    cmp w17, w16732; NONEON-NOSVE-NEXT:    csel w16, w17, w16, eq733; NONEON-NOSVE-NEXT:    ldrh w17, [sp, #28]734; NONEON-NOSVE-NEXT:    stp q2, q3, [sp, #32]735; NONEON-NOSVE-NEXT:    cmp w13, w12736; NONEON-NOSVE-NEXT:    ldrh w3, [sp, #30]737; NONEON-NOSVE-NEXT:    ldrh w4, [sp, #14]738; NONEON-NOSVE-NEXT:    csel w12, w13, w12, eq739; NONEON-NOSVE-NEXT:    cmp w1, w17740; NONEON-NOSVE-NEXT:    ldrh w5, [sp, #32]741; NONEON-NOSVE-NEXT:    csel w17, w1, w17, eq742; NONEON-NOSVE-NEXT:    ldrh w1, [sp, #48]743; NONEON-NOSVE-NEXT:    cmp w4, w3744; NONEON-NOSVE-NEXT:    ldrh w6, [sp, #50]745; NONEON-NOSVE-NEXT:    ldrh w7, [sp, #34]746; NONEON-NOSVE-NEXT:    ldrh w2, [sp, #52]747; NONEON-NOSVE-NEXT:    csel w3, w4, w3, eq748; NONEON-NOSVE-NEXT:    ldrh w4, [sp, #36]749; NONEON-NOSVE-NEXT:    cmp w5, w1750; NONEON-NOSVE-NEXT:    ldrh w13, [sp, #54]751; NONEON-NOSVE-NEXT:    ldrh w19, [sp, #38]752; NONEON-NOSVE-NEXT:    csel w1, w5, w1, eq753; NONEON-NOSVE-NEXT:    cmp w7, w6754; NONEON-NOSVE-NEXT:    ldrh w18, [sp, #56]755; NONEON-NOSVE-NEXT:    ldrh w5, [sp, #40]756; NONEON-NOSVE-NEXT:    csel w6, w7, w6, eq757; NONEON-NOSVE-NEXT:    cmp w4, w2758; NONEON-NOSVE-NEXT:    ldrh w15, [sp, #58]759; NONEON-NOSVE-NEXT:    ldrh w7, [sp, #42]760; NONEON-NOSVE-NEXT:    csel w2, w4, w2, eq761; NONEON-NOSVE-NEXT:    cmp w19, w13762; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #60]763; NONEON-NOSVE-NEXT:    ldrh w4, [sp, #44]764; NONEON-NOSVE-NEXT:    csel w13, w19, w13, eq765; NONEON-NOSVE-NEXT:    cmp w5, w18766; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #62]767; NONEON-NOSVE-NEXT:    ldrh w19, [sp, #46]768; NONEON-NOSVE-NEXT:    csel w18, w5, w18, eq769; NONEON-NOSVE-NEXT:    cmp w7, w15770; NONEON-NOSVE-NEXT:    ldrh w5, [sp]771; NONEON-NOSVE-NEXT:    csel w15, w7, w15, eq772; NONEON-NOSVE-NEXT:    cmp w4, w11773; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]774; NONEON-NOSVE-NEXT:    csel w11, w4, w11, eq775; NONEON-NOSVE-NEXT:    ldrh w4, [sp, #16]776; NONEON-NOSVE-NEXT:    cmp w19, w10777; NONEON-NOSVE-NEXT:    csel w10, w19, w10, eq778; NONEON-NOSVE-NEXT:    strh w11, [sp, #92]779; NONEON-NOSVE-NEXT:    ldr x19, [sp, #96] // 8-byte Reload780; NONEON-NOSVE-NEXT:    cmp w5, w4781; NONEON-NOSVE-NEXT:    strh w10, [sp, #94]782; NONEON-NOSVE-NEXT:    csel w8, w5, w4, eq783; NONEON-NOSVE-NEXT:    strh w15, [sp, #90]784; NONEON-NOSVE-NEXT:    strh w18, [sp, #88]785; NONEON-NOSVE-NEXT:    strh w13, [sp, #86]786; NONEON-NOSVE-NEXT:    strh w2, [sp, #84]787; NONEON-NOSVE-NEXT:    strh w6, [sp, #82]788; NONEON-NOSVE-NEXT:    strh w1, [sp, #80]789; NONEON-NOSVE-NEXT:    strh w3, [sp, #78]790; NONEON-NOSVE-NEXT:    strh w17, [sp, #76]791; NONEON-NOSVE-NEXT:    strh w12, [sp, #74]792; NONEON-NOSVE-NEXT:    strh w16, [sp, #72]793; NONEON-NOSVE-NEXT:    strh w14, [sp, #70]794; NONEON-NOSVE-NEXT:    strh w9, [sp, #68]795; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]796; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]797; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]798; NONEON-NOSVE-NEXT:    add sp, sp, #112799; NONEON-NOSVE-NEXT:    ret800  %op1 = load <16 x i16>, ptr %a801  %op2 = load <16 x i16>, ptr %b802  %mask = icmp eq <16 x i16> %op1, %op2803  %sel = select <16 x i1> %mask, <16 x i16> %op1, <16 x i16> %op2804  store <16 x i16> %sel, ptr %a805  ret void806}807 808define <2 x i32> @select_v2i32(<2 x i32> %op1, <2 x i32> %op2, <2 x i1> %mask) {809; CHECK-LABEL: select_v2i32:810; CHECK:       // %bb.0:811; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z2812; CHECK-NEXT:    ptrue p0.s813; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0814; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1815; CHECK-NEXT:    lsl z2.s, z2.s, #31816; CHECK-NEXT:    asr z2.s, z2.s, #31817; CHECK-NEXT:    and z2.s, z2.s, #0x1818; CHECK-NEXT:    cmpne p0.s, p0/z, z2.s, #0819; CHECK-NEXT:    sel z0.s, p0, z0.s, z1.s820; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0821; CHECK-NEXT:    ret822;823; NONEON-NOSVE-LABEL: select_v2i32:824; NONEON-NOSVE:       // %bb.0:825; NONEON-NOSVE-NEXT:    sub sp, sp, #32826; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32827; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #8]828; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp, #16]829; NONEON-NOSVE-NEXT:    str d0, [sp]830; NONEON-NOSVE-NEXT:    ldr w10, [sp, #12]831; NONEON-NOSVE-NEXT:    ldr w11, [sp, #4]832; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1833; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1834; NONEON-NOSVE-NEXT:    cmp w8, #0835; NONEON-NOSVE-NEXT:    csel w8, w11, w10, ne836; NONEON-NOSVE-NEXT:    ldr w10, [sp]837; NONEON-NOSVE-NEXT:    cmp w9, #0838; NONEON-NOSVE-NEXT:    str w8, [sp, #28]839; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]840; NONEON-NOSVE-NEXT:    csel w8, w10, w8, ne841; NONEON-NOSVE-NEXT:    str w8, [sp, #24]842; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]843; NONEON-NOSVE-NEXT:    add sp, sp, #32844; NONEON-NOSVE-NEXT:    ret845  %sel = select <2 x i1> %mask, <2 x i32> %op1, <2 x i32> %op2846  ret <2 x i32> %sel847}848 849define <4 x i32> @select_v4i32(<4 x i32> %op1, <4 x i32> %op2, <4 x i1> %mask) {850; CHECK-LABEL: select_v4i32:851; CHECK:       // %bb.0:852; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z2853; CHECK-NEXT:    ptrue p0.s854; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0855; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1856; CHECK-NEXT:    uunpklo z2.s, z2.h857; CHECK-NEXT:    lsl z2.s, z2.s, #31858; CHECK-NEXT:    asr z2.s, z2.s, #31859; CHECK-NEXT:    and z2.s, z2.s, #0x1860; CHECK-NEXT:    cmpne p0.s, p0/z, z2.s, #0861; CHECK-NEXT:    sel z0.s, p0, z0.s, z1.s862; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0863; CHECK-NEXT:    ret864;865; NONEON-NOSVE-LABEL: select_v4i32:866; NONEON-NOSVE:       // %bb.0:867; NONEON-NOSVE-NEXT:    sub sp, sp, #64868; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 64869; NONEON-NOSVE-NEXT:    str d2, [sp, #40]870; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #46]871; NONEON-NOSVE-NEXT:    stp q0, q1, [sp]872; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #44]873; NONEON-NOSVE-NEXT:    ldr w12, [sp, #28]874; NONEON-NOSVE-NEXT:    ldr w13, [sp, #12]875; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #42]876; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1877; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1878; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #40]879; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1880; NONEON-NOSVE-NEXT:    cmp w9, #0881; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1882; NONEON-NOSVE-NEXT:    csel w9, w13, w12, ne883; NONEON-NOSVE-NEXT:    ldr w12, [sp, #8]884; NONEON-NOSVE-NEXT:    cmp w11, #0885; NONEON-NOSVE-NEXT:    str w9, [sp, #60]886; NONEON-NOSVE-NEXT:    ldr w9, [sp, #24]887; NONEON-NOSVE-NEXT:    ldr w11, [sp, #4]888; NONEON-NOSVE-NEXT:    csel w9, w12, w9, ne889; NONEON-NOSVE-NEXT:    cmp w10, #0890; NONEON-NOSVE-NEXT:    ldr w10, [sp]891; NONEON-NOSVE-NEXT:    str w9, [sp, #56]892; NONEON-NOSVE-NEXT:    ldr w9, [sp, #20]893; NONEON-NOSVE-NEXT:    csel w9, w11, w9, ne894; NONEON-NOSVE-NEXT:    cmp w8, #0895; NONEON-NOSVE-NEXT:    str w9, [sp, #52]896; NONEON-NOSVE-NEXT:    ldr w9, [sp, #16]897; NONEON-NOSVE-NEXT:    csel w8, w10, w9, ne898; NONEON-NOSVE-NEXT:    str w8, [sp, #48]899; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]900; NONEON-NOSVE-NEXT:    add sp, sp, #64901; NONEON-NOSVE-NEXT:    ret902  %sel = select <4 x i1> %mask, <4 x i32> %op1, <4 x i32> %op2903  ret <4 x i32> %sel904}905 906define void @select_v8i32(ptr %a, ptr %b) {907; CHECK-LABEL: select_v8i32:908; CHECK:       // %bb.0:909; CHECK-NEXT:    ldp q3, q0, [x1]910; CHECK-NEXT:    ptrue p0.s, vl4911; CHECK-NEXT:    ldp q2, q1, [x0]912; CHECK-NEXT:    mov x8, #4 // =0x4913; CHECK-NEXT:    cmpne p1.s, p0/z, z1.s, z0.s914; CHECK-NEXT:    cmpne p0.s, p0/z, z2.s, z3.s915; CHECK-NEXT:    st1w { z0.s }, p1, [x0, x8, lsl #2]916; CHECK-NEXT:    st1w { z3.s }, p0, [x0]917; CHECK-NEXT:    ret918;919; NONEON-NOSVE-LABEL: select_v8i32:920; NONEON-NOSVE:       // %bb.0:921; NONEON-NOSVE-NEXT:    ldp q0, q3, [x1]922; NONEON-NOSVE-NEXT:    ldp q1, q2, [x0]923; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #-96]!924; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96925; NONEON-NOSVE-NEXT:    ldp w8, w9, [sp, #16]926; NONEON-NOSVE-NEXT:    ldp w10, w13, [sp, #4]927; NONEON-NOSVE-NEXT:    ldp w12, w11, [sp, #24]928; NONEON-NOSVE-NEXT:    stp q2, q3, [sp, #32]929; NONEON-NOSVE-NEXT:    ldr w14, [sp, #12]930; NONEON-NOSVE-NEXT:    cmp w10, w9931; NONEON-NOSVE-NEXT:    csel w9, w10, w9, eq932; NONEON-NOSVE-NEXT:    cmp w13, w12933; NONEON-NOSVE-NEXT:    ldp w10, w16, [sp, #48]934; NONEON-NOSVE-NEXT:    csel w12, w13, w12, eq935; NONEON-NOSVE-NEXT:    cmp w14, w11936; NONEON-NOSVE-NEXT:    ldp w15, w13, [sp, #32]937; NONEON-NOSVE-NEXT:    csel w11, w14, w11, eq938; NONEON-NOSVE-NEXT:    ldp w17, w14, [sp, #56]939; NONEON-NOSVE-NEXT:    ldp w18, w1, [sp, #40]940; NONEON-NOSVE-NEXT:    cmp w15, w10941; NONEON-NOSVE-NEXT:    stp w12, w11, [sp, #72]942; NONEON-NOSVE-NEXT:    csel w10, w15, w10, eq943; NONEON-NOSVE-NEXT:    cmp w13, w16944; NONEON-NOSVE-NEXT:    ldr w15, [sp]945; NONEON-NOSVE-NEXT:    csel w13, w13, w16, eq946; NONEON-NOSVE-NEXT:    cmp w18, w17947; NONEON-NOSVE-NEXT:    csel w16, w18, w17, eq948; NONEON-NOSVE-NEXT:    cmp w1, w14949; NONEON-NOSVE-NEXT:    stp w10, w13, [sp, #80]950; NONEON-NOSVE-NEXT:    csel w10, w1, w14, eq951; NONEON-NOSVE-NEXT:    cmp w15, w8952; NONEON-NOSVE-NEXT:    csel w8, w15, w8, eq953; NONEON-NOSVE-NEXT:    stp w16, w10, [sp, #88]954; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #64]955; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]956; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]957; NONEON-NOSVE-NEXT:    add sp, sp, #96958; NONEON-NOSVE-NEXT:    ret959  %op1 = load <8 x i32>, ptr %a960  %op2 = load <8 x i32>, ptr %b961  %mask = icmp eq <8 x i32> %op1, %op2962  %sel = select <8 x i1> %mask, <8 x i32> %op1, <8 x i32> %op2963  store <8 x i32> %sel, ptr %a964  ret void965}966 967define <1 x i64> @select_v1i64(<1 x i64> %op1, <1 x i64> %op2, <1 x i1> %mask) {968; CHECK-LABEL: select_v1i64:969; CHECK:       // %bb.0:970; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0971; CHECK-NEXT:    and x8, x0, #0x1972; CHECK-NEXT:    ptrue p0.d973; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0974; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1975; CHECK-NEXT:    mov z2.d, x8976; CHECK-NEXT:    cmpne p0.d, p0/z, z2.d, #0977; CHECK-NEXT:    sel z0.d, p0, z0.d, z1.d978; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0979; CHECK-NEXT:    ret980;981; NONEON-NOSVE-LABEL: select_v1i64:982; NONEON-NOSVE:       // %bb.0:983; NONEON-NOSVE-NEXT:    sub sp, sp, #16984; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16985; NONEON-NOSVE-NEXT:    fmov x8, d1986; NONEON-NOSVE-NEXT:    fmov x9, d0987; NONEON-NOSVE-NEXT:    tst w0, #0x1988; NONEON-NOSVE-NEXT:    csel x8, x9, x8, ne989; NONEON-NOSVE-NEXT:    str x8, [sp, #8]990; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]991; NONEON-NOSVE-NEXT:    add sp, sp, #16992; NONEON-NOSVE-NEXT:    ret993  %sel = select <1 x i1> %mask, <1 x i64> %op1, <1 x i64> %op2994  ret <1 x i64> %sel995}996 997define <2 x i64> @select_v2i64(<2 x i64> %op1, <2 x i64> %op2, <2 x i1> %mask) {998; CHECK-LABEL: select_v2i64:999; CHECK:       // %bb.0:1000; CHECK-NEXT:    // kill: def $d2 killed $d2 def $z21001; CHECK-NEXT:    ptrue p0.d1002; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z01003; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z11004; CHECK-NEXT:    uunpklo z2.d, z2.s1005; CHECK-NEXT:    lsl z2.d, z2.d, #631006; CHECK-NEXT:    asr z2.d, z2.d, #631007; CHECK-NEXT:    and z2.d, z2.d, #0x11008; CHECK-NEXT:    cmpne p0.d, p0/z, z2.d, #01009; CHECK-NEXT:    sel z0.d, p0, z0.d, z1.d1010; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z01011; CHECK-NEXT:    ret1012;1013; NONEON-NOSVE-LABEL: select_v2i64:1014; NONEON-NOSVE:       // %bb.0:1015; NONEON-NOSVE-NEXT:    sub sp, sp, #641016; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 641017; NONEON-NOSVE-NEXT:    str d2, [sp, #40]1018; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp, #40]1019; NONEON-NOSVE-NEXT:    stp q0, q1, [sp]1020; NONEON-NOSVE-NEXT:    ldr x10, [sp, #24]1021; NONEON-NOSVE-NEXT:    ldr x11, [sp, #8]1022; NONEON-NOSVE-NEXT:    sbfx x8, x8, #0, #11023; NONEON-NOSVE-NEXT:    sbfx x9, x9, #0, #11024; NONEON-NOSVE-NEXT:    cmp x8, #01025; NONEON-NOSVE-NEXT:    csel x8, x11, x10, ne1026; NONEON-NOSVE-NEXT:    ldr x10, [sp]1027; NONEON-NOSVE-NEXT:    cmp x9, #01028; NONEON-NOSVE-NEXT:    str x8, [sp, #56]1029; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]1030; NONEON-NOSVE-NEXT:    csel x8, x10, x8, ne1031; NONEON-NOSVE-NEXT:    str x8, [sp, #48]1032; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]1033; NONEON-NOSVE-NEXT:    add sp, sp, #641034; NONEON-NOSVE-NEXT:    ret1035  %sel = select <2 x i1> %mask, <2 x i64> %op1, <2 x i64> %op21036  ret <2 x i64> %sel1037}1038 1039define void @select_v4i64(ptr %a, ptr %b) {1040; CHECK-LABEL: select_v4i64:1041; CHECK:       // %bb.0:1042; CHECK-NEXT:    ldp q3, q0, [x1]1043; CHECK-NEXT:    ptrue p0.d, vl21044; CHECK-NEXT:    ldp q2, q1, [x0]1045; CHECK-NEXT:    mov x8, #2 // =0x21046; CHECK-NEXT:    cmpne p1.d, p0/z, z1.d, z0.d1047; CHECK-NEXT:    cmpne p0.d, p0/z, z2.d, z3.d1048; CHECK-NEXT:    st1d { z0.d }, p1, [x0, x8, lsl #3]1049; CHECK-NEXT:    st1d { z3.d }, p0, [x0]1050; CHECK-NEXT:    ret1051;1052; NONEON-NOSVE-LABEL: select_v4i64:1053; NONEON-NOSVE:       // %bb.0:1054; NONEON-NOSVE-NEXT:    ldp q0, q3, [x1]1055; NONEON-NOSVE-NEXT:    ldp q1, q2, [x0]1056; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #-96]!1057; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 961058; NONEON-NOSVE-NEXT:    stp q2, q3, [sp, #32]1059; NONEON-NOSVE-NEXT:    ldr x9, [sp, #8]1060; NONEON-NOSVE-NEXT:    ldp x8, x10, [sp, #24]1061; NONEON-NOSVE-NEXT:    ldr x13, [sp, #40]1062; NONEON-NOSVE-NEXT:    ldp x11, x12, [sp, #48]1063; NONEON-NOSVE-NEXT:    cmp x9, x81064; NONEON-NOSVE-NEXT:    csel x8, x9, x8, eq1065; NONEON-NOSVE-NEXT:    cmp x10, x111066; NONEON-NOSVE-NEXT:    csel x9, x10, x11, eq1067; NONEON-NOSVE-NEXT:    ldr x10, [sp, #16]1068; NONEON-NOSVE-NEXT:    ldr x11, [sp]1069; NONEON-NOSVE-NEXT:    cmp x13, x121070; NONEON-NOSVE-NEXT:    csel x12, x13, x12, eq1071; NONEON-NOSVE-NEXT:    cmp x11, x101072; NONEON-NOSVE-NEXT:    stp x9, x12, [sp, #80]1073; NONEON-NOSVE-NEXT:    csel x9, x11, x10, eq1074; NONEON-NOSVE-NEXT:    stp x9, x8, [sp, #64]1075; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]1076; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1077; NONEON-NOSVE-NEXT:    add sp, sp, #961078; NONEON-NOSVE-NEXT:    ret1079  %op1 = load <4 x i64>, ptr %a1080  %op2 = load <4 x i64>, ptr %b1081  %mask = icmp eq <4 x i64> %op1, %op21082  %sel = select <4 x i1> %mask, <4 x i64> %op1, <4 x i64> %op21083  store <4 x i64> %sel, ptr %a1084  ret void1085}1086