brintos

brintos / llvm-project-archived public Read only

0
0
Text · 74.5 KiB · 16700d4 Raw
1828 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx       | FileCheck %s --check-prefixes=CHECK,AVX,AVX12,AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2      | FileCheck %s --check-prefixes=CHECK,AVX,AVX12,AVX24; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f   | FileCheck %s --check-prefixes=CHECK,AVX,AVX512,AVX512F5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl  | FileCheck %s --check-prefixes=CHECK,AVX,AVX512,AVX512VL6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=xop       | FileCheck %s --check-prefixes=CHECK,XOP7 8; The condition vector for BLENDV* only cares about the sign bit of each element.9; So in these tests, if we generate BLENDV*, we should be able to remove the redundant cmp op.10 11; Test 128-bit vectors for all legal element types.12 13define <16 x i8> @signbit_sel_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %mask) {14; CHECK-LABEL: signbit_sel_v16i8:15; CHECK:       # %bb.0:16; CHECK-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm017; CHECK-NEXT:    retq18  %tr = icmp slt <16 x i8> %mask, zeroinitializer19  %z = select <16 x i1> %tr, <16 x i8> %x, <16 x i8> %y20  ret <16 x i8> %z21}22 23; Sorry 16-bit, you're not important enough to support?24 25define <8 x i16> @signbit_sel_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %mask) {26; AVX12-LABEL: signbit_sel_v8i16:27; AVX12:       # %bb.0:28; AVX12-NEXT:    vpxor %xmm3, %xmm3, %xmm329; AVX12-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm230; AVX12-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm031; AVX12-NEXT:    retq32;33; AVX512F-LABEL: signbit_sel_v8i16:34; AVX512F:       # %bb.0:35; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm336; AVX512F-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm237; AVX512F-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm038; AVX512F-NEXT:    retq39;40; AVX512VL-LABEL: signbit_sel_v8i16:41; AVX512VL:       # %bb.0:42; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm343; AVX512VL-NEXT:    vpcmpgtw %xmm2, %xmm3, %xmm244; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm1 ^ (xmm2 & (xmm0 ^ xmm1))45; AVX512VL-NEXT:    retq46;47; XOP-LABEL: signbit_sel_v8i16:48; XOP:       # %bb.0:49; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm350; XOP-NEXT:    vpcomltw %xmm3, %xmm2, %xmm251; XOP-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm052; XOP-NEXT:    retq53  %tr = icmp slt <8 x i16> %mask, zeroinitializer54  %z = select <8 x i1> %tr, <8 x i16> %x, <8 x i16> %y55  ret <8 x i16> %z56}57 58define <4 x i32> @signbit_sel_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %mask) {59; AVX12-LABEL: signbit_sel_v4i32:60; AVX12:       # %bb.0:61; AVX12-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm062; AVX12-NEXT:    retq63;64; AVX512F-LABEL: signbit_sel_v4i32:65; AVX512F:       # %bb.0:66; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm267; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm168; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm069; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm370; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm3, %k171; AVX512F-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}72; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm073; AVX512F-NEXT:    vzeroupper74; AVX512F-NEXT:    retq75;76; AVX512VL-LABEL: signbit_sel_v4i32:77; AVX512VL:       # %bb.0:78; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm379; AVX512VL-NEXT:    vpcmpgtd %xmm2, %xmm3, %k180; AVX512VL-NEXT:    vpblendmd %xmm0, %xmm1, %xmm0 {%k1}81; AVX512VL-NEXT:    retq82;83; XOP-LABEL: signbit_sel_v4i32:84; XOP:       # %bb.0:85; XOP-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm086; XOP-NEXT:    retq87  %tr = icmp slt <4 x i32> %mask, zeroinitializer88  %z = select <4 x i1> %tr, <4 x i32> %x, <4 x i32> %y89  ret <4 x i32> %z90}91 92define <2 x i64> @signbit_sel_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %mask) {93; AVX12-LABEL: signbit_sel_v2i64:94; AVX12:       # %bb.0:95; AVX12-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm096; AVX12-NEXT:    retq97;98; AVX512F-LABEL: signbit_sel_v2i64:99; AVX512F:       # %bb.0:100; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2101; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1102; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0103; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3104; AVX512F-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1105; AVX512F-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}106; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0107; AVX512F-NEXT:    vzeroupper108; AVX512F-NEXT:    retq109;110; AVX512VL-LABEL: signbit_sel_v2i64:111; AVX512VL:       # %bb.0:112; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3113; AVX512VL-NEXT:    vpcmpgtq %xmm2, %xmm3, %k1114; AVX512VL-NEXT:    vpblendmq %xmm0, %xmm1, %xmm0 {%k1}115; AVX512VL-NEXT:    retq116;117; XOP-LABEL: signbit_sel_v2i64:118; XOP:       # %bb.0:119; XOP-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0120; XOP-NEXT:    retq121  %tr = icmp slt <2 x i64> %mask, zeroinitializer122  %z = select <2 x i1> %tr, <2 x i64> %x, <2 x i64> %y123  ret <2 x i64> %z124}125 126define <4 x float> @signbit_sel_v4f32(<4 x float> %x, <4 x float> %y, <4 x i32> %mask) {127; AVX12-LABEL: signbit_sel_v4f32:128; AVX12:       # %bb.0:129; AVX12-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0130; AVX12-NEXT:    retq131;132; AVX512F-LABEL: signbit_sel_v4f32:133; AVX512F:       # %bb.0:134; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2135; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1136; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0137; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3138; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1139; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}140; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0141; AVX512F-NEXT:    vzeroupper142; AVX512F-NEXT:    retq143;144; AVX512VL-LABEL: signbit_sel_v4f32:145; AVX512VL:       # %bb.0:146; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3147; AVX512VL-NEXT:    vpcmpgtd %xmm2, %xmm3, %k1148; AVX512VL-NEXT:    vblendmps %xmm0, %xmm1, %xmm0 {%k1}149; AVX512VL-NEXT:    retq150;151; XOP-LABEL: signbit_sel_v4f32:152; XOP:       # %bb.0:153; XOP-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0154; XOP-NEXT:    retq155  %tr = icmp slt <4 x i32> %mask, zeroinitializer156  %z = select <4 x i1> %tr, <4 x float> %x, <4 x float> %y157  ret <4 x float> %z158}159 160define <2 x double> @signbit_sel_v2f64(<2 x double> %x, <2 x double> %y, <2 x i64> %mask) {161; AVX12-LABEL: signbit_sel_v2f64:162; AVX12:       # %bb.0:163; AVX12-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0164; AVX12-NEXT:    retq165;166; AVX512F-LABEL: signbit_sel_v2f64:167; AVX512F:       # %bb.0:168; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2169; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1170; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0171; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3172; AVX512F-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1173; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}174; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0175; AVX512F-NEXT:    vzeroupper176; AVX512F-NEXT:    retq177;178; AVX512VL-LABEL: signbit_sel_v2f64:179; AVX512VL:       # %bb.0:180; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3181; AVX512VL-NEXT:    vpcmpgtq %xmm2, %xmm3, %k1182; AVX512VL-NEXT:    vblendmpd %xmm0, %xmm1, %xmm0 {%k1}183; AVX512VL-NEXT:    retq184;185; XOP-LABEL: signbit_sel_v2f64:186; XOP:       # %bb.0:187; XOP-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0188; XOP-NEXT:    retq189  %tr = icmp slt <2 x i64> %mask, zeroinitializer190  %z = select <2 x i1> %tr, <2 x double> %x, <2 x double> %y191  ret <2 x double> %z192}193 194; Test 256-bit vectors to see differences between AVX1 and AVX2.195 196define <32 x i8> @signbit_sel_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %mask) {197; AVX1-LABEL: signbit_sel_v32i8:198; AVX1:       # %bb.0:199; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3200; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4201; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm4, %xmm3202; AVX1-NEXT:    vpcmpgtb %xmm2, %xmm4, %xmm2203; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2204; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm1205; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0206; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0207; AVX1-NEXT:    retq208;209; AVX2-LABEL: signbit_sel_v32i8:210; AVX2:       # %bb.0:211; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0212; AVX2-NEXT:    retq213;214; AVX512-LABEL: signbit_sel_v32i8:215; AVX512:       # %bb.0:216; AVX512-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0217; AVX512-NEXT:    retq218;219; XOP-LABEL: signbit_sel_v32i8:220; XOP:       # %bb.0:221; XOP-NEXT:    vextractf128 $1, %ymm2, %xmm3222; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm4223; XOP-NEXT:    vpcomltb %xmm4, %xmm3, %xmm3224; XOP-NEXT:    vpcomltb %xmm4, %xmm2, %xmm2225; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2226; XOP-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0227; XOP-NEXT:    retq228  %tr = icmp slt <32 x i8> %mask, zeroinitializer229  %z = select <32 x i1> %tr, <32 x i8> %x, <32 x i8> %y230  ret <32 x i8> %z231}232 233; Sorry 16-bit, you'll never be important enough to support?234 235define <16 x i16> @signbit_sel_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %mask) {236; AVX1-LABEL: signbit_sel_v16i16:237; AVX1:       # %bb.0:238; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3239; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4240; AVX1-NEXT:    vpcmpgtw %xmm3, %xmm4, %xmm3241; AVX1-NEXT:    vpcmpgtw %xmm2, %xmm4, %xmm2242; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2243; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm1244; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0245; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0246; AVX1-NEXT:    retq247;248; AVX2-LABEL: signbit_sel_v16i16:249; AVX2:       # %bb.0:250; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3251; AVX2-NEXT:    vpcmpgtw %ymm2, %ymm3, %ymm2252; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0253; AVX2-NEXT:    retq254;255; AVX512F-LABEL: signbit_sel_v16i16:256; AVX512F:       # %bb.0:257; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3258; AVX512F-NEXT:    vpcmpgtw %ymm2, %ymm3, %ymm2259; AVX512F-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0260; AVX512F-NEXT:    retq261;262; AVX512VL-LABEL: signbit_sel_v16i16:263; AVX512VL:       # %bb.0:264; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3265; AVX512VL-NEXT:    vpcmpgtw %ymm2, %ymm3, %ymm2266; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm1 ^ (ymm2 & (ymm0 ^ ymm1))267; AVX512VL-NEXT:    retq268;269; XOP-LABEL: signbit_sel_v16i16:270; XOP:       # %bb.0:271; XOP-NEXT:    vextractf128 $1, %ymm2, %xmm3272; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm4273; XOP-NEXT:    vpcomltw %xmm4, %xmm3, %xmm3274; XOP-NEXT:    vpcomltw %xmm4, %xmm2, %xmm2275; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2276; XOP-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm0277; XOP-NEXT:    retq278  %tr = icmp slt <16 x i16> %mask, zeroinitializer279  %z = select <16 x i1> %tr, <16 x i16> %x, <16 x i16> %y280  ret <16 x i16> %z281}282 283define <8 x i32> @signbit_sel_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %mask) {284; AVX12-LABEL: signbit_sel_v8i32:285; AVX12:       # %bb.0:286; AVX12-NEXT:    vblendvps %ymm2, %ymm0, %ymm1, %ymm0287; AVX12-NEXT:    retq288;289; AVX512F-LABEL: signbit_sel_v8i32:290; AVX512F:       # %bb.0:291; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2292; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1293; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0294; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3295; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1296; AVX512F-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}297; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0298; AVX512F-NEXT:    retq299;300; AVX512VL-LABEL: signbit_sel_v8i32:301; AVX512VL:       # %bb.0:302; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3303; AVX512VL-NEXT:    vpcmpgtd %ymm2, %ymm3, %k1304; AVX512VL-NEXT:    vpblendmd %ymm0, %ymm1, %ymm0 {%k1}305; AVX512VL-NEXT:    retq306;307; XOP-LABEL: signbit_sel_v8i32:308; XOP:       # %bb.0:309; XOP-NEXT:    vblendvps %ymm2, %ymm0, %ymm1, %ymm0310; XOP-NEXT:    retq311  %tr = icmp slt <8 x i32> %mask, zeroinitializer312  %z = select <8 x i1> %tr, <8 x i32> %x, <8 x i32> %y313  ret <8 x i32> %z314}315 316define <4 x i64> @signbit_sel_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %mask) {317; AVX12-LABEL: signbit_sel_v4i64:318; AVX12:       # %bb.0:319; AVX12-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0320; AVX12-NEXT:    retq321;322; AVX512F-LABEL: signbit_sel_v4i64:323; AVX512F:       # %bb.0:324; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2325; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1326; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0327; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3328; AVX512F-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1329; AVX512F-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}330; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0331; AVX512F-NEXT:    retq332;333; AVX512VL-LABEL: signbit_sel_v4i64:334; AVX512VL:       # %bb.0:335; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3336; AVX512VL-NEXT:    vpcmpgtq %ymm2, %ymm3, %k1337; AVX512VL-NEXT:    vpblendmq %ymm0, %ymm1, %ymm0 {%k1}338; AVX512VL-NEXT:    retq339;340; XOP-LABEL: signbit_sel_v4i64:341; XOP:       # %bb.0:342; XOP-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0343; XOP-NEXT:    retq344  %tr = icmp slt <4 x i64> %mask, zeroinitializer345  %z = select <4 x i1> %tr, <4 x i64> %x, <4 x i64> %y346  ret <4 x i64> %z347}348 349define <4 x double> @signbit_sel_v4f64(<4 x double> %x, <4 x double> %y, <4 x i64> %mask) {350; AVX12-LABEL: signbit_sel_v4f64:351; AVX12:       # %bb.0:352; AVX12-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0353; AVX12-NEXT:    retq354;355; AVX512F-LABEL: signbit_sel_v4f64:356; AVX512F:       # %bb.0:357; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2358; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1359; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0360; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3361; AVX512F-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1362; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}363; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0364; AVX512F-NEXT:    retq365;366; AVX512VL-LABEL: signbit_sel_v4f64:367; AVX512VL:       # %bb.0:368; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3369; AVX512VL-NEXT:    vpcmpgtq %ymm2, %ymm3, %k1370; AVX512VL-NEXT:    vblendmpd %ymm0, %ymm1, %ymm0 {%k1}371; AVX512VL-NEXT:    retq372;373; XOP-LABEL: signbit_sel_v4f64:374; XOP:       # %bb.0:375; XOP-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0376; XOP-NEXT:    retq377  %tr = icmp slt <4 x i64> %mask, zeroinitializer378  %z = select <4 x i1> %tr, <4 x double> %x, <4 x double> %y379  ret <4 x double> %z380}381 382; Try a condition with a different type than the select operands.383 384define <4 x double> @signbit_sel_v4f64_small_mask(<4 x double> %x, <4 x double> %y, <4 x i32> %mask) {385; AVX1-LABEL: signbit_sel_v4f64_small_mask:386; AVX1:       # %bb.0:387; AVX1-NEXT:    vpmovsxdq %xmm2, %xmm3388; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]389; AVX1-NEXT:    vpmovsxdq %xmm2, %xmm2390; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2391; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0392; AVX1-NEXT:    retq393;394; AVX2-LABEL: signbit_sel_v4f64_small_mask:395; AVX2:       # %bb.0:396; AVX2-NEXT:    vpmovsxdq %xmm2, %ymm2397; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0398; AVX2-NEXT:    retq399;400; AVX512F-LABEL: signbit_sel_v4f64_small_mask:401; AVX512F:       # %bb.0:402; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2403; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1404; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0405; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3406; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm3, %k1407; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}408; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0409; AVX512F-NEXT:    retq410;411; AVX512VL-LABEL: signbit_sel_v4f64_small_mask:412; AVX512VL:       # %bb.0:413; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3414; AVX512VL-NEXT:    vpcmpgtd %xmm2, %xmm3, %k1415; AVX512VL-NEXT:    vblendmpd %ymm0, %ymm1, %ymm0 {%k1}416; AVX512VL-NEXT:    retq417;418; XOP-LABEL: signbit_sel_v4f64_small_mask:419; XOP:       # %bb.0:420; XOP-NEXT:    vpmovsxdq %xmm2, %xmm3421; XOP-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]422; XOP-NEXT:    vpmovsxdq %xmm2, %xmm2423; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2424; XOP-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0425; XOP-NEXT:    retq426  %tr = icmp slt <4 x i32> %mask, zeroinitializer427  %z = select <4 x i1> %tr, <4 x double> %x, <4 x double> %y428  ret <4 x double> %z429}430 431; Try a 512-bit vector to make sure AVX-512 is handled as expected.432 433define <8 x double> @signbit_sel_v8f64(<8 x double> %x, <8 x double> %y, <8 x i64> %mask) {434; AVX12-LABEL: signbit_sel_v8f64:435; AVX12:       # %bb.0:436; AVX12-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0437; AVX12-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1438; AVX12-NEXT:    retq439;440; AVX512-LABEL: signbit_sel_v8f64:441; AVX512:       # %bb.0:442; AVX512-NEXT:    vpxor %xmm3, %xmm3, %xmm3443; AVX512-NEXT:    vpcmpgtq %zmm2, %zmm3, %k1444; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}445; AVX512-NEXT:    retq446;447; XOP-LABEL: signbit_sel_v8f64:448; XOP:       # %bb.0:449; XOP-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0450; XOP-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1451; XOP-NEXT:    retq452  %tr = icmp slt <8 x i64> %mask, zeroinitializer453  %z = select <8 x i1> %tr, <8 x double> %x, <8 x double> %y454  ret <8 x double> %z455}456 457; If we have a floating-point compare:458; (1) Don't die.459; (2) FIXME: If we don't care about signed-zero (and NaN?), the compare should still get folded.460 461define <4 x float> @signbit_sel_v4f32_fcmp(<4 x float> %x, <4 x float> %y, <4 x float> %mask) #0 {462; AVX12-LABEL: signbit_sel_v4f32_fcmp:463; AVX12:       # %bb.0:464; AVX12-NEXT:    vxorps %xmm2, %xmm2, %xmm2465; AVX12-NEXT:    vcmpltps %xmm2, %xmm0, %xmm2466; AVX12-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0467; AVX12-NEXT:    retq468;469; AVX512F-LABEL: signbit_sel_v4f32_fcmp:470; AVX512F:       # %bb.0:471; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1472; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0473; AVX512F-NEXT:    vxorps %xmm2, %xmm2, %xmm2474; AVX512F-NEXT:    vcmpltps %zmm2, %zmm0, %k1475; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}476; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0477; AVX512F-NEXT:    vzeroupper478; AVX512F-NEXT:    retq479;480; AVX512VL-LABEL: signbit_sel_v4f32_fcmp:481; AVX512VL:       # %bb.0:482; AVX512VL-NEXT:    vxorps %xmm2, %xmm2, %xmm2483; AVX512VL-NEXT:    vcmpltps %xmm2, %xmm0, %k1484; AVX512VL-NEXT:    vblendmps %xmm0, %xmm1, %xmm0 {%k1}485; AVX512VL-NEXT:    retq486;487; XOP-LABEL: signbit_sel_v4f32_fcmp:488; XOP:       # %bb.0:489; XOP-NEXT:    vxorps %xmm2, %xmm2, %xmm2490; XOP-NEXT:    vcmpltps %xmm2, %xmm0, %xmm2491; XOP-NEXT:    vblendvps %xmm2, %xmm0, %xmm1, %xmm0492; XOP-NEXT:    retq493  %cmp = fcmp olt <4 x float> %x, zeroinitializer494  %sel = select <4 x i1> %cmp, <4 x float> %x, <4 x float> %y495  ret <4 x float> %sel496}497 498define <4 x i64> @blend_splat1_mask_cond_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %z) {499; AVX1-LABEL: blend_splat1_mask_cond_v4i64:500; AVX1:       # %bb.0:501; AVX1-NEXT:    vpsllq $63, %xmm0, %xmm3502; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0503; AVX1-NEXT:    vpsllq $63, %xmm0, %xmm0504; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0505; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0506; AVX1-NEXT:    retq507;508; AVX2-LABEL: blend_splat1_mask_cond_v4i64:509; AVX2:       # %bb.0:510; AVX2-NEXT:    vpsllq $63, %ymm0, %ymm0511; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0512; AVX2-NEXT:    retq513;514; AVX512F-LABEL: blend_splat1_mask_cond_v4i64:515; AVX512F:       # %bb.0:516; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2517; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1518; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0519; AVX512F-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k1520; AVX512F-NEXT:    vpblendmq %zmm1, %zmm2, %zmm0 {%k1}521; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0522; AVX512F-NEXT:    retq523;524; AVX512VL-LABEL: blend_splat1_mask_cond_v4i64:525; AVX512VL:       # %bb.0:526; AVX512VL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1527; AVX512VL-NEXT:    vpblendmq %ymm1, %ymm2, %ymm0 {%k1}528; AVX512VL-NEXT:    retq529;530; XOP-LABEL: blend_splat1_mask_cond_v4i64:531; XOP:       # %bb.0:532; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm3533; XOP-NEXT:    vpsllq $63, %xmm3, %xmm3534; XOP-NEXT:    vpmovsxbq {{.*#+}} xmm4 = [18446744073709551553,18446744073709551553]535; XOP-NEXT:    vpshaq %xmm4, %xmm3, %xmm3536; XOP-NEXT:    vpsllq $63, %xmm0, %xmm0537; XOP-NEXT:    vpshaq %xmm4, %xmm0, %xmm0538; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0539; XOP-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0540; XOP-NEXT:    retq541  %a = and <4 x i64> %x, <i64 1, i64 1, i64 1, i64 1>542  %c = icmp eq <4 x i64> %a, zeroinitializer543  %r = select <4 x i1> %c, <4 x i64> %y, <4 x i64> %z544  ret <4 x i64> %r545}546 547define <4 x i32> @blend_splat1_mask_cond_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {548; AVX12-LABEL: blend_splat1_mask_cond_v4i32:549; AVX12:       # %bb.0:550; AVX12-NEXT:    vpslld $31, %xmm0, %xmm0551; AVX12-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0552; AVX12-NEXT:    retq553;554; AVX512F-LABEL: blend_splat1_mask_cond_v4i32:555; AVX512F:       # %bb.0:556; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2557; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1558; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0559; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1560; AVX512F-NEXT:    vpblendmd %zmm1, %zmm2, %zmm0 {%k1}561; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0562; AVX512F-NEXT:    vzeroupper563; AVX512F-NEXT:    retq564;565; AVX512VL-LABEL: blend_splat1_mask_cond_v4i32:566; AVX512VL:       # %bb.0:567; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1568; AVX512VL-NEXT:    vpblendmd %xmm1, %xmm2, %xmm0 {%k1}569; AVX512VL-NEXT:    retq570;571; XOP-LABEL: blend_splat1_mask_cond_v4i32:572; XOP:       # %bb.0:573; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0574; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3575; XOP-NEXT:    vpcomneqd %xmm3, %xmm0, %xmm0576; XOP-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0577; XOP-NEXT:    retq578  %a = and <4 x i32> %x, <i32 1, i32 1, i32 1, i32 1>579  %c = icmp eq <4 x i32> %a, zeroinitializer580  %r = select <4 x i1> %c, <4 x i32> %y, <4 x i32> %z581  ret <4 x i32> %r582}583 584define <16 x i16> @blend_splat1_mask_cond_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %z) {585; AVX1-LABEL: blend_splat1_mask_cond_v16i16:586; AVX1:       # %bb.0:587; AVX1-NEXT:    vpsllw $15, %xmm0, %xmm3588; AVX1-NEXT:    vpsraw $15, %xmm3, %xmm3589; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0590; AVX1-NEXT:    vpsllw $15, %xmm0, %xmm0591; AVX1-NEXT:    vpsraw $15, %xmm0, %xmm0592; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0593; AVX1-NEXT:    vandnps %ymm1, %ymm0, %ymm1594; AVX1-NEXT:    vandps %ymm0, %ymm2, %ymm0595; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0596; AVX1-NEXT:    retq597;598; AVX2-LABEL: blend_splat1_mask_cond_v16i16:599; AVX2:       # %bb.0:600; AVX2-NEXT:    vpsllw $15, %ymm0, %ymm0601; AVX2-NEXT:    vpsraw $15, %ymm0, %ymm0602; AVX2-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm0603; AVX2-NEXT:    retq604;605; AVX512F-LABEL: blend_splat1_mask_cond_v16i16:606; AVX512F:       # %bb.0:607; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0608; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3609; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0610; AVX512F-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm0611; AVX512F-NEXT:    retq612;613; AVX512VL-LABEL: blend_splat1_mask_cond_v16i16:614; AVX512VL:       # %bb.0:615; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0616; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3617; AVX512VL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0618; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm2 ^ (ymm0 & (ymm1 ^ ymm2))619; AVX512VL-NEXT:    retq620;621; XOP-LABEL: blend_splat1_mask_cond_v16i16:622; XOP:       # %bb.0:623; XOP-NEXT:    vpsllw $15, %xmm0, %xmm3624; XOP-NEXT:    vpsraw $15, %xmm3, %xmm3625; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm0626; XOP-NEXT:    vpsllw $15, %xmm0, %xmm0627; XOP-NEXT:    vpsraw $15, %xmm0, %xmm0628; XOP-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0629; XOP-NEXT:    vpcmov %ymm0, %ymm1, %ymm2, %ymm0630; XOP-NEXT:    retq631  %a = and <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>632  %c = icmp eq <16 x i16> %a, zeroinitializer633  %r = select <16 x i1> %c, <16 x i16> %y, <16 x i16> %z634  ret <16 x i16> %r635}636 637define <16 x i8> @blend_splat1_mask_cond_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %z) {638; AVX12-LABEL: blend_splat1_mask_cond_v16i8:639; AVX12:       # %bb.0:640; AVX12-NEXT:    vpsllw $7, %xmm0, %xmm0641; AVX12-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0642; AVX12-NEXT:    retq643;644; AVX512F-LABEL: blend_splat1_mask_cond_v16i8:645; AVX512F:       # %bb.0:646; AVX512F-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]647; AVX512F-NEXT:    vpand %xmm3, %xmm0, %xmm0648; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0649; AVX512F-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0650; AVX512F-NEXT:    retq651;652; AVX512VL-LABEL: blend_splat1_mask_cond_v16i8:653; AVX512VL:       # %bb.0:654; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]655; AVX512VL-NEXT:    vpand %xmm3, %xmm0, %xmm0656; AVX512VL-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0657; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm1 ^ (xmm0 & (xmm2 ^ xmm1))658; AVX512VL-NEXT:    retq659;660; XOP-LABEL: blend_splat1_mask_cond_v16i8:661; XOP:       # %bb.0:662; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0663; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3664; XOP-NEXT:    vpcomneqb %xmm3, %xmm0, %xmm0665; XOP-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0666; XOP-NEXT:    retq667  %a = and <16 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>668  %c = icmp eq <16 x i8> %a, zeroinitializer669  %r = select <16 x i1> %c, <16 x i8> %y, <16 x i8> %z670  ret <16 x i8> %r671}672 673define <2 x i64> @blend_splatmax_mask_cond_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %z) {674; AVX12-LABEL: blend_splatmax_mask_cond_v2i64:675; AVX12:       # %bb.0:676; AVX12-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm0677; AVX12-NEXT:    retq678;679; AVX512F-LABEL: blend_splatmax_mask_cond_v2i64:680; AVX512F:       # %bb.0:681; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2682; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1683; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0684; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]685; AVX512F-NEXT:    vptestnmq %zmm3, %zmm0, %k1686; AVX512F-NEXT:    vpblendmq %zmm1, %zmm2, %zmm0 {%k1}687; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0688; AVX512F-NEXT:    vzeroupper689; AVX512F-NEXT:    retq690;691; AVX512VL-LABEL: blend_splatmax_mask_cond_v2i64:692; AVX512VL:       # %bb.0:693; AVX512VL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k1694; AVX512VL-NEXT:    vpblendmq %xmm1, %xmm2, %xmm0 {%k1}695; AVX512VL-NEXT:    retq696;697; XOP-LABEL: blend_splatmax_mask_cond_v2i64:698; XOP:       # %bb.0:699; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0700; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3701; XOP-NEXT:    vpcomneqq %xmm3, %xmm0, %xmm0702; XOP-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm0703; XOP-NEXT:    retq704  %a = and <2 x i64> %x, <i64 9223372036854775808, i64 9223372036854775808>705  %c = icmp eq <2 x i64> %a, zeroinitializer706  %r = select <2 x i1> %c, <2 x i64> %y, <2 x i64> %z707  ret <2 x i64> %r708}709 710define <8 x i32> @blend_splatmax_mask_cond_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) {711; AVX12-LABEL: blend_splatmax_mask_cond_v8i32:712; AVX12:       # %bb.0:713; AVX12-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0714; AVX12-NEXT:    retq715;716; AVX512F-LABEL: blend_splatmax_mask_cond_v8i32:717; AVX512F:       # %bb.0:718; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2719; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1720; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0721; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1722; AVX512F-NEXT:    vpblendmd %zmm1, %zmm2, %zmm0 {%k1}723; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0724; AVX512F-NEXT:    retq725;726; AVX512VL-LABEL: blend_splatmax_mask_cond_v8i32:727; AVX512VL:       # %bb.0:728; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1729; AVX512VL-NEXT:    vpblendmd %ymm1, %ymm2, %ymm0 {%k1}730; AVX512VL-NEXT:    retq731;732; XOP-LABEL: blend_splatmax_mask_cond_v8i32:733; XOP:       # %bb.0:734; XOP-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0735; XOP-NEXT:    retq736  %a = and <8 x i32> %x, <i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648>737  %c = icmp eq <8 x i32> %a, zeroinitializer738  %r = select <8 x i1> %c, <8 x i32> %y, <8 x i32> %z739  ret <8 x i32> %r740}741 742define <8 x i16> @blend_splatmax_mask_cond_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %z) {743; AVX12-LABEL: blend_splatmax_mask_cond_v8i16:744; AVX12:       # %bb.0:745; AVX12-NEXT:    vpsraw $15, %xmm0, %xmm0746; AVX12-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0747; AVX12-NEXT:    retq748;749; AVX512F-LABEL: blend_splatmax_mask_cond_v8i16:750; AVX512F:       # %bb.0:751; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0752; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3753; AVX512F-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0754; AVX512F-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm0755; AVX512F-NEXT:    retq756;757; AVX512VL-LABEL: blend_splatmax_mask_cond_v8i16:758; AVX512VL:       # %bb.0:759; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0760; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3761; AVX512VL-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0762; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm2 ^ (xmm0 & (xmm1 ^ xmm2))763; AVX512VL-NEXT:    retq764;765; XOP-LABEL: blend_splatmax_mask_cond_v8i16:766; XOP:       # %bb.0:767; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0768; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3769; XOP-NEXT:    vpcomneqw %xmm3, %xmm0, %xmm0770; XOP-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0771; XOP-NEXT:    retq772  %a = and <8 x i16> %x, <i16 32768, i16 32768, i16 32768, i16 32768, i16 32768, i16 32768, i16 32768, i16 32768>773  %c = icmp eq <8 x i16> %a, zeroinitializer774  %r = select <8 x i1> %c, <8 x i16> %y, <8 x i16> %z775  ret <8 x i16> %r776}777 778define <32 x i8> @blend_splatmax_mask_cond_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %z) {779; AVX1-LABEL: blend_splatmax_mask_cond_v32i8:780; AVX1:       # %bb.0:781; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3782; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4783; AVX1-NEXT:    vpcmpgtb %xmm3, %xmm4, %xmm3784; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm4, %xmm0785; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0786; AVX1-NEXT:    vandnps %ymm1, %ymm0, %ymm1787; AVX1-NEXT:    vandps %ymm0, %ymm2, %ymm0788; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0789; AVX1-NEXT:    retq790;791; AVX2-LABEL: blend_splatmax_mask_cond_v32i8:792; AVX2:       # %bb.0:793; AVX2-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm0794; AVX2-NEXT:    retq795;796; AVX512F-LABEL: blend_splatmax_mask_cond_v32i8:797; AVX512F:       # %bb.0:798; AVX512F-NEXT:    vpbroadcastb {{.*#+}} ymm3 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]799; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm0800; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm0801; AVX512F-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm0802; AVX512F-NEXT:    retq803;804; AVX512VL-LABEL: blend_splatmax_mask_cond_v32i8:805; AVX512VL:       # %bb.0:806; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]807; AVX512VL-NEXT:    vpand %ymm3, %ymm0, %ymm0808; AVX512VL-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm0809; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm1 ^ (ymm0 & (ymm2 ^ ymm1))810; AVX512VL-NEXT:    retq811;812; XOP-LABEL: blend_splatmax_mask_cond_v32i8:813; XOP:       # %bb.0:814; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm3815; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm4816; XOP-NEXT:    vpcmpgtb %xmm3, %xmm4, %xmm3817; XOP-NEXT:    vpcmpgtb %xmm0, %xmm4, %xmm0818; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0819; XOP-NEXT:    vpcmov %ymm0, %ymm1, %ymm2, %ymm0820; XOP-NEXT:    retq821  %a = and <32 x i8> %x, <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>822  %c = icmp eq <32 x i8> %a, zeroinitializer823  %r = select <32 x i1> %c, <32 x i8> %y, <32 x i8> %z824  ret <32 x i8> %r825}826 827define <4 x i64> @blend_splat_mask_cond_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %z) {828; AVX1-LABEL: blend_splat_mask_cond_v4i64:829; AVX1:       # %bb.0:830; AVX1-NEXT:    vpsllq $62, %xmm0, %xmm3831; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0832; AVX1-NEXT:    vpsllq $62, %xmm0, %xmm0833; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0834; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0835; AVX1-NEXT:    retq836;837; AVX2-LABEL: blend_splat_mask_cond_v4i64:838; AVX2:       # %bb.0:839; AVX2-NEXT:    vpsllq $62, %ymm0, %ymm0840; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0841; AVX2-NEXT:    retq842;843; AVX512F-LABEL: blend_splat_mask_cond_v4i64:844; AVX512F:       # %bb.0:845; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2846; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1847; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0848; AVX512F-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k1849; AVX512F-NEXT:    vpblendmq %zmm1, %zmm2, %zmm0 {%k1}850; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0851; AVX512F-NEXT:    retq852;853; AVX512VL-LABEL: blend_splat_mask_cond_v4i64:854; AVX512VL:       # %bb.0:855; AVX512VL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k1856; AVX512VL-NEXT:    vpblendmq %ymm1, %ymm2, %ymm0 {%k1}857; AVX512VL-NEXT:    retq858;859; XOP-LABEL: blend_splat_mask_cond_v4i64:860; XOP:       # %bb.0:861; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm3862; XOP-NEXT:    vpsllq $62, %xmm3, %xmm3863; XOP-NEXT:    vpmovsxbq {{.*#+}} xmm4 = [18446744073709551553,18446744073709551553]864; XOP-NEXT:    vpshaq %xmm4, %xmm3, %xmm3865; XOP-NEXT:    vpsllq $62, %xmm0, %xmm0866; XOP-NEXT:    vpshaq %xmm4, %xmm0, %xmm0867; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0868; XOP-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0869; XOP-NEXT:    retq870  %a = and <4 x i64> %x, <i64 2, i64 2, i64 2, i64 2>871  %c = icmp eq <4 x i64> %a, zeroinitializer872  %r = select <4 x i1> %c, <4 x i64> %y, <4 x i64> %z873  ret <4 x i64> %r874}875 876define <4 x i32> @blend_splat_mask_cond_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {877; AVX12-LABEL: blend_splat_mask_cond_v4i32:878; AVX12:       # %bb.0:879; AVX12-NEXT:    vpslld $15, %xmm0, %xmm0880; AVX12-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0881; AVX12-NEXT:    retq882;883; AVX512F-LABEL: blend_splat_mask_cond_v4i32:884; AVX512F:       # %bb.0:885; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm2886; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1887; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0888; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1889; AVX512F-NEXT:    vpblendmd %zmm1, %zmm2, %zmm0 {%k1}890; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0891; AVX512F-NEXT:    vzeroupper892; AVX512F-NEXT:    retq893;894; AVX512VL-LABEL: blend_splat_mask_cond_v4i32:895; AVX512VL:       # %bb.0:896; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1897; AVX512VL-NEXT:    vpblendmd %xmm1, %xmm2, %xmm0 {%k1}898; AVX512VL-NEXT:    retq899;900; XOP-LABEL: blend_splat_mask_cond_v4i32:901; XOP:       # %bb.0:902; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0903; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3904; XOP-NEXT:    vpcomneqd %xmm3, %xmm0, %xmm0905; XOP-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0906; XOP-NEXT:    retq907  %a = and <4 x i32> %x, <i32 65536, i32 65536, i32 65536, i32 65536>908  %c = icmp eq <4 x i32> %a, zeroinitializer909  %r = select <4 x i1> %c, <4 x i32> %y, <4 x i32> %z910  ret <4 x i32> %r911}912 913define <16 x i16> @blend_splat_mask_cond_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %z) {914; AVX1-LABEL: blend_splat_mask_cond_v16i16:915; AVX1:       # %bb.0:916; AVX1-NEXT:    vpsllw $5, %xmm0, %xmm3917; AVX1-NEXT:    vpsraw $15, %xmm3, %xmm3918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0919; AVX1-NEXT:    vpsllw $5, %xmm0, %xmm0920; AVX1-NEXT:    vpsraw $15, %xmm0, %xmm0921; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0922; AVX1-NEXT:    vandnps %ymm1, %ymm0, %ymm1923; AVX1-NEXT:    vandps %ymm0, %ymm2, %ymm0924; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0925; AVX1-NEXT:    retq926;927; AVX2-LABEL: blend_splat_mask_cond_v16i16:928; AVX2:       # %bb.0:929; AVX2-NEXT:    vpsllw $5, %ymm0, %ymm0930; AVX2-NEXT:    vpsraw $15, %ymm0, %ymm0931; AVX2-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm0932; AVX2-NEXT:    retq933;934; AVX512F-LABEL: blend_splat_mask_cond_v16i16:935; AVX512F:       # %bb.0:936; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0937; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3938; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0939; AVX512F-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm0940; AVX512F-NEXT:    retq941;942; AVX512VL-LABEL: blend_splat_mask_cond_v16i16:943; AVX512VL:       # %bb.0:944; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0945; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm3946; AVX512VL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm0947; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm2 ^ (ymm0 & (ymm1 ^ ymm2))948; AVX512VL-NEXT:    retq949;950; XOP-LABEL: blend_splat_mask_cond_v16i16:951; XOP:       # %bb.0:952; XOP-NEXT:    vpsllw $5, %xmm0, %xmm3953; XOP-NEXT:    vpsraw $15, %xmm3, %xmm3954; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm0955; XOP-NEXT:    vpsllw $5, %xmm0, %xmm0956; XOP-NEXT:    vpsraw $15, %xmm0, %xmm0957; XOP-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0958; XOP-NEXT:    vpcmov %ymm0, %ymm1, %ymm2, %ymm0959; XOP-NEXT:    retq960  %a = and <16 x i16> %x, <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>961  %c = icmp eq <16 x i16> %a, zeroinitializer962  %r = select <16 x i1> %c, <16 x i16> %y, <16 x i16> %z963  ret <16 x i16> %r964}965 966define <16 x i8> @blend_splat_mask_cond_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %z) {967; AVX12-LABEL: blend_splat_mask_cond_v16i8:968; AVX12:       # %bb.0:969; AVX12-NEXT:    vpsllw $5, %xmm0, %xmm0970; AVX12-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0971; AVX12-NEXT:    retq972;973; AVX512F-LABEL: blend_splat_mask_cond_v16i8:974; AVX512F:       # %bb.0:975; AVX512F-NEXT:    vpbroadcastb {{.*#+}} xmm3 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]976; AVX512F-NEXT:    vpand %xmm3, %xmm0, %xmm0977; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0978; AVX512F-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0979; AVX512F-NEXT:    retq980;981; AVX512VL-LABEL: blend_splat_mask_cond_v16i8:982; AVX512VL:       # %bb.0:983; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]984; AVX512VL-NEXT:    vpand %xmm3, %xmm0, %xmm0985; AVX512VL-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0986; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm1 ^ (xmm0 & (xmm2 ^ xmm1))987; AVX512VL-NEXT:    retq988;989; XOP-LABEL: blend_splat_mask_cond_v16i8:990; XOP:       # %bb.0:991; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0992; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm3993; XOP-NEXT:    vpcomneqb %xmm3, %xmm0, %xmm0994; XOP-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm0995; XOP-NEXT:    retq996  %a = and <16 x i8> %x, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>997  %c = icmp eq <16 x i8> %a, zeroinitializer998  %r = select <16 x i1> %c, <16 x i8> %y, <16 x i8> %z999  ret <16 x i8> %r1000}1001 1002define <2 x i64> @blend_mask_cond_v2i64(<2 x i64> %x, <2 x i64> %y, <2 x i64> %z) {1003; AVX1-LABEL: blend_mask_cond_v2i64:1004; AVX1:       # %bb.0:1005; AVX1-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,4]1006; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm01007; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm0, %xmm01008; AVX1-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm01009; AVX1-NEXT:    retq1010;1011; AVX2-LABEL: blend_mask_cond_v2i64:1012; AVX2:       # %bb.0:1013; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01014; AVX2-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm01015; AVX2-NEXT:    retq1016;1017; AVX512F-LABEL: blend_mask_cond_v2i64:1018; AVX512F:       # %bb.0:1019; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm21020; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11021; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01022; AVX512F-NEXT:    vpmovsxbq {{.*#+}} xmm3 = [1,4]1023; AVX512F-NEXT:    vptestnmq %zmm3, %zmm0, %k11024; AVX512F-NEXT:    vpblendmq %zmm1, %zmm2, %zmm0 {%k1}1025; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01026; AVX512F-NEXT:    vzeroupper1027; AVX512F-NEXT:    retq1028;1029; AVX512VL-LABEL: blend_mask_cond_v2i64:1030; AVX512VL:       # %bb.0:1031; AVX512VL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k11032; AVX512VL-NEXT:    vpblendmq %xmm1, %xmm2, %xmm0 {%k1}1033; AVX512VL-NEXT:    retq1034;1035; XOP-LABEL: blend_mask_cond_v2i64:1036; XOP:       # %bb.0:1037; XOP-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01038; XOP-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm01039; XOP-NEXT:    retq1040  %a = and <2 x i64> %x, <i64 1, i64 4>1041  %c = icmp eq <2 x i64> %a, zeroinitializer1042  %r = select <2 x i1> %c, <2 x i64> %y, <2 x i64> %z1043  ret <2 x i64> %r1044}1045 1046define <4 x i32> @blend_mask_cond_v4i32(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1047; AVX1-LABEL: blend_mask_cond_v4i32:1048; AVX1:       # %bb.0:1049; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [32768,4194304,1073741824,2147483648]1050; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm01051; AVX1-NEXT:    retq1052;1053; AVX2-LABEL: blend_mask_cond_v4i32:1054; AVX2:       # %bb.0:1055; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01056; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm01057; AVX2-NEXT:    retq1058;1059; AVX512F-LABEL: blend_mask_cond_v4i32:1060; AVX512F:       # %bb.0:1061; AVX512F-NEXT:    # kill: def $xmm2 killed $xmm2 def $zmm21062; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm11063; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01064; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [65536,512,2,1]1065; AVX512F-NEXT:    vptestnmd %zmm3, %zmm0, %k11066; AVX512F-NEXT:    vpblendmd %zmm1, %zmm2, %zmm0 {%k1}1067; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01068; AVX512F-NEXT:    vzeroupper1069; AVX512F-NEXT:    retq1070;1071; AVX512VL-LABEL: blend_mask_cond_v4i32:1072; AVX512VL:       # %bb.0:1073; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k11074; AVX512VL-NEXT:    vpblendmd %xmm1, %xmm2, %xmm0 {%k1}1075; AVX512VL-NEXT:    retq1076;1077; XOP-LABEL: blend_mask_cond_v4i32:1078; XOP:       # %bb.0:1079; XOP-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01080; XOP-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm01081; XOP-NEXT:    retq1082  %a = and <4 x i32> %x, <i32 65536, i32 512, i32 2, i32 1>1083  %c = icmp eq <4 x i32> %a, zeroinitializer1084  %r = select <4 x i1> %c, <4 x i32> %y, <4 x i32> %z1085  ret <4 x i32> %r1086}1087 1088define <8 x i16> @blend_mask_cond_v8i16(<8 x i16> %x, <8 x i16> %y, <8 x i16> %z) {1089; AVX12-LABEL: blend_mask_cond_v8i16:1090; AVX12:       # %bb.0:1091; AVX12-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01092; AVX12-NEXT:    vpxor %xmm3, %xmm3, %xmm31093; AVX12-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm01094; AVX12-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm01095; AVX12-NEXT:    retq1096;1097; AVX512F-LABEL: blend_mask_cond_v8i16:1098; AVX512F:       # %bb.0:1099; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01100; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm31101; AVX512F-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm01102; AVX512F-NEXT:    vpblendvb %xmm0, %xmm1, %xmm2, %xmm01103; AVX512F-NEXT:    retq1104;1105; AVX512VL-LABEL: blend_mask_cond_v8i16:1106; AVX512VL:       # %bb.0:1107; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01108; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm31109; AVX512VL-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm01110; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm2 ^ (xmm0 & (xmm1 ^ xmm2))1111; AVX512VL-NEXT:    retq1112;1113; XOP-LABEL: blend_mask_cond_v8i16:1114; XOP:       # %bb.0:1115; XOP-NEXT:    vpxor %xmm3, %xmm3, %xmm31116; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01117; XOP-NEXT:    vpcomltw %xmm3, %xmm0, %xmm01118; XOP-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm01119; XOP-NEXT:    retq1120  %a = and <8 x i16> %x, <i16 1, i16 2, i16 8, i16 4, i16 8, i16 1024, i16 2, i16 4096>1121  %c = icmp eq <8 x i16> %a, zeroinitializer1122  %r = select <8 x i1> %c, <8 x i16> %y, <8 x i16> %z1123  ret <8 x i16> %r1124}1125 1126define <16 x i8> @blend_mask_cond_v16i8(<16 x i8> %x, <16 x i8> %y, <16 x i8> %z) {1127; AVX12-LABEL: blend_mask_cond_v16i8:1128; AVX12:       # %bb.0:1129; AVX12-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2]1130; AVX12-NEXT:    vpand %xmm3, %xmm0, %xmm01131; AVX12-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm01132; AVX12-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm01133; AVX12-NEXT:    retq1134;1135; AVX512F-LABEL: blend_mask_cond_v16i8:1136; AVX512F:       # %bb.0:1137; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2]1138; AVX512F-NEXT:    vpand %xmm3, %xmm0, %xmm01139; AVX512F-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm01140; AVX512F-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm01141; AVX512F-NEXT:    retq1142;1143; AVX512VL-LABEL: blend_mask_cond_v16i8:1144; AVX512VL:       # %bb.0:1145; AVX512VL-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2]1146; AVX512VL-NEXT:    vpand %xmm3, %xmm0, %xmm01147; AVX512VL-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm01148; AVX512VL-NEXT:    vpternlogq {{.*#+}} xmm0 = xmm1 ^ (xmm0 & (xmm2 ^ xmm1))1149; AVX512VL-NEXT:    retq1150;1151; XOP-LABEL: blend_mask_cond_v16i8:1152; XOP:       # %bb.0:1153; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01154; XOP-NEXT:    vpblendvb %xmm0, %xmm2, %xmm1, %xmm01155; XOP-NEXT:    retq1156  %a = and <16 x i8> %x, <i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 4, i8 4, i8 4, i8 4, i8 2, i8 2, i8 2, i8 2>1157  %c = icmp eq <16 x i8> %a, zeroinitializer1158  %r = select <16 x i1> %c, <16 x i8> %y, <16 x i8> %z1159  ret <16 x i8> %r1160}1161 1162define <4 x i64> @blend_mask_cond_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x i64> %z) {1163; AVX1-LABEL: blend_mask_cond_v4i64:1164; AVX1:       # %bb.0:1165; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01166; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31167; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm41168; AVX1-NEXT:    vpcmpeqq %xmm4, %xmm3, %xmm31169; AVX1-NEXT:    vpcmpeqq %xmm4, %xmm0, %xmm01170; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01171; AVX1-NEXT:    vblendvpd %ymm0, %ymm1, %ymm2, %ymm01172; AVX1-NEXT:    retq1173;1174; AVX2-LABEL: blend_mask_cond_v4i64:1175; AVX2:       # %bb.0:1176; AVX2-NEXT:    vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01177; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm01178; AVX2-NEXT:    retq1179;1180; AVX512F-LABEL: blend_mask_cond_v4i64:1181; AVX512F:       # %bb.0:1182; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm21183; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11184; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01185; AVX512F-NEXT:    vpmovzxwq {{.*#+}} ymm3 = [2,4,32768,1]1186; AVX512F-NEXT:    vptestnmq %zmm3, %zmm0, %k11187; AVX512F-NEXT:    vpblendmq %zmm1, %zmm2, %zmm0 {%k1}1188; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01189; AVX512F-NEXT:    retq1190;1191; AVX512VL-LABEL: blend_mask_cond_v4i64:1192; AVX512VL:       # %bb.0:1193; AVX512VL-NEXT:    vptestnmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k11194; AVX512VL-NEXT:    vpblendmq %ymm1, %ymm2, %ymm0 {%k1}1195; AVX512VL-NEXT:    retq1196;1197; XOP-LABEL: blend_mask_cond_v4i64:1198; XOP:       # %bb.0:1199; XOP-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm31200; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm01201; XOP-NEXT:    vpshlq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01202; XOP-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm01203; XOP-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm01204; XOP-NEXT:    retq1205  %a = and <4 x i64> %x, <i64 2, i64 4, i64 32768, i64 1>1206  %c = icmp eq <4 x i64> %a, zeroinitializer1207  %r = select <4 x i1> %c, <4 x i64> %y, <4 x i64> %z1208  ret <4 x i64> %r1209}1210 1211define <8 x i32> @blend_mask_cond_v8i32(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) {1212; AVX1-LABEL: blend_mask_cond_v8i32:1213; AVX1:       # %bb.0:1214; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3 # [2147483648,1073741824,268435456,536870912]1215; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01216; AVX1-NEXT:    vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [268435456,2097152,1073741824,524288]1217; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm01218; AVX1-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm01219; AVX1-NEXT:    retq1220;1221; AVX2-LABEL: blend_mask_cond_v8i32:1222; AVX2:       # %bb.0:1223; AVX2-NEXT:    vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01224; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm01225; AVX2-NEXT:    retq1226;1227; AVX512F-LABEL: blend_mask_cond_v8i32:1228; AVX512F:       # %bb.0:1229; AVX512F-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm21230; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm11231; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01232; AVX512F-NEXT:    vpmovsxwd {{.*#+}} ymm3 = [1,2,8,4,8,1024,2,4096]1233; AVX512F-NEXT:    vptestnmd %zmm3, %zmm0, %k11234; AVX512F-NEXT:    vpblendmd %zmm1, %zmm2, %zmm0 {%k1}1235; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01236; AVX512F-NEXT:    retq1237;1238; AVX512VL-LABEL: blend_mask_cond_v8i32:1239; AVX512VL:       # %bb.0:1240; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k11241; AVX512VL-NEXT:    vpblendmd %ymm1, %ymm2, %ymm0 {%k1}1242; AVX512VL-NEXT:    retq1243;1244; XOP-LABEL: blend_mask_cond_v8i32:1245; XOP:       # %bb.0:1246; XOP-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm31247; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm01248; XOP-NEXT:    vpshld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01249; XOP-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm01250; XOP-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm01251; XOP-NEXT:    retq1252  %a = and <8 x i32> %x, <i32 1, i32 2, i32 8, i32 4, i32 8, i32 1024, i32 2, i32 4096>1253  %c = icmp eq <8 x i32> %a, zeroinitializer1254  %r = select <8 x i1> %c, <8 x i32> %y, <8 x i32> %z1255  ret <8 x i32> %r1256}1257 1258define <16 x i16> @blend_mask_cond_v16i16(<16 x i16> %x, <16 x i16> %y, <16 x i16> %z) {1259; AVX1-LABEL: blend_mask_cond_v16i16:1260; AVX1:       # %bb.0:1261; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01262; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31263; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm41264; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm3, %xmm31265; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm0, %xmm01266; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01267; AVX1-NEXT:    vandnps %ymm2, %ymm0, %ymm21268; AVX1-NEXT:    vandps %ymm0, %ymm1, %ymm01269; AVX1-NEXT:    vorps %ymm2, %ymm0, %ymm01270; AVX1-NEXT:    retq1271;1272; AVX2-LABEL: blend_mask_cond_v16i16:1273; AVX2:       # %bb.0:1274; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01275; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm31276; AVX2-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm01277; AVX2-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm01278; AVX2-NEXT:    retq1279;1280; AVX512F-LABEL: blend_mask_cond_v16i16:1281; AVX512F:       # %bb.0:1282; AVX512F-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01283; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm31284; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm01285; AVX512F-NEXT:    vpblendvb %ymm0, %ymm1, %ymm2, %ymm01286; AVX512F-NEXT:    retq1287;1288; AVX512VL-LABEL: blend_mask_cond_v16i16:1289; AVX512VL:       # %bb.0:1290; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01291; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm31292; AVX512VL-NEXT:    vpcmpeqw %ymm3, %ymm0, %ymm01293; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm2 ^ (ymm0 & (ymm1 ^ ymm2))1294; AVX512VL-NEXT:    retq1295;1296; XOP-LABEL: blend_mask_cond_v16i16:1297; XOP:       # %bb.0:1298; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm31299; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31300; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm41301; XOP-NEXT:    vpcomltw %xmm4, %xmm3, %xmm31302; XOP-NEXT:    vpshlw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01303; XOP-NEXT:    vpcomltw %xmm4, %xmm0, %xmm01304; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01305; XOP-NEXT:    vpcmov %ymm0, %ymm1, %ymm2, %ymm01306; XOP-NEXT:    retq1307  %a = and <16 x i16> %x, <i16 1, i16 2, i16 8, i16 4, i16 8, i16 2, i16 2, i16 2, i16 2, i16 8, i16 8, i16 64, i16 64, i16 1024, i16 4096, i16 1024>1308  %c = icmp eq <16 x i16> %a, zeroinitializer1309  %r = select <16 x i1> %c, <16 x i16> %y, <16 x i16> %z1310  ret <16 x i16> %r1311}1312 1313define <32 x i8> @blend_mask_cond_v32i8(<32 x i8> %x, <32 x i8> %y, <32 x i8> %z) {1314; AVX1-LABEL: blend_mask_cond_v32i8:1315; AVX1:       # %bb.0:1316; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01317; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31318; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm41319; AVX1-NEXT:    vpcmpeqb %xmm4, %xmm3, %xmm31320; AVX1-NEXT:    vpcmpeqb %xmm4, %xmm0, %xmm01321; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01322; AVX1-NEXT:    vandnps %ymm2, %ymm0, %ymm21323; AVX1-NEXT:    vandps %ymm0, %ymm1, %ymm01324; AVX1-NEXT:    vorps %ymm2, %ymm0, %ymm01325; AVX1-NEXT:    retq1326;1327; AVX2-LABEL: blend_mask_cond_v32i8:1328; AVX2:       # %bb.0:1329; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2,1,2,4,8,16,32,64,128,4,4,4,4,128,4,2,16]1330; AVX2-NEXT:    vpand %ymm3, %ymm0, %ymm01331; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm01332; AVX2-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm01333; AVX2-NEXT:    retq1334;1335; AVX512F-LABEL: blend_mask_cond_v32i8:1336; AVX512F:       # %bb.0:1337; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2,1,2,4,8,16,32,64,128,4,4,4,4,128,4,2,16]1338; AVX512F-NEXT:    vpand %ymm3, %ymm0, %ymm01339; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm01340; AVX512F-NEXT:    vpblendvb %ymm0, %ymm2, %ymm1, %ymm01341; AVX512F-NEXT:    retq1342;1343; AVX512VL-LABEL: blend_mask_cond_v32i8:1344; AVX512VL:       # %bb.0:1345; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm3 = [1,2,4,8,16,32,64,128,4,4,4,4,2,2,2,2,1,2,4,8,16,32,64,128,4,4,4,4,128,4,2,16]1346; AVX512VL-NEXT:    vpand %ymm3, %ymm0, %ymm01347; AVX512VL-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm01348; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm0 = ymm1 ^ (ymm0 & (ymm2 ^ ymm1))1349; AVX512VL-NEXT:    retq1350;1351; XOP-LABEL: blend_mask_cond_v32i8:1352; XOP:       # %bb.0:1353; XOP-NEXT:    vextractf128 $1, %ymm0, %xmm31354; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm31355; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm41356; XOP-NEXT:    vpcomltb %xmm4, %xmm3, %xmm31357; XOP-NEXT:    vpshlb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm01358; XOP-NEXT:    vpcomltb %xmm4, %xmm0, %xmm01359; XOP-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01360; XOP-NEXT:    vpcmov %ymm0, %ymm1, %ymm2, %ymm01361; XOP-NEXT:    retq1362  %a = and <32 x i8> %x, <i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 4, i8 4, i8 4, i8 4, i8 2, i8 2, i8 2, i8 2, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 4, i8 4, i8 4, i8 4, i8 128, i8 4, i8 2, i8 16>1363  %c = icmp eq <32 x i8> %a, zeroinitializer1364  %r = select <32 x i1> %c, <32 x i8> %y, <32 x i8> %z1365  ret <32 x i8> %r1366}1367 1368define void @store_blend_load_v4i64(ptr %a0, ptr %a1, ptr %a2) {1369; AVX1-LABEL: store_blend_load_v4i64:1370; AVX1:       # %bb.0:1371; AVX1-NEXT:    vmovapd (%rsi), %ymm01372; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]1373; AVX1-NEXT:    # xmm1 = mem[0,0]1374; AVX1-NEXT:    vpxor 16(%rdi), %xmm1, %xmm21375; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775815,9223372036854775815]1376; AVX1-NEXT:    # xmm3 = mem[0,0]1377; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm21378; AVX1-NEXT:    vpxor (%rdi), %xmm1, %xmm11379; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm11380; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11381; AVX1-NEXT:    vblendvpd %ymm1, (%rdi), %ymm0, %ymm01382; AVX1-NEXT:    vmovapd %ymm0, (%rdx)1383; AVX1-NEXT:    vzeroupper1384; AVX1-NEXT:    retq1385;1386; AVX2-LABEL: store_blend_load_v4i64:1387; AVX2:       # %bb.0:1388; AVX2-NEXT:    vmovdqa (%rdi), %ymm01389; AVX2-NEXT:    vmovapd (%rsi), %ymm11390; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]1391; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm21392; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [9223372036854775815,9223372036854775815,9223372036854775815,9223372036854775815]1393; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm21394; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm01395; AVX2-NEXT:    vmovapd %ymm0, (%rdx)1396; AVX2-NEXT:    vzeroupper1397; AVX2-NEXT:    retq1398;1399; AVX512F-LABEL: store_blend_load_v4i64:1400; AVX512F:       # %bb.0:1401; AVX512F-NEXT:    vmovdqa (%rdi), %ymm01402; AVX512F-NEXT:    vmovdqa (%rsi), %ymm11403; AVX512F-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k11404; AVX512F-NEXT:    vmovdqa64 %zmm0, %zmm1 {%k1}1405; AVX512F-NEXT:    vmovdqa %ymm1, (%rdx)1406; AVX512F-NEXT:    vzeroupper1407; AVX512F-NEXT:    retq1408;1409; AVX512VL-LABEL: store_blend_load_v4i64:1410; AVX512VL:       # %bb.0:1411; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm01412; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm11413; AVX512VL-NEXT:    vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %k11414; AVX512VL-NEXT:    vmovdqa64 %ymm0, %ymm1 {%k1}1415; AVX512VL-NEXT:    vmovdqa %ymm1, (%rdx)1416; AVX512VL-NEXT:    vzeroupper1417; AVX512VL-NEXT:    retq1418;1419; XOP-LABEL: store_blend_load_v4i64:1420; XOP:       # %bb.0:1421; XOP-NEXT:    vmovapd (%rsi), %ymm01422; XOP-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [7,7]1423; XOP-NEXT:    vpcomltuq 16(%rdi), %xmm1, %xmm21424; XOP-NEXT:    vpcomltuq (%rdi), %xmm1, %xmm11425; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11426; XOP-NEXT:    vblendvpd %ymm1, (%rdi), %ymm0, %ymm01427; XOP-NEXT:    vmovapd %ymm0, (%rdx)1428; XOP-NEXT:    vzeroupper1429; XOP-NEXT:    retq1430  %v0 = load <4 x i64>, ptr %a01431  %v1 = load <4 x i64>, ptr %a11432  %cmp = icmp ugt <4 x i64> %v0, <i64 7, i64 7, i64 7, i64 7>1433  %res = select <4 x i1> %cmp, <4 x i64> %v0, <4 x i64> %v11434  store <4 x i64> %res, ptr %a21435  ret void1436}1437 1438define void @store_blend_load_v8i32(ptr %a0, ptr %a1, ptr %a2) {1439; AVX1-LABEL: store_blend_load_v8i32:1440; AVX1:       # %bb.0:1441; AVX1-NEXT:    vmovaps (%rsi), %ymm01442; AVX1-NEXT:    vmovdqa (%rdi), %xmm11443; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm21444; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [8,8,8,8]1445; AVX1-NEXT:    vpmaxud %xmm3, %xmm2, %xmm41446; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm21447; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm31448; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm11449; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11450; AVX1-NEXT:    vblendvps %ymm1, (%rdi), %ymm0, %ymm01451; AVX1-NEXT:    vmovaps %ymm0, (%rdx)1452; AVX1-NEXT:    vzeroupper1453; AVX1-NEXT:    retq1454;1455; AVX2-LABEL: store_blend_load_v8i32:1456; AVX2:       # %bb.0:1457; AVX2-NEXT:    vmovdqa (%rdi), %ymm01458; AVX2-NEXT:    vmovaps (%rsi), %ymm11459; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [8,8,8,8,8,8,8,8]1460; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm21461; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm0, %ymm21462; AVX2-NEXT:    vblendvps %ymm2, %ymm0, %ymm1, %ymm01463; AVX2-NEXT:    vmovaps %ymm0, (%rdx)1464; AVX2-NEXT:    vzeroupper1465; AVX2-NEXT:    retq1466;1467; AVX512F-LABEL: store_blend_load_v8i32:1468; AVX512F:       # %bb.0:1469; AVX512F-NEXT:    vmovdqa (%rdi), %ymm01470; AVX512F-NEXT:    vmovdqa (%rsi), %ymm11471; AVX512F-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k11472; AVX512F-NEXT:    vmovdqa32 %zmm0, %zmm1 {%k1}1473; AVX512F-NEXT:    vmovdqa %ymm1, (%rdx)1474; AVX512F-NEXT:    vzeroupper1475; AVX512F-NEXT:    retq1476;1477; AVX512VL-LABEL: store_blend_load_v8i32:1478; AVX512VL:       # %bb.0:1479; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm01480; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm11481; AVX512VL-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k11482; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1}1483; AVX512VL-NEXT:    vmovdqa %ymm1, (%rdx)1484; AVX512VL-NEXT:    vzeroupper1485; AVX512VL-NEXT:    retq1486;1487; XOP-LABEL: store_blend_load_v8i32:1488; XOP:       # %bb.0:1489; XOP-NEXT:    vmovaps (%rsi), %ymm01490; XOP-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7]1491; XOP-NEXT:    vpcomltud 16(%rdi), %xmm1, %xmm21492; XOP-NEXT:    vpcomltud (%rdi), %xmm1, %xmm11493; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11494; XOP-NEXT:    vblendvps %ymm1, (%rdi), %ymm0, %ymm01495; XOP-NEXT:    vmovaps %ymm0, (%rdx)1496; XOP-NEXT:    vzeroupper1497; XOP-NEXT:    retq1498  %v0 = load <8 x i32>, ptr %a01499  %v1 = load <8 x i32>, ptr %a11500  %cmp = icmp ugt <8 x i32> %v0, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>1501  %res = select <8 x i1> %cmp, <8 x i32> %v0, <8 x i32> %v11502  store <8 x i32> %res, ptr %a21503  ret void1504}1505 1506define void @store_blend_load_v16i16(ptr %a0, ptr %a1, ptr %a2) {1507; AVX1-LABEL: store_blend_load_v16i16:1508; AVX1:       # %bb.0:1509; AVX1-NEXT:    vmovdqa (%rdi), %xmm01510; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm11511; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [8,8,8,8,8,8,8,8]1512; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm31513; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm31514; AVX1-NEXT:    vpmaxuw %xmm2, %xmm1, %xmm21515; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm21516; AVX1-NEXT:    vmovdqa (%rsi), %xmm41517; AVX1-NEXT:    vmovdqa 16(%rsi), %xmm51518; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm5, %xmm11519; AVX1-NEXT:    vpblendvb %xmm3, %xmm0, %xmm4, %xmm01520; AVX1-NEXT:    vmovdqa %xmm0, (%rdx)1521; AVX1-NEXT:    vmovdqa %xmm1, 16(%rdx)1522; AVX1-NEXT:    retq1523;1524; AVX2-LABEL: store_blend_load_v16i16:1525; AVX2:       # %bb.0:1526; AVX2-NEXT:    vmovdqa (%rdi), %ymm01527; AVX2-NEXT:    vmovdqa (%rsi), %ymm11528; AVX2-NEXT:    vpmaxuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm21529; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm21530; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01531; AVX2-NEXT:    vmovdqa %ymm0, (%rdx)1532; AVX2-NEXT:    vzeroupper1533; AVX2-NEXT:    retq1534;1535; AVX512F-LABEL: store_blend_load_v16i16:1536; AVX512F:       # %bb.0:1537; AVX512F-NEXT:    vmovdqa (%rdi), %ymm01538; AVX512F-NEXT:    vmovdqa (%rsi), %ymm11539; AVX512F-NEXT:    vpmaxuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm21540; AVX512F-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm21541; AVX512F-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01542; AVX512F-NEXT:    vmovdqa %ymm0, (%rdx)1543; AVX512F-NEXT:    vzeroupper1544; AVX512F-NEXT:    retq1545;1546; AVX512VL-LABEL: store_blend_load_v16i16:1547; AVX512VL:       # %bb.0:1548; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm01549; AVX512VL-NEXT:    vpmaxuw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11550; AVX512VL-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm11551; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm1 = mem ^ (ymm1 & (ymm0 ^ mem))1552; AVX512VL-NEXT:    vmovdqa %ymm1, (%rdx)1553; AVX512VL-NEXT:    vzeroupper1554; AVX512VL-NEXT:    retq1555;1556; XOP-LABEL: store_blend_load_v16i16:1557; XOP:       # %bb.0:1558; XOP-NEXT:    vmovdqa (%rdi), %ymm01559; XOP-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]1560; XOP-NEXT:    vpcomltuw 16(%rdi), %xmm1, %xmm21561; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm11562; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11563; XOP-NEXT:    vpcmov %ymm1, (%rsi), %ymm0, %ymm01564; XOP-NEXT:    vmovdqa %ymm0, (%rdx)1565; XOP-NEXT:    vzeroupper1566; XOP-NEXT:    retq1567  %v0 = load <16 x i16>, ptr %a01568  %v1 = load <16 x i16>, ptr %a11569  %cmp = icmp ugt <16 x i16> %v0, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>1570  %res = select <16 x i1> %cmp, <16 x i16> %v0, <16 x i16> %v11571  store <16 x i16> %res, ptr %a21572  ret void1573}1574 1575define void @store_blend_load_v32i8(ptr %a0, ptr %a1, ptr %a2) {1576; AVX1-LABEL: store_blend_load_v32i8:1577; AVX1:       # %bb.0:1578; AVX1-NEXT:    vmovdqa (%rdi), %xmm01579; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm11580; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]1581; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm31582; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm31583; AVX1-NEXT:    vpmaxub %xmm2, %xmm1, %xmm21584; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm21585; AVX1-NEXT:    vmovdqa (%rsi), %xmm41586; AVX1-NEXT:    vmovdqa 16(%rsi), %xmm51587; AVX1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm5, %xmm11588; AVX1-NEXT:    vpblendvb %xmm3, %xmm0, %xmm4, %xmm01589; AVX1-NEXT:    vmovdqa %xmm0, (%rdx)1590; AVX1-NEXT:    vmovdqa %xmm1, 16(%rdx)1591; AVX1-NEXT:    retq1592;1593; AVX2-LABEL: store_blend_load_v32i8:1594; AVX2:       # %bb.0:1595; AVX2-NEXT:    vmovdqa (%rdi), %ymm01596; AVX2-NEXT:    vmovdqa (%rsi), %ymm11597; AVX2-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm21598; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm21599; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01600; AVX2-NEXT:    vmovdqa %ymm0, (%rdx)1601; AVX2-NEXT:    vzeroupper1602; AVX2-NEXT:    retq1603;1604; AVX512F-LABEL: store_blend_load_v32i8:1605; AVX512F:       # %bb.0:1606; AVX512F-NEXT:    vmovdqa (%rdi), %ymm01607; AVX512F-NEXT:    vmovdqa (%rsi), %ymm11608; AVX512F-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm21609; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm21610; AVX512F-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01611; AVX512F-NEXT:    vmovdqa %ymm0, (%rdx)1612; AVX512F-NEXT:    vzeroupper1613; AVX512F-NEXT:    retq1614;1615; AVX512VL-LABEL: store_blend_load_v32i8:1616; AVX512VL:       # %bb.0:1617; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm01618; AVX512VL-NEXT:    vpmaxub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm11619; AVX512VL-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm11620; AVX512VL-NEXT:    vpternlogq {{.*#+}} ymm1 = mem ^ (ymm1 & (ymm0 ^ mem))1621; AVX512VL-NEXT:    vmovdqa %ymm1, (%rdx)1622; AVX512VL-NEXT:    vzeroupper1623; AVX512VL-NEXT:    retq1624;1625; XOP-LABEL: store_blend_load_v32i8:1626; XOP:       # %bb.0:1627; XOP-NEXT:    vmovdqa (%rdi), %ymm01628; XOP-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]1629; XOP-NEXT:    vpcomltub 16(%rdi), %xmm1, %xmm21630; XOP-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm11631; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11632; XOP-NEXT:    vpcmov %ymm1, (%rsi), %ymm0, %ymm01633; XOP-NEXT:    vmovdqa %ymm0, (%rdx)1634; XOP-NEXT:    vzeroupper1635; XOP-NEXT:    retq1636  %v0 = load <32 x i8>, ptr %a01637  %v1 = load <32 x i8>, ptr %a11638  %cmp = icmp ugt <32 x i8> %v0, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>1639  %res = select <32 x i1> %cmp, <32 x i8> %v0, <32 x i8> %v11640  store <32 x i8> %res, ptr %a21641  ret void1642}1643 1644define void @PR46531(ptr %x, ptr %y, ptr %z) {1645; AVX12-LABEL: PR46531:1646; AVX12:       # %bb.0:1647; AVX12-NEXT:    vmovdqu (%rsi), %xmm01648; AVX12-NEXT:    vmovdqu (%rdx), %xmm11649; AVX12-NEXT:    vpor %xmm0, %xmm1, %xmm21650; AVX12-NEXT:    vpxor %xmm0, %xmm1, %xmm01651; AVX12-NEXT:    vpslld $31, %xmm1, %xmm11652; AVX12-NEXT:    vblendvps %xmm1, %xmm0, %xmm2, %xmm01653; AVX12-NEXT:    vmovups %xmm0, (%rdi)1654; AVX12-NEXT:    retq1655;1656; AVX512F-LABEL: PR46531:1657; AVX512F:       # %bb.0:1658; AVX512F-NEXT:    vmovdqu (%rsi), %xmm01659; AVX512F-NEXT:    vmovdqu (%rdx), %xmm11660; AVX512F-NEXT:    vpor %xmm0, %xmm1, %xmm21661; AVX512F-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %k11662; AVX512F-NEXT:    vpxor %xmm0, %xmm1, %xmm01663; AVX512F-NEXT:    vmovdqa32 %zmm2, %zmm0 {%k1}1664; AVX512F-NEXT:    vmovdqu %xmm0, (%rdi)1665; AVX512F-NEXT:    vzeroupper1666; AVX512F-NEXT:    retq1667;1668; AVX512VL-LABEL: PR46531:1669; AVX512VL:       # %bb.0:1670; AVX512VL-NEXT:    vmovdqu (%rsi), %xmm01671; AVX512VL-NEXT:    vmovdqu (%rdx), %xmm11672; AVX512VL-NEXT:    vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %k11673; AVX512VL-NEXT:    vpxor %xmm0, %xmm1, %xmm21674; AVX512VL-NEXT:    vpord %xmm0, %xmm1, %xmm2 {%k1}1675; AVX512VL-NEXT:    vmovdqu %xmm2, (%rdi)1676; AVX512VL-NEXT:    retq1677;1678; XOP-LABEL: PR46531:1679; XOP:       # %bb.0:1680; XOP-NEXT:    vmovdqu (%rsi), %xmm01681; XOP-NEXT:    vmovdqu (%rdx), %xmm11682; XOP-NEXT:    vpor %xmm0, %xmm1, %xmm21683; XOP-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm31684; XOP-NEXT:    vpxor %xmm4, %xmm4, %xmm41685; XOP-NEXT:    vpcomneqd %xmm4, %xmm3, %xmm31686; XOP-NEXT:    vpxor %xmm0, %xmm1, %xmm01687; XOP-NEXT:    vblendvps %xmm3, %xmm0, %xmm2, %xmm01688; XOP-NEXT:    vmovups %xmm0, (%rdi)1689; XOP-NEXT:    retq1690  %a = load <4 x i32>, ptr %y, align 41691  %b = load <4 x i32>, ptr %z, align 41692  %or = or <4 x i32> %b, %a1693  %and = and <4 x i32> %b, <i32 1, i32 1, i32 1, i32 1>1694  %cmp = icmp eq <4 x i32> %and, zeroinitializer1695  %xor = xor <4 x i32> %b, %a1696  %sel = select <4 x i1> %cmp, <4 x i32> %or, <4 x i32> %xor1697  store <4 x i32> %sel, ptr %x, align 41698  ret void1699}1700 1701define <64 x i8> @PR110875(<32 x i8> %a0, <32 x i8> %a1, i64 %a2) {1702; AVX1-LABEL: PR110875:1703; AVX1:       # %bb.0:1704; AVX1-NEXT:    vmovq %rdi, %xmm21705; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1706; AVX1-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm2[0,1,2,3,4,4,5,5]1707; AVX1-NEXT:    vpshufhw {{.*#+}} xmm4 = xmm2[0,1,2,3,6,6,7,7]1708; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31709; AVX1-NEXT:    vshufps {{.*#+}} ymm3 = ymm3[2,2,3,3,6,6,7,7]1710; AVX1-NEXT:    vpshuflw {{.*#+}} xmm4 = xmm2[0,0,1,1,4,5,6,7]1711; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm2[2,2,3,3,4,5,6,7]1712; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm21713; AVX1-NEXT:    vshufps {{.*#+}} ymm2 = ymm2[0,0,1,1,4,4,5,5]1714; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1715; AVX1-NEXT:    vandps %ymm4, %ymm2, %ymm21716; AVX1-NEXT:    vandps %ymm4, %ymm3, %ymm31717; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm41718; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm51719; AVX1-NEXT:    vpcmpeqb %xmm5, %xmm4, %xmm41720; AVX1-NEXT:    vpcmpeqb %xmm5, %xmm3, %xmm31721; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31722; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm41723; AVX1-NEXT:    vpcmpeqb %xmm5, %xmm4, %xmm41724; AVX1-NEXT:    vpcmpeqb %xmm5, %xmm2, %xmm21725; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm21726; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm4 = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]1727; AVX1-NEXT:    vandnps %ymm4, %ymm2, %ymm51728; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01729; AVX1-NEXT:    vorps %ymm5, %ymm0, %ymm01730; AVX1-NEXT:    vandnps %ymm4, %ymm3, %ymm21731; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm11732; AVX1-NEXT:    vorps %ymm2, %ymm1, %ymm11733; AVX1-NEXT:    retq1734;1735; AVX2-LABEL: PR110875:1736; AVX2:       # %bb.0:1737; AVX2-NEXT:    vmovq %rdi, %xmm21738; AVX2-NEXT:    vpbroadcastq %xmm2, %ymm21739; AVX2-NEXT:    vpshufb {{.*#+}} ymm3 = ymm2[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19]1740; AVX2-NEXT:    vpshufb {{.*#+}} ymm2 = ymm2[4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23]1741; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1742; AVX2-NEXT:    vpand %ymm4, %ymm2, %ymm21743; AVX2-NEXT:    vpand %ymm4, %ymm3, %ymm31744; AVX2-NEXT:    vpcmpeqb %ymm4, %ymm3, %ymm31745; AVX2-NEXT:    vpbroadcastb {{.*#+}} ymm5 = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]1746; AVX2-NEXT:    vpblendvb %ymm3, %ymm5, %ymm0, %ymm01747; AVX2-NEXT:    vpcmpeqb %ymm4, %ymm2, %ymm21748; AVX2-NEXT:    vpblendvb %ymm2, %ymm5, %ymm1, %ymm11749; AVX2-NEXT:    retq1750;1751; AVX512F-LABEL: PR110875:1752; AVX512F:       # %bb.0:1753; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01754; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm11755; AVX512F-NEXT:    vmovq %rdi, %xmm01756; AVX512F-NEXT:    vpbroadcastq %xmm0, %ymm01757; AVX512F-NEXT:    vpshufb {{.*#+}} ymm2 = ymm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19]1758; AVX512F-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23]1759; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm01760; AVX512F-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01761; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm21762; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm31763; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm21764; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm01765; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01766; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = m32bcst ^ (zmm0 & (zmm1 ^ m32bcst))1767; AVX512F-NEXT:    retq1768;1769; AVX512VL-LABEL: PR110875:1770; AVX512VL:       # %bb.0:1771; AVX512VL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01772; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm11773; AVX512VL-NEXT:    vpbroadcastq %rdi, %ymm01774; AVX512VL-NEXT:    vpshufb {{.*#+}} ymm2 = ymm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19]1775; AVX512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23]1776; AVX512VL-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm01777; AVX512VL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm01778; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21779; AVX512VL-NEXT:    vpxor %xmm3, %xmm3, %xmm31780; AVX512VL-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm21781; AVX512VL-NEXT:    vpcmpeqb %ymm3, %ymm0, %ymm01782; AVX512VL-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm01783; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 = m32bcst ^ (zmm0 & (zmm1 ^ m32bcst))1784; AVX512VL-NEXT:    retq1785;1786; XOP-LABEL: PR110875:1787; XOP:       # %bb.0:1788; XOP-NEXT:    vmovq %rdi, %xmm21789; XOP-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1790; XOP-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm2[0,1,2,3,4,4,5,5]1791; XOP-NEXT:    vpshufhw {{.*#+}} xmm4 = xmm2[0,1,2,3,6,6,7,7]1792; XOP-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31793; XOP-NEXT:    vshufps {{.*#+}} ymm3 = ymm3[2,2,3,3,6,6,7,7]1794; XOP-NEXT:    vpshuflw {{.*#+}} xmm4 = xmm2[0,0,1,1,4,5,6,7]1795; XOP-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm2[2,2,3,3,4,5,6,7]1796; XOP-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm21797; XOP-NEXT:    vshufps {{.*#+}} ymm2 = ymm2[0,0,1,1,4,4,5,5]1798; XOP-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128]1799; XOP-NEXT:    vandps %ymm4, %ymm2, %ymm21800; XOP-NEXT:    vandps %ymm4, %ymm3, %ymm31801; XOP-NEXT:    vextractf128 $1, %ymm3, %xmm41802; XOP-NEXT:    vpxor %xmm5, %xmm5, %xmm51803; XOP-NEXT:    vpcomeqb %xmm5, %xmm4, %xmm41804; XOP-NEXT:    vpcomeqb %xmm5, %xmm3, %xmm31805; XOP-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31806; XOP-NEXT:    vextractf128 $1, %ymm2, %xmm41807; XOP-NEXT:    vpcomeqb %xmm5, %xmm4, %xmm41808; XOP-NEXT:    vpcomeqb %xmm5, %xmm2, %xmm21809; XOP-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm21810; XOP-NEXT:    vbroadcastss {{.*#+}} ymm4 = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]1811; XOP-NEXT:    vpcmov %ymm2, %ymm4, %ymm0, %ymm01812; XOP-NEXT:    vpcmov %ymm3, %ymm4, %ymm1, %ymm11813; XOP-NEXT:    retq1814  %concat = shufflevector <32 x i8> %a0, <32 x i8> %a1, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>1815  %scl = insertelement <1 x i64> poison, i64 %a2, i64 01816  %splat = shufflevector <1 x i64> %scl, <1 x i64> poison, <8 x i32> <i32 0, i32 poison, i32 0, i32 poison, i32 0, i32 poison, i32 0, i32 poison>1817  %ref = bitcast <8 x i64> %splat to <64 x i8>1818  %shuf = shufflevector <64 x i8> %ref, <64 x i8> poison, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55>1819  %mask = and <64 x i8> %shuf, <i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 -128>1820  %cmp = icmp eq <64 x i8> %mask, zeroinitializer1821  %res = select <64 x i1> %cmp, <64 x i8> %concat, <64 x i8> <i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20, i8 20>1822  ret <64 x i8> %res1823}1824 1825attributes #0 = { "no-nans-fp-math"="true" }1826;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1827; AVX: {{.*}}1828