brintos

brintos / llvm-project-archived public Read only

0
0
Text · 176.4 KiB · da0cef0 Raw
5339 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -stack-symbol-ordering=0 -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,KNL3; RUN: llc < %s -stack-symbol-ordering=0 -mtriple=x86_64-apple-darwin -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq | FileCheck %s --check-prefixes=CHECK,SKX4; RUN: llc < %s -stack-symbol-ordering=0 -mtriple=x86_64-apple-darwin -mattr=+avx512bw  | FileCheck %s --check-prefixes=CHECK,AVX512BW5; RUN: llc < %s -stack-symbol-ordering=0 -mtriple=x86_64-apple-darwin -mattr=+avx512dq  | FileCheck %s --check-prefixes=CHECK,AVX512DQ6; RUN: llc < %s -stack-symbol-ordering=0 -mtriple=i686-apple-darwin -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq | FileCheck %s --check-prefix=X867 8 9define i16 @mask16(i16 %x) {10; CHECK-LABEL: mask16:11; CHECK:       ## %bb.0:12; CHECK-NEXT:    movl %edi, %eax13; CHECK-NEXT:    notl %eax14; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax15; CHECK-NEXT:    retq16;17; X86-LABEL: mask16:18; X86:       ## %bb.0:19; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax20; X86-NEXT:    notl %eax21; X86-NEXT:    ## kill: def $ax killed $ax killed $eax22; X86-NEXT:    retl23  %m0 = bitcast i16 %x to <16 x i1>24  %m1 = xor <16 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>25  %ret = bitcast <16 x i1> %m1 to i1626  ret i16 %ret27}28 29define i32 @mask16_zext(i16 %x) {30; CHECK-LABEL: mask16_zext:31; CHECK:       ## %bb.0:32; CHECK-NEXT:    notl %edi33; CHECK-NEXT:    movzwl %di, %eax34; CHECK-NEXT:    retq35;36; X86-LABEL: mask16_zext:37; X86:       ## %bb.0:38; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax39; X86-NEXT:    xorl $65535, %eax ## imm = 0xFFFF40; X86-NEXT:    retl41  %m0 = bitcast i16 %x to <16 x i1>42  %m1 = xor <16 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>43  %m2 = bitcast <16 x i1> %m1 to i1644  %ret = zext i16 %m2 to i3245  ret i32 %ret46}47 48define i8 @mask8(i8 %x) {49; CHECK-LABEL: mask8:50; CHECK:       ## %bb.0:51; CHECK-NEXT:    movl %edi, %eax52; CHECK-NEXT:    notb %al53; CHECK-NEXT:    ## kill: def $al killed $al killed $eax54; CHECK-NEXT:    retq55;56; X86-LABEL: mask8:57; X86:       ## %bb.0:58; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax59; X86-NEXT:    notb %al60; X86-NEXT:    retl61  %m0 = bitcast i8 %x to <8 x i1>62  %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>63  %ret = bitcast <8 x i1> %m1 to i864  ret i8 %ret65}66 67define i32 @mask8_zext(i8 %x) {68; CHECK-LABEL: mask8_zext:69; CHECK:       ## %bb.0:70; CHECK-NEXT:    notb %dil71; CHECK-NEXT:    movzbl %dil, %eax72; CHECK-NEXT:    retq73;74; X86-LABEL: mask8_zext:75; X86:       ## %bb.0:76; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax77; X86-NEXT:    xorl $255, %eax78; X86-NEXT:    retl79  %m0 = bitcast i8 %x to <8 x i1>80  %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>81  %m2 = bitcast <8 x i1> %m1 to i882  %ret = zext i8 %m2 to i3283  ret i32 %ret84}85 86define void @mask16_mem(ptr %ptr) {87; CHECK-LABEL: mask16_mem:88; CHECK:       ## %bb.0:89; CHECK-NEXT:    kmovw (%rdi), %k090; CHECK-NEXT:    knotw %k0, %k091; CHECK-NEXT:    kmovw %k0, (%rdi)92; CHECK-NEXT:    retq93;94; X86-LABEL: mask16_mem:95; X86:       ## %bb.0:96; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax97; X86-NEXT:    kmovw (%eax), %k098; X86-NEXT:    knotw %k0, %k099; X86-NEXT:    kmovw %k0, (%eax)100; X86-NEXT:    retl101  %x = load i16, ptr %ptr, align 4102  %m0 = bitcast i16 %x to <16 x i1>103  %m1 = xor <16 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>104  %ret = bitcast <16 x i1> %m1 to i16105  store i16 %ret, ptr %ptr, align 4106  ret void107}108 109define void @mask8_mem(ptr %ptr) {110; KNL-LABEL: mask8_mem:111; KNL:       ## %bb.0:112; KNL-NEXT:    notb (%rdi)113; KNL-NEXT:    retq114;115; SKX-LABEL: mask8_mem:116; SKX:       ## %bb.0:117; SKX-NEXT:    kmovb (%rdi), %k0118; SKX-NEXT:    knotb %k0, %k0119; SKX-NEXT:    kmovb %k0, (%rdi)120; SKX-NEXT:    retq121;122; AVX512BW-LABEL: mask8_mem:123; AVX512BW:       ## %bb.0:124; AVX512BW-NEXT:    notb (%rdi)125; AVX512BW-NEXT:    retq126;127; AVX512DQ-LABEL: mask8_mem:128; AVX512DQ:       ## %bb.0:129; AVX512DQ-NEXT:    kmovb (%rdi), %k0130; AVX512DQ-NEXT:    knotb %k0, %k0131; AVX512DQ-NEXT:    kmovb %k0, (%rdi)132; AVX512DQ-NEXT:    retq133;134; X86-LABEL: mask8_mem:135; X86:       ## %bb.0:136; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax137; X86-NEXT:    kmovb (%eax), %k0138; X86-NEXT:    knotb %k0, %k0139; X86-NEXT:    kmovb %k0, (%eax)140; X86-NEXT:    retl141  %x = load i8, ptr %ptr, align 4142  %m0 = bitcast i8 %x to <8 x i1>143  %m1 = xor <8 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>144  %ret = bitcast <8 x i1> %m1 to i8145  store i8 %ret, ptr %ptr, align 4146  ret void147}148 149define i16 @mand16(i16 %x, i16 %y) {150; CHECK-LABEL: mand16:151; CHECK:       ## %bb.0:152; CHECK-NEXT:    movl %edi, %eax153; CHECK-NEXT:    orl %esi, %eax154; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax155; CHECK-NEXT:    retq156;157; X86-LABEL: mand16:158; X86:       ## %bb.0:159; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax160; X86-NEXT:    orw {{[0-9]+}}(%esp), %ax161; X86-NEXT:    retl162  %ma = bitcast i16 %x to <16 x i1>163  %mb = bitcast i16 %y to <16 x i1>164  %mc = and <16 x i1> %ma, %mb165  %md = xor <16 x i1> %ma, %mb166  %me = or <16 x i1> %mc, %md167  %ret = bitcast <16 x i1> %me to i16168  ret i16 %ret169}170 171define i16 @mand16_mem(ptr %x, ptr %y) {172; KNL-LABEL: mand16_mem:173; KNL:       ## %bb.0:174; KNL-NEXT:    kmovw (%rdi), %k0175; KNL-NEXT:    kmovw (%rsi), %k1176; KNL-NEXT:    korw %k1, %k0, %k0177; KNL-NEXT:    kmovw %k0, %eax178; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax179; KNL-NEXT:    retq180;181; SKX-LABEL: mand16_mem:182; SKX:       ## %bb.0:183; SKX-NEXT:    kmovw (%rdi), %k0184; SKX-NEXT:    kmovw (%rsi), %k1185; SKX-NEXT:    korw %k1, %k0, %k0186; SKX-NEXT:    kmovd %k0, %eax187; SKX-NEXT:    ## kill: def $ax killed $ax killed $eax188; SKX-NEXT:    retq189;190; AVX512BW-LABEL: mand16_mem:191; AVX512BW:       ## %bb.0:192; AVX512BW-NEXT:    kmovw (%rdi), %k0193; AVX512BW-NEXT:    kmovw (%rsi), %k1194; AVX512BW-NEXT:    korw %k1, %k0, %k0195; AVX512BW-NEXT:    kmovd %k0, %eax196; AVX512BW-NEXT:    ## kill: def $ax killed $ax killed $eax197; AVX512BW-NEXT:    retq198;199; AVX512DQ-LABEL: mand16_mem:200; AVX512DQ:       ## %bb.0:201; AVX512DQ-NEXT:    kmovw (%rdi), %k0202; AVX512DQ-NEXT:    kmovw (%rsi), %k1203; AVX512DQ-NEXT:    korw %k1, %k0, %k0204; AVX512DQ-NEXT:    kmovw %k0, %eax205; AVX512DQ-NEXT:    ## kill: def $ax killed $ax killed $eax206; AVX512DQ-NEXT:    retq207;208; X86-LABEL: mand16_mem:209; X86:       ## %bb.0:210; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax211; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx212; X86-NEXT:    kmovw (%ecx), %k0213; X86-NEXT:    kmovw (%eax), %k1214; X86-NEXT:    korw %k1, %k0, %k0215; X86-NEXT:    kmovd %k0, %eax216; X86-NEXT:    ## kill: def $ax killed $ax killed $eax217; X86-NEXT:    retl218  %ma = load <16 x i1>, ptr %x219  %mb = load <16 x i1>, ptr %y220  %mc = and <16 x i1> %ma, %mb221  %md = xor <16 x i1> %ma, %mb222  %me = or <16 x i1> %mc, %md223  %ret = bitcast <16 x i1> %me to i16224  ret i16 %ret225}226 227define i8 @shuf_test1(i16 %v) nounwind {228; KNL-LABEL: shuf_test1:229; KNL:       ## %bb.0:230; KNL-NEXT:    kmovw %edi, %k0231; KNL-NEXT:    kshiftrw $8, %k0, %k0232; KNL-NEXT:    kmovw %k0, %eax233; KNL-NEXT:    ## kill: def $al killed $al killed $eax234; KNL-NEXT:    retq235;236; SKX-LABEL: shuf_test1:237; SKX:       ## %bb.0:238; SKX-NEXT:    kmovd %edi, %k0239; SKX-NEXT:    kshiftrw $8, %k0, %k0240; SKX-NEXT:    kmovd %k0, %eax241; SKX-NEXT:    ## kill: def $al killed $al killed $eax242; SKX-NEXT:    retq243;244; AVX512BW-LABEL: shuf_test1:245; AVX512BW:       ## %bb.0:246; AVX512BW-NEXT:    kmovd %edi, %k0247; AVX512BW-NEXT:    kshiftrw $8, %k0, %k0248; AVX512BW-NEXT:    kmovd %k0, %eax249; AVX512BW-NEXT:    ## kill: def $al killed $al killed $eax250; AVX512BW-NEXT:    retq251;252; AVX512DQ-LABEL: shuf_test1:253; AVX512DQ:       ## %bb.0:254; AVX512DQ-NEXT:    kmovw %edi, %k0255; AVX512DQ-NEXT:    kshiftrw $8, %k0, %k0256; AVX512DQ-NEXT:    kmovw %k0, %eax257; AVX512DQ-NEXT:    ## kill: def $al killed $al killed $eax258; AVX512DQ-NEXT:    retq259;260; X86-LABEL: shuf_test1:261; X86:       ## %bb.0:262; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax263; X86-NEXT:    retl264   %v1 = bitcast i16 %v to <16 x i1>265   %mask = shufflevector <16 x i1> %v1, <16 x i1> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>266   %mask1 = bitcast <8 x i1> %mask to i8267   ret i8 %mask1268}269 270define i32 @zext_test1(<16 x i32> %a, <16 x i32> %b) {271; KNL-LABEL: zext_test1:272; KNL:       ## %bb.0:273; KNL-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0274; KNL-NEXT:    kshiftrw $5, %k0, %k0275; KNL-NEXT:    kmovw %k0, %eax276; KNL-NEXT:    andl $1, %eax277; KNL-NEXT:    vzeroupper278; KNL-NEXT:    retq279;280; SKX-LABEL: zext_test1:281; SKX:       ## %bb.0:282; SKX-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0283; SKX-NEXT:    kshiftrw $5, %k0, %k0284; SKX-NEXT:    kmovd %k0, %eax285; SKX-NEXT:    andl $1, %eax286; SKX-NEXT:    vzeroupper287; SKX-NEXT:    retq288;289; AVX512BW-LABEL: zext_test1:290; AVX512BW:       ## %bb.0:291; AVX512BW-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0292; AVX512BW-NEXT:    kshiftrw $5, %k0, %k0293; AVX512BW-NEXT:    kmovd %k0, %eax294; AVX512BW-NEXT:    andl $1, %eax295; AVX512BW-NEXT:    vzeroupper296; AVX512BW-NEXT:    retq297;298; AVX512DQ-LABEL: zext_test1:299; AVX512DQ:       ## %bb.0:300; AVX512DQ-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0301; AVX512DQ-NEXT:    kshiftrw $5, %k0, %k0302; AVX512DQ-NEXT:    kmovw %k0, %eax303; AVX512DQ-NEXT:    andl $1, %eax304; AVX512DQ-NEXT:    vzeroupper305; AVX512DQ-NEXT:    retq306;307; X86-LABEL: zext_test1:308; X86:       ## %bb.0:309; X86-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0310; X86-NEXT:    kshiftrw $5, %k0, %k0311; X86-NEXT:    kmovd %k0, %eax312; X86-NEXT:    andl $1, %eax313; X86-NEXT:    vzeroupper314; X86-NEXT:    retl315  %cmp_res = icmp ugt <16 x i32> %a, %b316  %cmp_res.i1 = extractelement <16 x i1> %cmp_res, i32 5317  %res = zext i1 %cmp_res.i1 to i32318  ret i32 %res319}320 321define i16 @zext_test2(<16 x i32> %a, <16 x i32> %b) {322; KNL-LABEL: zext_test2:323; KNL:       ## %bb.0:324; KNL-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0325; KNL-NEXT:    kshiftrw $5, %k0, %k0326; KNL-NEXT:    kmovw %k0, %eax327; KNL-NEXT:    andl $1, %eax328; KNL-NEXT:    ## kill: def $ax killed $ax killed $eax329; KNL-NEXT:    vzeroupper330; KNL-NEXT:    retq331;332; SKX-LABEL: zext_test2:333; SKX:       ## %bb.0:334; SKX-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0335; SKX-NEXT:    kshiftrw $5, %k0, %k0336; SKX-NEXT:    kmovd %k0, %eax337; SKX-NEXT:    andl $1, %eax338; SKX-NEXT:    ## kill: def $ax killed $ax killed $eax339; SKX-NEXT:    vzeroupper340; SKX-NEXT:    retq341;342; AVX512BW-LABEL: zext_test2:343; AVX512BW:       ## %bb.0:344; AVX512BW-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0345; AVX512BW-NEXT:    kshiftrw $5, %k0, %k0346; AVX512BW-NEXT:    kmovd %k0, %eax347; AVX512BW-NEXT:    andl $1, %eax348; AVX512BW-NEXT:    ## kill: def $ax killed $ax killed $eax349; AVX512BW-NEXT:    vzeroupper350; AVX512BW-NEXT:    retq351;352; AVX512DQ-LABEL: zext_test2:353; AVX512DQ:       ## %bb.0:354; AVX512DQ-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0355; AVX512DQ-NEXT:    kshiftrw $5, %k0, %k0356; AVX512DQ-NEXT:    kmovw %k0, %eax357; AVX512DQ-NEXT:    andl $1, %eax358; AVX512DQ-NEXT:    ## kill: def $ax killed $ax killed $eax359; AVX512DQ-NEXT:    vzeroupper360; AVX512DQ-NEXT:    retq361;362; X86-LABEL: zext_test2:363; X86:       ## %bb.0:364; X86-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0365; X86-NEXT:    kshiftrw $5, %k0, %k0366; X86-NEXT:    kmovd %k0, %eax367; X86-NEXT:    andl $1, %eax368; X86-NEXT:    ## kill: def $ax killed $ax killed $eax369; X86-NEXT:    vzeroupper370; X86-NEXT:    retl371  %cmp_res = icmp ugt <16 x i32> %a, %b372  %cmp_res.i1 = extractelement <16 x i1> %cmp_res, i32 5373  %res = zext i1 %cmp_res.i1 to i16374  ret i16 %res375}376 377define i8 @zext_test3(<16 x i32> %a, <16 x i32> %b) {378; KNL-LABEL: zext_test3:379; KNL:       ## %bb.0:380; KNL-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0381; KNL-NEXT:    kshiftrw $5, %k0, %k0382; KNL-NEXT:    kmovw %k0, %eax383; KNL-NEXT:    andb $1, %al384; KNL-NEXT:    ## kill: def $al killed $al killed $eax385; KNL-NEXT:    vzeroupper386; KNL-NEXT:    retq387;388; SKX-LABEL: zext_test3:389; SKX:       ## %bb.0:390; SKX-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0391; SKX-NEXT:    kshiftrw $5, %k0, %k0392; SKX-NEXT:    kmovd %k0, %eax393; SKX-NEXT:    andb $1, %al394; SKX-NEXT:    ## kill: def $al killed $al killed $eax395; SKX-NEXT:    vzeroupper396; SKX-NEXT:    retq397;398; AVX512BW-LABEL: zext_test3:399; AVX512BW:       ## %bb.0:400; AVX512BW-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0401; AVX512BW-NEXT:    kshiftrw $5, %k0, %k0402; AVX512BW-NEXT:    kmovd %k0, %eax403; AVX512BW-NEXT:    andb $1, %al404; AVX512BW-NEXT:    ## kill: def $al killed $al killed $eax405; AVX512BW-NEXT:    vzeroupper406; AVX512BW-NEXT:    retq407;408; AVX512DQ-LABEL: zext_test3:409; AVX512DQ:       ## %bb.0:410; AVX512DQ-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0411; AVX512DQ-NEXT:    kshiftrw $5, %k0, %k0412; AVX512DQ-NEXT:    kmovw %k0, %eax413; AVX512DQ-NEXT:    andb $1, %al414; AVX512DQ-NEXT:    ## kill: def $al killed $al killed $eax415; AVX512DQ-NEXT:    vzeroupper416; AVX512DQ-NEXT:    retq417;418; X86-LABEL: zext_test3:419; X86:       ## %bb.0:420; X86-NEXT:    vpcmpnleud %zmm1, %zmm0, %k0421; X86-NEXT:    kshiftrw $5, %k0, %k0422; X86-NEXT:    kmovd %k0, %eax423; X86-NEXT:    andb $1, %al424; X86-NEXT:    ## kill: def $al killed $al killed $eax425; X86-NEXT:    vzeroupper426; X86-NEXT:    retl427  %cmp_res = icmp ugt <16 x i32> %a, %b428  %cmp_res.i1 = extractelement <16 x i1> %cmp_res, i32 5429  %res = zext i1 %cmp_res.i1 to i8430  ret i8 %res431}432 433define i8 @conv1(ptr %R) {434; CHECK-LABEL: conv1:435; CHECK:       ## %bb.0: ## %entry436; CHECK-NEXT:    movb $-1, (%rdi)437; CHECK-NEXT:    movb $-2, -{{[0-9]+}}(%rsp)438; CHECK-NEXT:    movb $-2, %al439; CHECK-NEXT:    retq440;441; X86-LABEL: conv1:442; X86:       ## %bb.0: ## %entry443; X86-NEXT:    pushl %eax444; X86-NEXT:    .cfi_def_cfa_offset 8445; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax446; X86-NEXT:    movb $-1, (%eax)447; X86-NEXT:    movb $-2, {{[0-9]+}}(%esp)448; X86-NEXT:    movb $-2, %al449; X86-NEXT:    popl %ecx450; X86-NEXT:    retl451entry:452  store <8 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>, ptr %R453 454  %maskPtr = alloca <8 x i1>455  store <8 x i1> <i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>, ptr %maskPtr456  %mask = load <8 x i1>, ptr %maskPtr457  %mask_convert = bitcast <8 x i1> %mask to i8458  ret i8 %mask_convert459}460 461define <4 x i32> @test4(<4 x i64> %x, <4 x i64> %y, <4 x i64> %x1, <4 x i64> %y1) {462; KNL-LABEL: test4:463; KNL:       ## %bb.0:464; KNL-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm3465; KNL-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm2466; KNL-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1467; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0468; KNL-NEXT:    vpcmpgtq %zmm3, %zmm2, %k1469; KNL-NEXT:    vpcmpleq %zmm1, %zmm0, %k1 {%k1}470; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1471; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0472; KNL-NEXT:    vzeroupper473; KNL-NEXT:    retq474;475; SKX-LABEL: test4:476; SKX:       ## %bb.0:477; SKX-NEXT:    vpcmpgtq %ymm3, %ymm2, %k1478; SKX-NEXT:    vpcmpleq %ymm1, %ymm0, %k0 {%k1}479; SKX-NEXT:    vpmovm2d %k0, %xmm0480; SKX-NEXT:    vzeroupper481; SKX-NEXT:    retq482;483; AVX512BW-LABEL: test4:484; AVX512BW:       ## %bb.0:485; AVX512BW-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm3486; AVX512BW-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm2487; AVX512BW-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1488; AVX512BW-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0489; AVX512BW-NEXT:    vpcmpgtq %zmm3, %zmm2, %k1490; AVX512BW-NEXT:    vpcmpleq %zmm1, %zmm0, %k1 {%k1}491; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1492; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0493; AVX512BW-NEXT:    vzeroupper494; AVX512BW-NEXT:    retq495;496; AVX512DQ-LABEL: test4:497; AVX512DQ:       ## %bb.0:498; AVX512DQ-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm3499; AVX512DQ-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm2500; AVX512DQ-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1501; AVX512DQ-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0502; AVX512DQ-NEXT:    vpcmpgtq %zmm3, %zmm2, %k1503; AVX512DQ-NEXT:    vpcmpleq %zmm1, %zmm0, %k0 {%k1}504; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0505; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0506; AVX512DQ-NEXT:    vzeroupper507; AVX512DQ-NEXT:    retq508;509; X86-LABEL: test4:510; X86:       ## %bb.0:511; X86-NEXT:    vpcmpgtq %ymm3, %ymm2, %k1512; X86-NEXT:    vpcmpleq %ymm1, %ymm0, %k0 {%k1}513; X86-NEXT:    vpmovm2d %k0, %xmm0514; X86-NEXT:    vzeroupper515; X86-NEXT:    retl516  %x_gt_y = icmp sgt <4 x i64> %x, %y517  %x1_gt_y1 = icmp sgt <4 x i64> %x1, %y1518  %res = icmp sgt <4 x i1>%x_gt_y, %x1_gt_y1519  %resse = sext <4 x i1>%res to <4 x i32>520  ret <4 x i32> %resse521}522 523define <2 x i64> @test5(<2 x i64> %x, <2 x i64> %y, <2 x i64> %x1, <2 x i64> %y1) {524; KNL-LABEL: test5:525; KNL:       ## %bb.0:526; KNL-NEXT:    ## kill: def $xmm3 killed $xmm3 def $zmm3527; KNL-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2528; KNL-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1529; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0530; KNL-NEXT:    vpcmpgtq %zmm0, %zmm1, %k1531; KNL-NEXT:    vpcmpleq %zmm3, %zmm2, %k1 {%k1}532; KNL-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1533; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0534; KNL-NEXT:    vzeroupper535; KNL-NEXT:    retq536;537; SKX-LABEL: test5:538; SKX:       ## %bb.0:539; SKX-NEXT:    vpcmpgtq %xmm0, %xmm1, %k1540; SKX-NEXT:    vpcmpleq %xmm3, %xmm2, %k0 {%k1}541; SKX-NEXT:    vpmovm2q %k0, %xmm0542; SKX-NEXT:    retq543;544; AVX512BW-LABEL: test5:545; AVX512BW:       ## %bb.0:546; AVX512BW-NEXT:    ## kill: def $xmm3 killed $xmm3 def $zmm3547; AVX512BW-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2548; AVX512BW-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1549; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0550; AVX512BW-NEXT:    vpcmpgtq %zmm0, %zmm1, %k1551; AVX512BW-NEXT:    vpcmpleq %zmm3, %zmm2, %k1 {%k1}552; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -1553; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0554; AVX512BW-NEXT:    vzeroupper555; AVX512BW-NEXT:    retq556;557; AVX512DQ-LABEL: test5:558; AVX512DQ:       ## %bb.0:559; AVX512DQ-NEXT:    ## kill: def $xmm3 killed $xmm3 def $zmm3560; AVX512DQ-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2561; AVX512DQ-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1562; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0563; AVX512DQ-NEXT:    vpcmpgtq %zmm0, %zmm1, %k1564; AVX512DQ-NEXT:    vpcmpleq %zmm3, %zmm2, %k0 {%k1}565; AVX512DQ-NEXT:    vpmovm2q %k0, %zmm0566; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0567; AVX512DQ-NEXT:    vzeroupper568; AVX512DQ-NEXT:    retq569;570; X86-LABEL: test5:571; X86:       ## %bb.0:572; X86-NEXT:    vpcmpgtq %xmm0, %xmm1, %k1573; X86-NEXT:    vpcmpleq %xmm3, %xmm2, %k0 {%k1}574; X86-NEXT:    vpmovm2q %k0, %xmm0575; X86-NEXT:    retl576  %x_gt_y = icmp slt <2 x i64> %x, %y577  %x1_gt_y1 = icmp sgt <2 x i64> %x1, %y1578  %res = icmp slt <2 x i1>%x_gt_y, %x1_gt_y1579  %resse = sext <2 x i1>%res to <2 x i64>580  ret <2 x i64> %resse581}582 583define void @test6(<16 x i1> %mask)  {584; CHECK-LABEL: test6:585; CHECK:       ## %bb.0: ## %allocas586; CHECK-NEXT:    vpsllw $7, %xmm0, %xmm0587; CHECK-NEXT:    vpmovmskb %xmm0, %eax588; CHECK-NEXT:    testl $21845, %eax ## imm = 0x5555589; CHECK-NEXT:    retq590;591; X86-LABEL: test6:592; X86:       ## %bb.0: ## %allocas593; X86-NEXT:    vpsllw $7, %xmm0, %xmm0594; X86-NEXT:    vpmovmskb %xmm0, %eax595; X86-NEXT:    testl $21845, %eax ## imm = 0x5555596; X86-NEXT:    retl597allocas:598  %a= and <16 x i1> %mask, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>599  %b = bitcast <16 x i1> %a to i16600  %c = icmp eq i16 %b, 0601  br i1 %c, label %true, label %false602 603true:604  ret void605 606false:607  ret void608}609 610define void @test7(<8 x i1> %mask)  {611; KNL-LABEL: test7:612; KNL:       ## %bb.0: ## %allocas613; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0614; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0615; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k0616; KNL-NEXT:    kmovw %k0, %eax617; KNL-NEXT:    orb $85, %al618; KNL-NEXT:    vzeroupper619; KNL-NEXT:    retq620;621; SKX-LABEL: test7:622; SKX:       ## %bb.0: ## %allocas623; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0624; SKX-NEXT:    vpmovw2m %xmm0, %k0625; SKX-NEXT:    kmovd %k0, %eax626; SKX-NEXT:    orb $85, %al627; SKX-NEXT:    retq628;629; AVX512BW-LABEL: test7:630; AVX512BW:       ## %bb.0: ## %allocas631; AVX512BW-NEXT:    vpsllw $15, %xmm0, %xmm0632; AVX512BW-NEXT:    vpmovw2m %zmm0, %k0633; AVX512BW-NEXT:    kmovd %k0, %eax634; AVX512BW-NEXT:    orb $85, %al635; AVX512BW-NEXT:    vzeroupper636; AVX512BW-NEXT:    retq637;638; AVX512DQ-LABEL: test7:639; AVX512DQ:       ## %bb.0: ## %allocas640; AVX512DQ-NEXT:    vpmovsxwq %xmm0, %zmm0641; AVX512DQ-NEXT:    vpsllq $63, %zmm0, %zmm0642; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k0643; AVX512DQ-NEXT:    kmovw %k0, %eax644; AVX512DQ-NEXT:    orb $85, %al645; AVX512DQ-NEXT:    vzeroupper646; AVX512DQ-NEXT:    retq647;648; X86-LABEL: test7:649; X86:       ## %bb.0: ## %allocas650; X86-NEXT:    vpsllw $15, %xmm0, %xmm0651; X86-NEXT:    vpmovw2m %xmm0, %k0652; X86-NEXT:    kmovd %k0, %eax653; X86-NEXT:    orb $85, %al654; X86-NEXT:    retl655allocas:656  %a= or <8 x i1> %mask, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>657  %b = bitcast <8 x i1> %a to i8658  %c = icmp eq i8 %b, 0659  br i1 %c, label %true, label %false660 661true:662  ret void663 664false:665  ret void666}667 668define <16 x i8> @test8(<16 x i32>%a, <16 x i32>%b, i32 %a1, i32 %b1) {669; KNL-LABEL: test8:670; KNL:       ## %bb.0:671; KNL-NEXT:    cmpl %esi, %edi672; KNL-NEXT:    jg LBB17_1673; KNL-NEXT:  ## %bb.2:674; KNL-NEXT:    kxorw %k0, %k0, %k1675; KNL-NEXT:    jmp LBB17_3676; KNL-NEXT:  LBB17_1:677; KNL-NEXT:    vpxor %xmm1, %xmm1, %xmm1678; KNL-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1679; KNL-NEXT:  LBB17_3:680; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1681; KNL-NEXT:    vpmovdb %zmm0, %xmm0682; KNL-NEXT:    vzeroupper683; KNL-NEXT:    retq684;685; SKX-LABEL: test8:686; SKX:       ## %bb.0:687; SKX-NEXT:    cmpl %esi, %edi688; SKX-NEXT:    jg LBB17_1689; SKX-NEXT:  ## %bb.2:690; SKX-NEXT:    kxorw %k0, %k0, %k0691; SKX-NEXT:    vpmovm2b %k0, %xmm0692; SKX-NEXT:    vzeroupper693; SKX-NEXT:    retq694; SKX-NEXT:  LBB17_1:695; SKX-NEXT:    vpxor %xmm1, %xmm1, %xmm1696; SKX-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0697; SKX-NEXT:    vpmovm2b %k0, %xmm0698; SKX-NEXT:    vzeroupper699; SKX-NEXT:    retq700;701; AVX512BW-LABEL: test8:702; AVX512BW:       ## %bb.0:703; AVX512BW-NEXT:    cmpl %esi, %edi704; AVX512BW-NEXT:    jg LBB17_1705; AVX512BW-NEXT:  ## %bb.2:706; AVX512BW-NEXT:    kxorw %k0, %k0, %k0707; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0708; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0709; AVX512BW-NEXT:    vzeroupper710; AVX512BW-NEXT:    retq711; AVX512BW-NEXT:  LBB17_1:712; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1713; AVX512BW-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0714; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0715; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0716; AVX512BW-NEXT:    vzeroupper717; AVX512BW-NEXT:    retq718;719; AVX512DQ-LABEL: test8:720; AVX512DQ:       ## %bb.0:721; AVX512DQ-NEXT:    cmpl %esi, %edi722; AVX512DQ-NEXT:    jg LBB17_1723; AVX512DQ-NEXT:  ## %bb.2:724; AVX512DQ-NEXT:    kxorw %k0, %k0, %k0725; AVX512DQ-NEXT:    jmp LBB17_3726; AVX512DQ-NEXT:  LBB17_1:727; AVX512DQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1728; AVX512DQ-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0729; AVX512DQ-NEXT:  LBB17_3:730; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0731; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0732; AVX512DQ-NEXT:    vzeroupper733; AVX512DQ-NEXT:    retq734;735; X86-LABEL: test8:736; X86:       ## %bb.0:737; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax738; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax739; X86-NEXT:    jg LBB17_1740; X86-NEXT:  ## %bb.2:741; X86-NEXT:    kxorw %k0, %k0, %k0742; X86-NEXT:    vpmovm2b %k0, %xmm0743; X86-NEXT:    vzeroupper744; X86-NEXT:    retl745; X86-NEXT:  LBB17_1:746; X86-NEXT:    vpxor %xmm1, %xmm1, %xmm1747; X86-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0748; X86-NEXT:    vpmovm2b %k0, %xmm0749; X86-NEXT:    vzeroupper750; X86-NEXT:    retl751  %cond = icmp sgt i32 %a1, %b1752  %cmp1 = icmp sgt <16 x i32> %a, zeroinitializer753  %cmp2 = icmp ult <16 x i32> %b, zeroinitializer754  %mix = select i1 %cond, <16 x i1> %cmp1, <16 x i1> %cmp2755  %res = sext <16 x i1> %mix to <16 x i8>756  ret <16 x i8> %res757}758 759define <16 x i1> @test9(<16 x i1>%a, <16 x i1>%b, i32 %a1, i32 %b1) {760; KNL-LABEL: test9:761; KNL:       ## %bb.0:762; KNL-NEXT:    cmpl %esi, %edi763; KNL-NEXT:    jg LBB18_1764; KNL-NEXT:  ## %bb.2:765; KNL-NEXT:    vpmovsxbd %xmm1, %zmm0766; KNL-NEXT:    jmp LBB18_3767; KNL-NEXT:  LBB18_1:768; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0769; KNL-NEXT:  LBB18_3:770; KNL-NEXT:    vpslld $31, %zmm0, %zmm0771; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1772; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1773; KNL-NEXT:    vpmovdb %zmm0, %xmm0774; KNL-NEXT:    vzeroupper775; KNL-NEXT:    retq776;777; SKX-LABEL: test9:778; SKX:       ## %bb.0:779; SKX-NEXT:    cmpl %esi, %edi780; SKX-NEXT:    jg LBB18_1781; SKX-NEXT:  ## %bb.2:782; SKX-NEXT:    vpsllw $7, %xmm1, %xmm0783; SKX-NEXT:    jmp LBB18_3784; SKX-NEXT:  LBB18_1:785; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0786; SKX-NEXT:  LBB18_3:787; SKX-NEXT:    vpmovb2m %xmm0, %k0788; SKX-NEXT:    vpmovm2b %k0, %xmm0789; SKX-NEXT:    retq790;791; AVX512BW-LABEL: test9:792; AVX512BW:       ## %bb.0:793; AVX512BW-NEXT:    cmpl %esi, %edi794; AVX512BW-NEXT:    jg LBB18_1795; AVX512BW-NEXT:  ## %bb.2:796; AVX512BW-NEXT:    vpsllw $7, %xmm1, %xmm0797; AVX512BW-NEXT:    jmp LBB18_3798; AVX512BW-NEXT:  LBB18_1:799; AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm0800; AVX512BW-NEXT:  LBB18_3:801; AVX512BW-NEXT:    vpmovb2m %zmm0, %k0802; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0803; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0804; AVX512BW-NEXT:    vzeroupper805; AVX512BW-NEXT:    retq806;807; AVX512DQ-LABEL: test9:808; AVX512DQ:       ## %bb.0:809; AVX512DQ-NEXT:    cmpl %esi, %edi810; AVX512DQ-NEXT:    jg LBB18_1811; AVX512DQ-NEXT:  ## %bb.2:812; AVX512DQ-NEXT:    vpmovsxbd %xmm1, %zmm0813; AVX512DQ-NEXT:    jmp LBB18_3814; AVX512DQ-NEXT:  LBB18_1:815; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm0816; AVX512DQ-NEXT:  LBB18_3:817; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm0818; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k0819; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0820; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm0821; AVX512DQ-NEXT:    vzeroupper822; AVX512DQ-NEXT:    retq823;824; X86-LABEL: test9:825; X86:       ## %bb.0:826; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax827; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax828; X86-NEXT:    jg LBB18_1829; X86-NEXT:  ## %bb.2:830; X86-NEXT:    vpsllw $7, %xmm1, %xmm0831; X86-NEXT:    jmp LBB18_3832; X86-NEXT:  LBB18_1:833; X86-NEXT:    vpsllw $7, %xmm0, %xmm0834; X86-NEXT:  LBB18_3:835; X86-NEXT:    vpmovb2m %xmm0, %k0836; X86-NEXT:    vpmovm2b %k0, %xmm0837; X86-NEXT:    retl838  %mask = icmp sgt i32 %a1, %b1839  %c = select i1 %mask, <16 x i1>%a, <16 x i1>%b840  ret <16 x i1>%c841}842 843define <8 x i1> @test10(<8 x i1>%a, <8 x i1>%b, i32 %a1, i32 %b1) {844; KNL-LABEL: test10:845; KNL:       ## %bb.0:846; KNL-NEXT:    cmpl %esi, %edi847; KNL-NEXT:    jg LBB19_1848; KNL-NEXT:  ## %bb.2:849; KNL-NEXT:    vpmovsxwq %xmm1, %zmm0850; KNL-NEXT:    jmp LBB19_3851; KNL-NEXT:  LBB19_1:852; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0853; KNL-NEXT:  LBB19_3:854; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0855; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1856; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1857; KNL-NEXT:    vpmovdw %zmm0, %ymm0858; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0859; KNL-NEXT:    vzeroupper860; KNL-NEXT:    retq861;862; SKX-LABEL: test10:863; SKX:       ## %bb.0:864; SKX-NEXT:    cmpl %esi, %edi865; SKX-NEXT:    jg LBB19_1866; SKX-NEXT:  ## %bb.2:867; SKX-NEXT:    vpsllw $15, %xmm1, %xmm0868; SKX-NEXT:    jmp LBB19_3869; SKX-NEXT:  LBB19_1:870; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0871; SKX-NEXT:  LBB19_3:872; SKX-NEXT:    vpmovw2m %xmm0, %k0873; SKX-NEXT:    vpmovm2w %k0, %xmm0874; SKX-NEXT:    retq875;876; AVX512BW-LABEL: test10:877; AVX512BW:       ## %bb.0:878; AVX512BW-NEXT:    cmpl %esi, %edi879; AVX512BW-NEXT:    jg LBB19_1880; AVX512BW-NEXT:  ## %bb.2:881; AVX512BW-NEXT:    vpsllw $15, %xmm1, %xmm0882; AVX512BW-NEXT:    jmp LBB19_3883; AVX512BW-NEXT:  LBB19_1:884; AVX512BW-NEXT:    vpsllw $15, %xmm0, %xmm0885; AVX512BW-NEXT:  LBB19_3:886; AVX512BW-NEXT:    vpmovw2m %zmm0, %k0887; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0888; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0889; AVX512BW-NEXT:    vzeroupper890; AVX512BW-NEXT:    retq891;892; AVX512DQ-LABEL: test10:893; AVX512DQ:       ## %bb.0:894; AVX512DQ-NEXT:    cmpl %esi, %edi895; AVX512DQ-NEXT:    jg LBB19_1896; AVX512DQ-NEXT:  ## %bb.2:897; AVX512DQ-NEXT:    vpmovsxwq %xmm1, %zmm0898; AVX512DQ-NEXT:    jmp LBB19_3899; AVX512DQ-NEXT:  LBB19_1:900; AVX512DQ-NEXT:    vpmovsxwq %xmm0, %zmm0901; AVX512DQ-NEXT:  LBB19_3:902; AVX512DQ-NEXT:    vpsllq $63, %zmm0, %zmm0903; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k0904; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0905; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0906; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0907; AVX512DQ-NEXT:    vzeroupper908; AVX512DQ-NEXT:    retq909;910; X86-LABEL: test10:911; X86:       ## %bb.0:912; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax913; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax914; X86-NEXT:    jg LBB19_1915; X86-NEXT:  ## %bb.2:916; X86-NEXT:    vpsllw $15, %xmm1, %xmm0917; X86-NEXT:    jmp LBB19_3918; X86-NEXT:  LBB19_1:919; X86-NEXT:    vpsllw $15, %xmm0, %xmm0920; X86-NEXT:  LBB19_3:921; X86-NEXT:    vpmovw2m %xmm0, %k0922; X86-NEXT:    vpmovm2w %k0, %xmm0923; X86-NEXT:    retl924  %mask = icmp sgt i32 %a1, %b1925  %c = select i1 %mask, <8 x i1>%a, <8 x i1>%b926  ret <8 x i1>%c927}928 929define <4 x i1> @test11(<4 x i1>%a, <4 x i1>%b, i32 %a1, i32 %b1) {930; KNL-LABEL: test11:931; KNL:       ## %bb.0:932; KNL-NEXT:    cmpl %esi, %edi933; KNL-NEXT:    jg LBB20_1934; KNL-NEXT:  ## %bb.2:935; KNL-NEXT:    vpslld $31, %xmm1, %xmm0936; KNL-NEXT:    jmp LBB20_3937; KNL-NEXT:  LBB20_1:938; KNL-NEXT:    vpslld $31, %xmm0, %xmm0939; KNL-NEXT:  LBB20_3:940; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1941; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1942; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0943; KNL-NEXT:    vzeroupper944; KNL-NEXT:    retq945;946; SKX-LABEL: test11:947; SKX:       ## %bb.0:948; SKX-NEXT:    cmpl %esi, %edi949; SKX-NEXT:    jg LBB20_1950; SKX-NEXT:  ## %bb.2:951; SKX-NEXT:    vpslld $31, %xmm1, %xmm0952; SKX-NEXT:    jmp LBB20_3953; SKX-NEXT:  LBB20_1:954; SKX-NEXT:    vpslld $31, %xmm0, %xmm0955; SKX-NEXT:  LBB20_3:956; SKX-NEXT:    vpmovd2m %xmm0, %k0957; SKX-NEXT:    vpmovm2d %k0, %xmm0958; SKX-NEXT:    retq959;960; AVX512BW-LABEL: test11:961; AVX512BW:       ## %bb.0:962; AVX512BW-NEXT:    cmpl %esi, %edi963; AVX512BW-NEXT:    jg LBB20_1964; AVX512BW-NEXT:  ## %bb.2:965; AVX512BW-NEXT:    vpslld $31, %xmm1, %xmm0966; AVX512BW-NEXT:    jmp LBB20_3967; AVX512BW-NEXT:  LBB20_1:968; AVX512BW-NEXT:    vpslld $31, %xmm0, %xmm0969; AVX512BW-NEXT:  LBB20_3:970; AVX512BW-NEXT:    vptestmd %zmm0, %zmm0, %k1971; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1972; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0973; AVX512BW-NEXT:    vzeroupper974; AVX512BW-NEXT:    retq975;976; AVX512DQ-LABEL: test11:977; AVX512DQ:       ## %bb.0:978; AVX512DQ-NEXT:    cmpl %esi, %edi979; AVX512DQ-NEXT:    jg LBB20_1980; AVX512DQ-NEXT:  ## %bb.2:981; AVX512DQ-NEXT:    vpslld $31, %xmm1, %xmm0982; AVX512DQ-NEXT:    jmp LBB20_3983; AVX512DQ-NEXT:  LBB20_1:984; AVX512DQ-NEXT:    vpslld $31, %xmm0, %xmm0985; AVX512DQ-NEXT:  LBB20_3:986; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k0987; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm0988; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0989; AVX512DQ-NEXT:    vzeroupper990; AVX512DQ-NEXT:    retq991;992; X86-LABEL: test11:993; X86:       ## %bb.0:994; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax995; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax996; X86-NEXT:    jg LBB20_1997; X86-NEXT:  ## %bb.2:998; X86-NEXT:    vpslld $31, %xmm1, %xmm0999; X86-NEXT:    jmp LBB20_31000; X86-NEXT:  LBB20_1:1001; X86-NEXT:    vpslld $31, %xmm0, %xmm01002; X86-NEXT:  LBB20_3:1003; X86-NEXT:    vpmovd2m %xmm0, %k01004; X86-NEXT:    vpmovm2d %k0, %xmm01005; X86-NEXT:    retl1006  %mask = icmp sgt i32 %a1, %b11007  %c = select i1 %mask, <4 x i1>%a, <4 x i1>%b1008  ret <4 x i1>%c1009}1010 1011define i32 @test12(i32 %x, i32 %y)  {1012; CHECK-LABEL: test12:1013; CHECK:       ## %bb.0:1014; CHECK-NEXT:    movl %edi, %eax1015; CHECK-NEXT:    retq1016;1017; X86-LABEL: test12:1018; X86:       ## %bb.0:1019; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1020; X86-NEXT:    retl1021  %a = bitcast i16 21845 to <16 x i1>1022  %b = extractelement <16 x i1> %a, i32 01023  %c = select i1 %b, i32 %x, i32 %y1024  ret i32 %c1025}1026 1027define i32 @test13(i32 %x, i32 %y)  {1028; CHECK-LABEL: test13:1029; CHECK:       ## %bb.0:1030; CHECK-NEXT:    movl %esi, %eax1031; CHECK-NEXT:    retq1032;1033; X86-LABEL: test13:1034; X86:       ## %bb.0:1035; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1036; X86-NEXT:    retl1037  %a = bitcast i16 21845 to <16 x i1>1038  %b = extractelement <16 x i1> %a, i32 31039  %c = select i1 %b, i32 %x, i32 %y1040  ret i32 %c1041}1042 1043; Make sure we don't crash on a large vector.1044define i32 @test13_crash(i32 %x, i32 %y)  {1045; CHECK-LABEL: test13_crash:1046; CHECK:       ## %bb.0:1047; CHECK-NEXT:    movl %edi, %eax1048; CHECK-NEXT:    retq1049;1050; X86-LABEL: test13_crash:1051; X86:       ## %bb.0:1052; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1053; X86-NEXT:    retl1054  %a = bitcast i128 2184568686868686868686868686 to <128 x i1>1055  %b = extractelement <128 x i1> %a, i32 31056  %c = select i1 %b, i32 %x, i32 %y1057  ret i32 %c1058}1059 1060define <4 x i1> @test14()  {1061; CHECK-LABEL: test14:1062; CHECK:       ## %bb.0:1063; CHECK-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,1,0,1]1064; CHECK-NEXT:    retq1065;1066; X86-LABEL: test14:1067; X86:       ## %bb.0:1068; X86-NEXT:    vpmovsxbd {{.*#+}} xmm0 = [1,1,0,1]1069; X86-NEXT:    retl1070  %a = bitcast i16 21845 to <16 x i1>1071  %b = extractelement <16 x i1> %a, i32 21072  %c = insertelement <4 x i1> <i1 true, i1 false, i1 false, i1 true>, i1 %b, i32 11073  ret <4 x i1> %c1074}1075 1076define <16 x i1> @test15(i32 %x, i32 %y)  {1077; KNL-LABEL: test15:1078; KNL:       ## %bb.0:1079; KNL-NEXT:    cmpl %esi, %edi1080; KNL-NEXT:    movl $21845, %eax ## imm = 0x55551081; KNL-NEXT:    movl $1, %ecx1082; KNL-NEXT:    cmovgl %eax, %ecx1083; KNL-NEXT:    kmovw %ecx, %k11084; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11085; KNL-NEXT:    vpmovdb %zmm0, %xmm01086; KNL-NEXT:    vzeroupper1087; KNL-NEXT:    retq1088;1089; SKX-LABEL: test15:1090; SKX:       ## %bb.0:1091; SKX-NEXT:    cmpl %esi, %edi1092; SKX-NEXT:    movl $21845, %eax ## imm = 0x55551093; SKX-NEXT:    movl $1, %ecx1094; SKX-NEXT:    cmovgl %eax, %ecx1095; SKX-NEXT:    kmovd %ecx, %k01096; SKX-NEXT:    vpmovm2b %k0, %xmm01097; SKX-NEXT:    retq1098;1099; AVX512BW-LABEL: test15:1100; AVX512BW:       ## %bb.0:1101; AVX512BW-NEXT:    cmpl %esi, %edi1102; AVX512BW-NEXT:    movl $21845, %eax ## imm = 0x55551103; AVX512BW-NEXT:    movl $1, %ecx1104; AVX512BW-NEXT:    cmovgl %eax, %ecx1105; AVX512BW-NEXT:    kmovd %ecx, %k01106; AVX512BW-NEXT:    vpmovm2b %k0, %zmm01107; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01108; AVX512BW-NEXT:    vzeroupper1109; AVX512BW-NEXT:    retq1110;1111; AVX512DQ-LABEL: test15:1112; AVX512DQ:       ## %bb.0:1113; AVX512DQ-NEXT:    cmpl %esi, %edi1114; AVX512DQ-NEXT:    movl $21845, %eax ## imm = 0x55551115; AVX512DQ-NEXT:    movl $1, %ecx1116; AVX512DQ-NEXT:    cmovgl %eax, %ecx1117; AVX512DQ-NEXT:    kmovw %ecx, %k01118; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm01119; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01120; AVX512DQ-NEXT:    vzeroupper1121; AVX512DQ-NEXT:    retq1122;1123; X86-LABEL: test15:1124; X86:       ## %bb.0:1125; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1126; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1127; X86-NEXT:    movl $21845, %eax ## imm = 0x55551128; X86-NEXT:    movl $1, %ecx1129; X86-NEXT:    cmovgl %eax, %ecx1130; X86-NEXT:    kmovd %ecx, %k01131; X86-NEXT:    vpmovm2b %k0, %xmm01132; X86-NEXT:    retl1133  %a = bitcast i16 21845 to <16 x i1>1134  %b = bitcast i16 1 to <16 x i1>1135  %mask = icmp sgt i32 %x, %y1136  %c = select i1 %mask, <16 x i1> %a, <16 x i1> %b1137  ret <16 x i1> %c1138}1139 1140define <64 x i8> @test16(i64 %x) {1141;1142; KNL-LABEL: test16:1143; KNL:       ## %bb.0:1144; KNL-NEXT:    movq %rdi, %rax1145; KNL-NEXT:    movl %edi, %ecx1146; KNL-NEXT:    kmovw %edi, %k01147; KNL-NEXT:    shrq $32, %rdi1148; KNL-NEXT:    shrq $48, %rax1149; KNL-NEXT:    shrl $16, %ecx1150; KNL-NEXT:    kmovw %ecx, %k11151; KNL-NEXT:    kmovw %eax, %k21152; KNL-NEXT:    kmovw %edi, %k31153; KNL-NEXT:    movw $-33, %ax1154; KNL-NEXT:    kmovw %eax, %k41155; KNL-NEXT:    kandw %k4, %k0, %k01156; KNL-NEXT:    movb $1, %al1157; KNL-NEXT:    kmovw %eax, %k41158; KNL-NEXT:    kshiftlw $15, %k4, %k41159; KNL-NEXT:    kshiftrw $10, %k4, %k41160; KNL-NEXT:    korw %k4, %k0, %k41161; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k3} {z} = -11162; KNL-NEXT:    vpmovdb %zmm0, %xmm01163; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k2} {z} = -11164; KNL-NEXT:    vpmovdb %zmm1, %xmm11165; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01166; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k4} {z} = -11167; KNL-NEXT:    vpmovdb %zmm1, %xmm11168; KNL-NEXT:    vpternlogd {{.*#+}} zmm2 {%k1} {z} = -11169; KNL-NEXT:    vpmovdb %zmm2, %xmm21170; KNL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm11171; KNL-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm01172; KNL-NEXT:    retq1173;1174; SKX-LABEL: test16:1175; SKX:       ## %bb.0:1176; SKX-NEXT:    kmovq %rdi, %k01177; SKX-NEXT:    movq $-33, %rax1178; SKX-NEXT:    kmovq %rax, %k11179; SKX-NEXT:    kandq %k1, %k0, %k01180; SKX-NEXT:    movb $1, %al1181; SKX-NEXT:    kmovd %eax, %k11182; SKX-NEXT:    kshiftlq $63, %k1, %k11183; SKX-NEXT:    kshiftrq $58, %k1, %k11184; SKX-NEXT:    korq %k1, %k0, %k01185; SKX-NEXT:    vpmovm2b %k0, %zmm01186; SKX-NEXT:    retq1187;1188; AVX512BW-LABEL: test16:1189; AVX512BW:       ## %bb.0:1190; AVX512BW-NEXT:    kmovq %rdi, %k01191; AVX512BW-NEXT:    movq $-33, %rax1192; AVX512BW-NEXT:    kmovq %rax, %k11193; AVX512BW-NEXT:    kandq %k1, %k0, %k01194; AVX512BW-NEXT:    movb $1, %al1195; AVX512BW-NEXT:    kmovd %eax, %k11196; AVX512BW-NEXT:    kshiftlq $63, %k1, %k11197; AVX512BW-NEXT:    kshiftrq $58, %k1, %k11198; AVX512BW-NEXT:    korq %k1, %k0, %k01199; AVX512BW-NEXT:    vpmovm2b %k0, %zmm01200; AVX512BW-NEXT:    retq1201;1202; AVX512DQ-LABEL: test16:1203; AVX512DQ:       ## %bb.0:1204; AVX512DQ-NEXT:    movq %rdi, %rax1205; AVX512DQ-NEXT:    movl %edi, %ecx1206; AVX512DQ-NEXT:    kmovw %edi, %k11207; AVX512DQ-NEXT:    shrq $32, %rdi1208; AVX512DQ-NEXT:    shrq $48, %rax1209; AVX512DQ-NEXT:    shrl $16, %ecx1210; AVX512DQ-NEXT:    kmovw %ecx, %k01211; AVX512DQ-NEXT:    kmovw %eax, %k21212; AVX512DQ-NEXT:    kmovw %edi, %k31213; AVX512DQ-NEXT:    movw $-33, %ax1214; AVX512DQ-NEXT:    kmovw %eax, %k41215; AVX512DQ-NEXT:    kandw %k4, %k1, %k11216; AVX512DQ-NEXT:    movb $1, %al1217; AVX512DQ-NEXT:    kmovw %eax, %k41218; AVX512DQ-NEXT:    kshiftlw $15, %k4, %k41219; AVX512DQ-NEXT:    kshiftrw $10, %k4, %k41220; AVX512DQ-NEXT:    korw %k4, %k1, %k11221; AVX512DQ-NEXT:    vpmovm2d %k3, %zmm01222; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01223; AVX512DQ-NEXT:    vpmovm2d %k2, %zmm11224; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm11225; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01226; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm11227; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm11228; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm21229; AVX512DQ-NEXT:    vpmovdb %zmm2, %xmm21230; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm11231; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm01232; AVX512DQ-NEXT:    retq1233;1234; X86-LABEL: test16:1235; X86:       ## %bb.0:1236; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k01237; X86-NEXT:    kshiftrq $6, %k0, %k11238; X86-NEXT:    kshiftlq $6, %k1, %k11239; X86-NEXT:    kshiftlq $59, %k0, %k01240; X86-NEXT:    kshiftrq $59, %k0, %k01241; X86-NEXT:    korq %k1, %k0, %k01242; X86-NEXT:    movb $1, %al1243; X86-NEXT:    kmovd %eax, %k11244; X86-NEXT:    kshiftlq $63, %k1, %k11245; X86-NEXT:    kshiftrq $58, %k1, %k11246; X86-NEXT:    korq %k0, %k1, %k01247; X86-NEXT:    vpmovm2b %k0, %zmm01248; X86-NEXT:    retl1249  %a = bitcast i64 %x to <64 x i1>1250  %b = insertelement <64 x i1>%a, i1 true, i32 51251  %c = sext <64 x i1>%b to <64 x i8>1252  ret <64 x i8>%c1253}1254 1255define <64 x i8> @test17(i64 %x, i32 %y, i32 %z) {1256;1257; KNL-LABEL: test17:1258; KNL:       ## %bb.0:1259; KNL-NEXT:    movq %rdi, %rax1260; KNL-NEXT:    movl %edi, %ecx1261; KNL-NEXT:    kmovw %edi, %k01262; KNL-NEXT:    shrq $32, %rdi1263; KNL-NEXT:    shrq $48, %rax1264; KNL-NEXT:    shrl $16, %ecx1265; KNL-NEXT:    kmovw %ecx, %k11266; KNL-NEXT:    kmovw %eax, %k21267; KNL-NEXT:    kmovw %edi, %k31268; KNL-NEXT:    cmpl %edx, %esi1269; KNL-NEXT:    setg %al1270; KNL-NEXT:    movw $-33, %cx1271; KNL-NEXT:    kmovw %ecx, %k41272; KNL-NEXT:    kandw %k4, %k0, %k01273; KNL-NEXT:    kmovw %eax, %k41274; KNL-NEXT:    kshiftlw $15, %k4, %k41275; KNL-NEXT:    kshiftrw $10, %k4, %k41276; KNL-NEXT:    korw %k4, %k0, %k41277; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k3} {z} = -11278; KNL-NEXT:    vpmovdb %zmm0, %xmm01279; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k2} {z} = -11280; KNL-NEXT:    vpmovdb %zmm1, %xmm11281; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01282; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k4} {z} = -11283; KNL-NEXT:    vpmovdb %zmm1, %xmm11284; KNL-NEXT:    vpternlogd {{.*#+}} zmm2 {%k1} {z} = -11285; KNL-NEXT:    vpmovdb %zmm2, %xmm21286; KNL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm11287; KNL-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm01288; KNL-NEXT:    retq1289;1290; SKX-LABEL: test17:1291; SKX:       ## %bb.0:1292; SKX-NEXT:    kmovq %rdi, %k01293; SKX-NEXT:    cmpl %edx, %esi1294; SKX-NEXT:    setg %al1295; SKX-NEXT:    movq $-33, %rcx1296; SKX-NEXT:    kmovq %rcx, %k11297; SKX-NEXT:    kandq %k1, %k0, %k01298; SKX-NEXT:    kmovd %eax, %k11299; SKX-NEXT:    kshiftlq $63, %k1, %k11300; SKX-NEXT:    kshiftrq $58, %k1, %k11301; SKX-NEXT:    korq %k1, %k0, %k01302; SKX-NEXT:    vpmovm2b %k0, %zmm01303; SKX-NEXT:    retq1304;1305; AVX512BW-LABEL: test17:1306; AVX512BW:       ## %bb.0:1307; AVX512BW-NEXT:    kmovq %rdi, %k01308; AVX512BW-NEXT:    cmpl %edx, %esi1309; AVX512BW-NEXT:    setg %al1310; AVX512BW-NEXT:    movq $-33, %rcx1311; AVX512BW-NEXT:    kmovq %rcx, %k11312; AVX512BW-NEXT:    kandq %k1, %k0, %k01313; AVX512BW-NEXT:    kmovd %eax, %k11314; AVX512BW-NEXT:    kshiftlq $63, %k1, %k11315; AVX512BW-NEXT:    kshiftrq $58, %k1, %k11316; AVX512BW-NEXT:    korq %k1, %k0, %k01317; AVX512BW-NEXT:    vpmovm2b %k0, %zmm01318; AVX512BW-NEXT:    retq1319;1320; AVX512DQ-LABEL: test17:1321; AVX512DQ:       ## %bb.0:1322; AVX512DQ-NEXT:    movq %rdi, %rax1323; AVX512DQ-NEXT:    movl %edi, %ecx1324; AVX512DQ-NEXT:    kmovw %edi, %k11325; AVX512DQ-NEXT:    shrq $32, %rdi1326; AVX512DQ-NEXT:    shrq $48, %rax1327; AVX512DQ-NEXT:    shrl $16, %ecx1328; AVX512DQ-NEXT:    kmovw %ecx, %k01329; AVX512DQ-NEXT:    kmovw %eax, %k21330; AVX512DQ-NEXT:    kmovw %edi, %k31331; AVX512DQ-NEXT:    cmpl %edx, %esi1332; AVX512DQ-NEXT:    setg %al1333; AVX512DQ-NEXT:    movw $-33, %cx1334; AVX512DQ-NEXT:    kmovw %ecx, %k41335; AVX512DQ-NEXT:    kandw %k4, %k1, %k11336; AVX512DQ-NEXT:    kmovw %eax, %k41337; AVX512DQ-NEXT:    kshiftlw $15, %k4, %k41338; AVX512DQ-NEXT:    kshiftrw $10, %k4, %k41339; AVX512DQ-NEXT:    korw %k4, %k1, %k11340; AVX512DQ-NEXT:    vpmovm2d %k3, %zmm01341; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm01342; AVX512DQ-NEXT:    vpmovm2d %k2, %zmm11343; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm11344; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm01345; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm11346; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm11347; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm21348; AVX512DQ-NEXT:    vpmovdb %zmm2, %xmm21349; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm11350; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm01351; AVX512DQ-NEXT:    retq1352;1353; X86-LABEL: test17:1354; X86:       ## %bb.0:1355; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k01356; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1357; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax1358; X86-NEXT:    setg %al1359; X86-NEXT:    kshiftrq $6, %k0, %k11360; X86-NEXT:    kshiftlq $6, %k1, %k11361; X86-NEXT:    kshiftlq $59, %k0, %k01362; X86-NEXT:    kshiftrq $59, %k0, %k01363; X86-NEXT:    korq %k1, %k0, %k01364; X86-NEXT:    kmovd %eax, %k11365; X86-NEXT:    kshiftlq $63, %k1, %k11366; X86-NEXT:    kshiftrq $58, %k1, %k11367; X86-NEXT:    korq %k0, %k1, %k01368; X86-NEXT:    vpmovm2b %k0, %zmm01369; X86-NEXT:    retl1370  %a = bitcast i64 %x to <64 x i1>1371  %b = icmp sgt i32 %y, %z1372  %c = insertelement <64 x i1>%a, i1 %b, i32 51373  %d = sext <64 x i1>%c to <64 x i8>1374  ret <64 x i8>%d1375}1376 1377define <8 x i1> @test18(i8 %a, i16 %y) {1378; KNL-LABEL: test18:1379; KNL:       ## %bb.0:1380; KNL-NEXT:    kmovw %edi, %k01381; KNL-NEXT:    kmovw %esi, %k11382; KNL-NEXT:    kshiftrw $8, %k1, %k21383; KNL-NEXT:    kshiftrw $9, %k1, %k11384; KNL-NEXT:    movw $-65, %ax1385; KNL-NEXT:    kmovw %eax, %k31386; KNL-NEXT:    kandw %k3, %k0, %k01387; KNL-NEXT:    kshiftlw $6, %k1, %k11388; KNL-NEXT:    korw %k1, %k0, %k01389; KNL-NEXT:    kshiftlw $9, %k0, %k01390; KNL-NEXT:    kshiftrw $9, %k0, %k01391; KNL-NEXT:    kshiftlw $7, %k2, %k11392; KNL-NEXT:    korw %k1, %k0, %k11393; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11394; KNL-NEXT:    vpmovdw %zmm0, %ymm01395; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm01396; KNL-NEXT:    vzeroupper1397; KNL-NEXT:    retq1398;1399; SKX-LABEL: test18:1400; SKX:       ## %bb.0:1401; SKX-NEXT:    kmovd %edi, %k01402; SKX-NEXT:    kmovd %esi, %k11403; SKX-NEXT:    kshiftrw $8, %k1, %k21404; SKX-NEXT:    kshiftrw $9, %k1, %k11405; SKX-NEXT:    movb $-65, %al1406; SKX-NEXT:    kmovd %eax, %k31407; SKX-NEXT:    kandb %k3, %k0, %k01408; SKX-NEXT:    kshiftlb $6, %k1, %k11409; SKX-NEXT:    korb %k1, %k0, %k01410; SKX-NEXT:    kshiftlb $1, %k0, %k01411; SKX-NEXT:    kshiftrb $1, %k0, %k01412; SKX-NEXT:    kshiftlb $7, %k2, %k11413; SKX-NEXT:    korb %k1, %k0, %k01414; SKX-NEXT:    vpmovm2w %k0, %xmm01415; SKX-NEXT:    retq1416;1417; AVX512BW-LABEL: test18:1418; AVX512BW:       ## %bb.0:1419; AVX512BW-NEXT:    kmovd %edi, %k01420; AVX512BW-NEXT:    kmovd %esi, %k11421; AVX512BW-NEXT:    kshiftrw $8, %k1, %k21422; AVX512BW-NEXT:    kshiftrw $9, %k1, %k11423; AVX512BW-NEXT:    movw $-65, %ax1424; AVX512BW-NEXT:    kmovd %eax, %k31425; AVX512BW-NEXT:    kandw %k3, %k0, %k01426; AVX512BW-NEXT:    kshiftlw $6, %k1, %k11427; AVX512BW-NEXT:    korw %k1, %k0, %k01428; AVX512BW-NEXT:    kshiftlw $9, %k0, %k01429; AVX512BW-NEXT:    kshiftrw $9, %k0, %k01430; AVX512BW-NEXT:    kshiftlw $7, %k2, %k11431; AVX512BW-NEXT:    korw %k1, %k0, %k01432; AVX512BW-NEXT:    vpmovm2w %k0, %zmm01433; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm01434; AVX512BW-NEXT:    vzeroupper1435; AVX512BW-NEXT:    retq1436;1437; AVX512DQ-LABEL: test18:1438; AVX512DQ:       ## %bb.0:1439; AVX512DQ-NEXT:    kmovw %edi, %k01440; AVX512DQ-NEXT:    kmovw %esi, %k11441; AVX512DQ-NEXT:    kshiftrw $8, %k1, %k21442; AVX512DQ-NEXT:    kshiftrw $9, %k1, %k11443; AVX512DQ-NEXT:    movb $-65, %al1444; AVX512DQ-NEXT:    kmovw %eax, %k31445; AVX512DQ-NEXT:    kandb %k3, %k0, %k01446; AVX512DQ-NEXT:    kshiftlb $6, %k1, %k11447; AVX512DQ-NEXT:    korb %k1, %k0, %k01448; AVX512DQ-NEXT:    kshiftlb $1, %k0, %k01449; AVX512DQ-NEXT:    kshiftrb $1, %k0, %k01450; AVX512DQ-NEXT:    kshiftlb $7, %k2, %k11451; AVX512DQ-NEXT:    korb %k1, %k0, %k01452; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm01453; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm01454; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm01455; AVX512DQ-NEXT:    vzeroupper1456; AVX512DQ-NEXT:    retq1457;1458; X86-LABEL: test18:1459; X86:       ## %bb.0:1460; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k01461; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k11462; X86-NEXT:    kshiftrw $8, %k1, %k21463; X86-NEXT:    kshiftrw $9, %k1, %k11464; X86-NEXT:    movb $-65, %al1465; X86-NEXT:    kmovd %eax, %k31466; X86-NEXT:    kandb %k3, %k0, %k01467; X86-NEXT:    kshiftlb $6, %k1, %k11468; X86-NEXT:    korb %k1, %k0, %k01469; X86-NEXT:    kshiftlb $1, %k0, %k01470; X86-NEXT:    kshiftrb $1, %k0, %k01471; X86-NEXT:    kshiftlb $7, %k2, %k11472; X86-NEXT:    korb %k1, %k0, %k01473; X86-NEXT:    vpmovm2w %k0, %xmm01474; X86-NEXT:    retl1475  %b = bitcast i8 %a to <8 x i1>1476  %b1 = bitcast i16 %y to <16 x i1>1477  %el1 = extractelement <16 x i1>%b1, i32 81478  %el2 = extractelement <16 x i1>%b1, i32 91479  %c = insertelement <8 x i1>%b, i1 %el1, i32 71480  %d = insertelement <8 x i1>%c, i1 %el2, i32 61481  ret <8 x i1>%d1482}1483define <32 x i16> @test21(<32 x i16> %x , <32 x i1> %mask) nounwind readnone {1484; KNL-LABEL: test21:1485; KNL:       ## %bb.0:1486; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm21487; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero1488; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero1489; KNL-NEXT:    vpsllw $15, %ymm1, %ymm11490; KNL-NEXT:    vpsraw $15, %ymm1, %ymm11491; KNL-NEXT:    vpsllw $15, %ymm2, %ymm21492; KNL-NEXT:    vpsraw $15, %ymm2, %ymm21493; KNL-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm11494; KNL-NEXT:    vpandq %zmm0, %zmm1, %zmm01495; KNL-NEXT:    retq1496;1497; SKX-LABEL: test21:1498; SKX:       ## %bb.0:1499; SKX-NEXT:    vpsllw $7, %ymm1, %ymm11500; SKX-NEXT:    vpmovb2m %ymm1, %k11501; SKX-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}1502; SKX-NEXT:    retq1503;1504; AVX512BW-LABEL: test21:1505; AVX512BW:       ## %bb.0:1506; AVX512BW-NEXT:    vpsllw $7, %ymm1, %ymm11507; AVX512BW-NEXT:    vpmovb2m %zmm1, %k11508; AVX512BW-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}1509; AVX512BW-NEXT:    retq1510;1511; AVX512DQ-LABEL: test21:1512; AVX512DQ:       ## %bb.0:1513; AVX512DQ-NEXT:    vextracti128 $1, %ymm1, %xmm21514; AVX512DQ-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero1515; AVX512DQ-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero1516; AVX512DQ-NEXT:    vpsllw $15, %ymm1, %ymm11517; AVX512DQ-NEXT:    vpsraw $15, %ymm1, %ymm11518; AVX512DQ-NEXT:    vpsllw $15, %ymm2, %ymm21519; AVX512DQ-NEXT:    vpsraw $15, %ymm2, %ymm21520; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm1, %zmm11521; AVX512DQ-NEXT:    vpandq %zmm0, %zmm1, %zmm01522; AVX512DQ-NEXT:    retq1523;1524; X86-LABEL: test21:1525; X86:       ## %bb.0:1526; X86-NEXT:    vpsllw $7, %ymm1, %ymm11527; X86-NEXT:    vpmovb2m %ymm1, %k11528; X86-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}1529; X86-NEXT:    retl1530  %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer1531  ret <32 x i16> %ret1532}1533 1534define void @test22(<4 x i1> %a, ptr %addr) {1535; KNL-LABEL: test22:1536; KNL:       ## %bb.0:1537; KNL-NEXT:    vpslld $31, %xmm0, %xmm01538; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k01539; KNL-NEXT:    kshiftlw $12, %k0, %k01540; KNL-NEXT:    kshiftrw $12, %k0, %k01541; KNL-NEXT:    kmovw %k0, %eax1542; KNL-NEXT:    movb %al, (%rdi)1543; KNL-NEXT:    vzeroupper1544; KNL-NEXT:    retq1545;1546; SKX-LABEL: test22:1547; SKX:       ## %bb.0:1548; SKX-NEXT:    vpslld $31, %xmm0, %xmm01549; SKX-NEXT:    vpmovd2m %xmm0, %k01550; SKX-NEXT:    kmovb %k0, (%rdi)1551; SKX-NEXT:    retq1552;1553; AVX512BW-LABEL: test22:1554; AVX512BW:       ## %bb.0:1555; AVX512BW-NEXT:    vpslld $31, %xmm0, %xmm01556; AVX512BW-NEXT:    vptestmd %zmm0, %zmm0, %k01557; AVX512BW-NEXT:    kshiftlw $12, %k0, %k01558; AVX512BW-NEXT:    kshiftrw $12, %k0, %k01559; AVX512BW-NEXT:    kmovd %k0, %eax1560; AVX512BW-NEXT:    movb %al, (%rdi)1561; AVX512BW-NEXT:    vzeroupper1562; AVX512BW-NEXT:    retq1563;1564; AVX512DQ-LABEL: test22:1565; AVX512DQ:       ## %bb.0:1566; AVX512DQ-NEXT:    vpslld $31, %xmm0, %xmm01567; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k01568; AVX512DQ-NEXT:    kshiftlb $4, %k0, %k01569; AVX512DQ-NEXT:    kshiftrb $4, %k0, %k01570; AVX512DQ-NEXT:    kmovb %k0, (%rdi)1571; AVX512DQ-NEXT:    vzeroupper1572; AVX512DQ-NEXT:    retq1573;1574; X86-LABEL: test22:1575; X86:       ## %bb.0:1576; X86-NEXT:    vpslld $31, %xmm0, %xmm01577; X86-NEXT:    vpmovd2m %xmm0, %k01578; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1579; X86-NEXT:    kmovb %k0, (%eax)1580; X86-NEXT:    retl1581  store <4 x i1> %a, ptr %addr1582  ret void1583}1584 1585define void @test23(<2 x i1> %a, ptr %addr) {1586; KNL-LABEL: test23:1587; KNL:       ## %bb.0:1588; KNL-NEXT:    vpsllq $63, %xmm0, %xmm01589; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k01590; KNL-NEXT:    kshiftlw $14, %k0, %k01591; KNL-NEXT:    kshiftrw $14, %k0, %k01592; KNL-NEXT:    kmovw %k0, %eax1593; KNL-NEXT:    movb %al, (%rdi)1594; KNL-NEXT:    vzeroupper1595; KNL-NEXT:    retq1596;1597; SKX-LABEL: test23:1598; SKX:       ## %bb.0:1599; SKX-NEXT:    vpsllq $63, %xmm0, %xmm01600; SKX-NEXT:    vpmovq2m %xmm0, %k01601; SKX-NEXT:    kmovb %k0, (%rdi)1602; SKX-NEXT:    retq1603;1604; AVX512BW-LABEL: test23:1605; AVX512BW:       ## %bb.0:1606; AVX512BW-NEXT:    vpsllq $63, %xmm0, %xmm01607; AVX512BW-NEXT:    vptestmq %zmm0, %zmm0, %k01608; AVX512BW-NEXT:    kshiftlw $14, %k0, %k01609; AVX512BW-NEXT:    kshiftrw $14, %k0, %k01610; AVX512BW-NEXT:    kmovd %k0, %eax1611; AVX512BW-NEXT:    movb %al, (%rdi)1612; AVX512BW-NEXT:    vzeroupper1613; AVX512BW-NEXT:    retq1614;1615; AVX512DQ-LABEL: test23:1616; AVX512DQ:       ## %bb.0:1617; AVX512DQ-NEXT:    vpsllq $63, %xmm0, %xmm01618; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k01619; AVX512DQ-NEXT:    kshiftlb $6, %k0, %k01620; AVX512DQ-NEXT:    kshiftrb $6, %k0, %k01621; AVX512DQ-NEXT:    kmovb %k0, (%rdi)1622; AVX512DQ-NEXT:    vzeroupper1623; AVX512DQ-NEXT:    retq1624;1625; X86-LABEL: test23:1626; X86:       ## %bb.0:1627; X86-NEXT:    vpsllq $63, %xmm0, %xmm01628; X86-NEXT:    vpmovq2m %xmm0, %k01629; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1630; X86-NEXT:    kmovb %k0, (%eax)1631; X86-NEXT:    retl1632  store <2 x i1> %a, ptr %addr1633  ret void1634}1635 1636define void @store_v1i1(<1 x i1> %c , ptr %ptr) {1637; KNL-LABEL: store_v1i1:1638; KNL:       ## %bb.0:1639; KNL-NEXT:    kmovw %edi, %k01640; KNL-NEXT:    knotw %k0, %k01641; KNL-NEXT:    kshiftlw $15, %k0, %k01642; KNL-NEXT:    kshiftrw $15, %k0, %k01643; KNL-NEXT:    kmovw %k0, %eax1644; KNL-NEXT:    movb %al, (%rsi)1645; KNL-NEXT:    retq1646;1647; SKX-LABEL: store_v1i1:1648; SKX:       ## %bb.0:1649; SKX-NEXT:    kmovd %edi, %k01650; SKX-NEXT:    knotw %k0, %k01651; SKX-NEXT:    kshiftlb $7, %k0, %k01652; SKX-NEXT:    kshiftrb $7, %k0, %k01653; SKX-NEXT:    kmovb %k0, (%rsi)1654; SKX-NEXT:    retq1655;1656; AVX512BW-LABEL: store_v1i1:1657; AVX512BW:       ## %bb.0:1658; AVX512BW-NEXT:    kmovd %edi, %k01659; AVX512BW-NEXT:    knotw %k0, %k01660; AVX512BW-NEXT:    kshiftlw $15, %k0, %k01661; AVX512BW-NEXT:    kshiftrw $15, %k0, %k01662; AVX512BW-NEXT:    kmovd %k0, %eax1663; AVX512BW-NEXT:    movb %al, (%rsi)1664; AVX512BW-NEXT:    retq1665;1666; AVX512DQ-LABEL: store_v1i1:1667; AVX512DQ:       ## %bb.0:1668; AVX512DQ-NEXT:    kmovw %edi, %k01669; AVX512DQ-NEXT:    knotw %k0, %k01670; AVX512DQ-NEXT:    kshiftlb $7, %k0, %k01671; AVX512DQ-NEXT:    kshiftrb $7, %k0, %k01672; AVX512DQ-NEXT:    kmovb %k0, (%rsi)1673; AVX512DQ-NEXT:    retq1674;1675; X86-LABEL: store_v1i1:1676; X86:       ## %bb.0:1677; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k01678; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1679; X86-NEXT:    knotw %k0, %k01680; X86-NEXT:    kshiftlb $7, %k0, %k01681; X86-NEXT:    kshiftrb $7, %k0, %k01682; X86-NEXT:    kmovb %k0, (%eax)1683; X86-NEXT:    retl1684  %x = xor <1 x i1> %c, <i1 1>1685  store <1 x i1> %x, ptr  %ptr, align 41686  ret void1687}1688 1689define void @store_v2i1(<2 x i1> %c , ptr %ptr) {1690; KNL-LABEL: store_v2i1:1691; KNL:       ## %bb.0:1692; KNL-NEXT:    vpsllq $63, %xmm0, %xmm01693; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k01694; KNL-NEXT:    kshiftlw $14, %k0, %k01695; KNL-NEXT:    kshiftrw $14, %k0, %k01696; KNL-NEXT:    kmovw %k0, %eax1697; KNL-NEXT:    movb %al, (%rdi)1698; KNL-NEXT:    vzeroupper1699; KNL-NEXT:    retq1700;1701; SKX-LABEL: store_v2i1:1702; SKX:       ## %bb.0:1703; SKX-NEXT:    vpsllq $63, %xmm0, %xmm01704; SKX-NEXT:    vpmovq2m %xmm0, %k01705; SKX-NEXT:    knotw %k0, %k01706; SKX-NEXT:    kshiftlb $6, %k0, %k01707; SKX-NEXT:    kshiftrb $6, %k0, %k01708; SKX-NEXT:    kmovb %k0, (%rdi)1709; SKX-NEXT:    retq1710;1711; AVX512BW-LABEL: store_v2i1:1712; AVX512BW:       ## %bb.0:1713; AVX512BW-NEXT:    vpsllq $63, %xmm0, %xmm01714; AVX512BW-NEXT:    vptestnmq %zmm0, %zmm0, %k01715; AVX512BW-NEXT:    kshiftlw $14, %k0, %k01716; AVX512BW-NEXT:    kshiftrw $14, %k0, %k01717; AVX512BW-NEXT:    kmovd %k0, %eax1718; AVX512BW-NEXT:    movb %al, (%rdi)1719; AVX512BW-NEXT:    vzeroupper1720; AVX512BW-NEXT:    retq1721;1722; AVX512DQ-LABEL: store_v2i1:1723; AVX512DQ:       ## %bb.0:1724; AVX512DQ-NEXT:    vpsllq $63, %xmm0, %xmm01725; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k01726; AVX512DQ-NEXT:    knotw %k0, %k01727; AVX512DQ-NEXT:    kshiftlb $6, %k0, %k01728; AVX512DQ-NEXT:    kshiftrb $6, %k0, %k01729; AVX512DQ-NEXT:    kmovb %k0, (%rdi)1730; AVX512DQ-NEXT:    vzeroupper1731; AVX512DQ-NEXT:    retq1732;1733; X86-LABEL: store_v2i1:1734; X86:       ## %bb.0:1735; X86-NEXT:    vpsllq $63, %xmm0, %xmm01736; X86-NEXT:    vpmovq2m %xmm0, %k01737; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1738; X86-NEXT:    knotw %k0, %k01739; X86-NEXT:    kshiftlb $6, %k0, %k01740; X86-NEXT:    kshiftrb $6, %k0, %k01741; X86-NEXT:    kmovb %k0, (%eax)1742; X86-NEXT:    retl1743  %x = xor <2 x i1> %c, <i1 1, i1 1>1744  store <2 x i1> %x, ptr  %ptr, align 41745  ret void1746}1747 1748define void @store_v4i1(<4 x i1> %c , ptr %ptr) {1749; KNL-LABEL: store_v4i1:1750; KNL:       ## %bb.0:1751; KNL-NEXT:    vpslld $31, %xmm0, %xmm01752; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k01753; KNL-NEXT:    kshiftlw $12, %k0, %k01754; KNL-NEXT:    kshiftrw $12, %k0, %k01755; KNL-NEXT:    kmovw %k0, %eax1756; KNL-NEXT:    movb %al, (%rdi)1757; KNL-NEXT:    vzeroupper1758; KNL-NEXT:    retq1759;1760; SKX-LABEL: store_v4i1:1761; SKX:       ## %bb.0:1762; SKX-NEXT:    vpslld $31, %xmm0, %xmm01763; SKX-NEXT:    vpmovd2m %xmm0, %k01764; SKX-NEXT:    knotw %k0, %k01765; SKX-NEXT:    kshiftlb $4, %k0, %k01766; SKX-NEXT:    kshiftrb $4, %k0, %k01767; SKX-NEXT:    kmovb %k0, (%rdi)1768; SKX-NEXT:    retq1769;1770; AVX512BW-LABEL: store_v4i1:1771; AVX512BW:       ## %bb.0:1772; AVX512BW-NEXT:    vpslld $31, %xmm0, %xmm01773; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k01774; AVX512BW-NEXT:    kshiftlw $12, %k0, %k01775; AVX512BW-NEXT:    kshiftrw $12, %k0, %k01776; AVX512BW-NEXT:    kmovd %k0, %eax1777; AVX512BW-NEXT:    movb %al, (%rdi)1778; AVX512BW-NEXT:    vzeroupper1779; AVX512BW-NEXT:    retq1780;1781; AVX512DQ-LABEL: store_v4i1:1782; AVX512DQ:       ## %bb.0:1783; AVX512DQ-NEXT:    vpslld $31, %xmm0, %xmm01784; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k01785; AVX512DQ-NEXT:    knotw %k0, %k01786; AVX512DQ-NEXT:    kshiftlb $4, %k0, %k01787; AVX512DQ-NEXT:    kshiftrb $4, %k0, %k01788; AVX512DQ-NEXT:    kmovb %k0, (%rdi)1789; AVX512DQ-NEXT:    vzeroupper1790; AVX512DQ-NEXT:    retq1791;1792; X86-LABEL: store_v4i1:1793; X86:       ## %bb.0:1794; X86-NEXT:    vpslld $31, %xmm0, %xmm01795; X86-NEXT:    vpmovd2m %xmm0, %k01796; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1797; X86-NEXT:    knotw %k0, %k01798; X86-NEXT:    kshiftlb $4, %k0, %k01799; X86-NEXT:    kshiftrb $4, %k0, %k01800; X86-NEXT:    kmovb %k0, (%eax)1801; X86-NEXT:    retl1802  %x = xor <4 x i1> %c, <i1 1, i1 1, i1 1, i1 1>1803  store <4 x i1> %x, ptr  %ptr, align 41804  ret void1805}1806 1807define void @store_v8i1(<8 x i1> %c , ptr %ptr) {1808; KNL-LABEL: store_v8i1:1809; KNL:       ## %bb.0:1810; KNL-NEXT:    vpmovsxwq %xmm0, %zmm01811; KNL-NEXT:    vpsllq $63, %zmm0, %zmm01812; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k01813; KNL-NEXT:    kmovw %k0, %eax1814; KNL-NEXT:    movb %al, (%rdi)1815; KNL-NEXT:    vzeroupper1816; KNL-NEXT:    retq1817;1818; SKX-LABEL: store_v8i1:1819; SKX:       ## %bb.0:1820; SKX-NEXT:    vpsllw $15, %xmm0, %xmm01821; SKX-NEXT:    vpmovw2m %xmm0, %k01822; SKX-NEXT:    knotb %k0, %k01823; SKX-NEXT:    kmovb %k0, (%rdi)1824; SKX-NEXT:    retq1825;1826; AVX512BW-LABEL: store_v8i1:1827; AVX512BW:       ## %bb.0:1828; AVX512BW-NEXT:    vpsllw $15, %xmm0, %xmm01829; AVX512BW-NEXT:    vpmovw2m %zmm0, %k01830; AVX512BW-NEXT:    knotw %k0, %k01831; AVX512BW-NEXT:    kmovd %k0, %eax1832; AVX512BW-NEXT:    movb %al, (%rdi)1833; AVX512BW-NEXT:    vzeroupper1834; AVX512BW-NEXT:    retq1835;1836; AVX512DQ-LABEL: store_v8i1:1837; AVX512DQ:       ## %bb.0:1838; AVX512DQ-NEXT:    vpmovsxwq %xmm0, %zmm01839; AVX512DQ-NEXT:    vpsllq $63, %zmm0, %zmm01840; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k01841; AVX512DQ-NEXT:    knotb %k0, %k01842; AVX512DQ-NEXT:    kmovb %k0, (%rdi)1843; AVX512DQ-NEXT:    vzeroupper1844; AVX512DQ-NEXT:    retq1845;1846; X86-LABEL: store_v8i1:1847; X86:       ## %bb.0:1848; X86-NEXT:    vpsllw $15, %xmm0, %xmm01849; X86-NEXT:    vpmovw2m %xmm0, %k01850; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1851; X86-NEXT:    knotb %k0, %k01852; X86-NEXT:    kmovb %k0, (%eax)1853; X86-NEXT:    retl1854  %x = xor <8 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>1855  store <8 x i1> %x, ptr  %ptr, align 41856  ret void1857}1858 1859define void @store_v16i1(<16 x i1> %c , ptr %ptr) {1860; KNL-LABEL: store_v16i1:1861; KNL:       ## %bb.0:1862; KNL-NEXT:    vpmovsxbd %xmm0, %zmm01863; KNL-NEXT:    vpslld $31, %zmm0, %zmm01864; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k01865; KNL-NEXT:    kmovw %k0, (%rdi)1866; KNL-NEXT:    vzeroupper1867; KNL-NEXT:    retq1868;1869; SKX-LABEL: store_v16i1:1870; SKX:       ## %bb.0:1871; SKX-NEXT:    vpsllw $7, %xmm0, %xmm01872; SKX-NEXT:    vpmovb2m %xmm0, %k01873; SKX-NEXT:    knotw %k0, %k01874; SKX-NEXT:    kmovw %k0, (%rdi)1875; SKX-NEXT:    retq1876;1877; AVX512BW-LABEL: store_v16i1:1878; AVX512BW:       ## %bb.0:1879; AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm01880; AVX512BW-NEXT:    vpmovb2m %zmm0, %k01881; AVX512BW-NEXT:    knotw %k0, %k01882; AVX512BW-NEXT:    kmovw %k0, (%rdi)1883; AVX512BW-NEXT:    vzeroupper1884; AVX512BW-NEXT:    retq1885;1886; AVX512DQ-LABEL: store_v16i1:1887; AVX512DQ:       ## %bb.0:1888; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm01889; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm01890; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k01891; AVX512DQ-NEXT:    knotw %k0, %k01892; AVX512DQ-NEXT:    kmovw %k0, (%rdi)1893; AVX512DQ-NEXT:    vzeroupper1894; AVX512DQ-NEXT:    retq1895;1896; X86-LABEL: store_v16i1:1897; X86:       ## %bb.0:1898; X86-NEXT:    vpsllw $7, %xmm0, %xmm01899; X86-NEXT:    vpmovb2m %xmm0, %k01900; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1901; X86-NEXT:    knotw %k0, %k01902; X86-NEXT:    kmovw %k0, (%eax)1903; X86-NEXT:    retl1904  %x = xor <16 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>1905  store <16 x i1> %x, ptr  %ptr, align 41906  ret void1907}1908 1909;void f2(int);1910;void f1(int c)1911;{1912;  static int v = 0;1913;  if (v == 0)1914;    v = 1;1915;  else1916;    v = 0;1917;  f2(v);1918;}1919 1920@f1.v = internal unnamed_addr global i1 false, align 41921 1922define void @f1(i32 %c) {1923; CHECK-LABEL: f1:1924; CHECK:       ## %bb.0: ## %entry1925; CHECK-NEXT:    movzbl _f1.v(%rip), %edi1926; CHECK-NEXT:    xorl $1, %edi1927; CHECK-NEXT:    movb %dil, _f1.v(%rip)1928; CHECK-NEXT:    jmp _f2 ## TAILCALL1929;1930; X86-LABEL: f1:1931; X86:       ## %bb.0: ## %entry1932; X86-NEXT:    subl $12, %esp1933; X86-NEXT:    .cfi_def_cfa_offset 161934; X86-NEXT:    movzbl _f1.v, %eax1935; X86-NEXT:    xorl $1, %eax1936; X86-NEXT:    movb %al, _f1.v1937; X86-NEXT:    movl %eax, (%esp)1938; X86-NEXT:    calll _f21939; X86-NEXT:    addl $12, %esp1940; X86-NEXT:    retl1941entry:1942  %.b1 = load i1, ptr @f1.v, align 41943  %not..b1 = xor i1 %.b1, true1944  store i1 %not..b1, ptr @f1.v, align 41945  %0 = zext i1 %not..b1 to i321946  tail call void @f2(i32 %0) #21947  ret void1948}1949 1950declare void @f2(i32) #11951 1952define void @store_i16_i1(i16 %x, ptr%y) {1953; CHECK-LABEL: store_i16_i1:1954; CHECK:       ## %bb.0:1955; CHECK-NEXT:    andl $1, %edi1956; CHECK-NEXT:    movb %dil, (%rsi)1957; CHECK-NEXT:    retq1958;1959; X86-LABEL: store_i16_i1:1960; X86:       ## %bb.0:1961; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1962; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx1963; X86-NEXT:    andl $1, %ecx1964; X86-NEXT:    movb %cl, (%eax)1965; X86-NEXT:    retl1966  %c = trunc i16 %x to i11967  store i1 %c, ptr %y1968  ret void1969}1970 1971define void @store_i8_i1(i8 %x, ptr%y) {1972; CHECK-LABEL: store_i8_i1:1973; CHECK:       ## %bb.0:1974; CHECK-NEXT:    andl $1, %edi1975; CHECK-NEXT:    movb %dil, (%rsi)1976; CHECK-NEXT:    retq1977;1978; X86-LABEL: store_i8_i1:1979; X86:       ## %bb.0:1980; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax1981; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx1982; X86-NEXT:    andb $1, %cl1983; X86-NEXT:    movb %cl, (%eax)1984; X86-NEXT:    retl1985  %c = trunc i8 %x to i11986  store i1 %c, ptr %y1987  ret void1988}1989 1990define <32 x i16> @test_build_vec_v32i1(<32 x i16> %x) {1991; KNL-LABEL: test_build_vec_v32i1:1992; KNL:       ## %bb.0:1993; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01994; KNL-NEXT:    retq1995;1996; SKX-LABEL: test_build_vec_v32i1:1997; SKX:       ## %bb.0:1998; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01999; SKX-NEXT:    retq2000;2001; AVX512BW-LABEL: test_build_vec_v32i1:2002; AVX512BW:       ## %bb.0:2003; AVX512BW-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02004; AVX512BW-NEXT:    retq2005;2006; AVX512DQ-LABEL: test_build_vec_v32i1:2007; AVX512DQ:       ## %bb.0:2008; AVX512DQ-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02009; AVX512DQ-NEXT:    retq2010;2011; X86-LABEL: test_build_vec_v32i1:2012; X86:       ## %bb.0:2013; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %zmm0, %zmm02014; X86-NEXT:    retl2015  %ret = select <32 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 true, i1 false>, <32 x i16> %x, <32 x i16> zeroinitializer2016  ret <32 x i16> %ret2017}2018 2019define <32 x i16> @test_build_vec_v32i1_optsize(<32 x i16> %x) optsize {2020; KNL-LABEL: test_build_vec_v32i1_optsize:2021; KNL:       ## %bb.0:2022; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02023; KNL-NEXT:    retq2024;2025; SKX-LABEL: test_build_vec_v32i1_optsize:2026; SKX:       ## %bb.0:2027; SKX-NEXT:    movl $1497715861, %eax ## imm = 0x594554952028; SKX-NEXT:    kmovd %eax, %k12029; SKX-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2030; SKX-NEXT:    retq2031;2032; AVX512BW-LABEL: test_build_vec_v32i1_optsize:2033; AVX512BW:       ## %bb.0:2034; AVX512BW-NEXT:    movl $1497715861, %eax ## imm = 0x594554952035; AVX512BW-NEXT:    kmovd %eax, %k12036; AVX512BW-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2037; AVX512BW-NEXT:    retq2038;2039; AVX512DQ-LABEL: test_build_vec_v32i1_optsize:2040; AVX512DQ:       ## %bb.0:2041; AVX512DQ-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02042; AVX512DQ-NEXT:    retq2043;2044; X86-LABEL: test_build_vec_v32i1_optsize:2045; X86:       ## %bb.0:2046; X86-NEXT:    movl $1497715861, %eax ## imm = 0x594554952047; X86-NEXT:    kmovd %eax, %k12048; X86-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2049; X86-NEXT:    retl2050  %ret = select <32 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 true, i1 false>, <32 x i16> %x, <32 x i16> zeroinitializer2051  ret <32 x i16> %ret2052}2053 2054define <32 x i16> @test_build_vec_v32i1_pgso(<32 x i16> %x) !prof !14 {2055; KNL-LABEL: test_build_vec_v32i1_pgso:2056; KNL:       ## %bb.0:2057; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02058; KNL-NEXT:    retq2059;2060; SKX-LABEL: test_build_vec_v32i1_pgso:2061; SKX:       ## %bb.0:2062; SKX-NEXT:    movl $1497715861, %eax ## imm = 0x594554952063; SKX-NEXT:    kmovd %eax, %k12064; SKX-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2065; SKX-NEXT:    retq2066;2067; AVX512BW-LABEL: test_build_vec_v32i1_pgso:2068; AVX512BW:       ## %bb.0:2069; AVX512BW-NEXT:    movl $1497715861, %eax ## imm = 0x594554952070; AVX512BW-NEXT:    kmovd %eax, %k12071; AVX512BW-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2072; AVX512BW-NEXT:    retq2073;2074; AVX512DQ-LABEL: test_build_vec_v32i1_pgso:2075; AVX512DQ:       ## %bb.0:2076; AVX512DQ-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02077; AVX512DQ-NEXT:    retq2078;2079; X86-LABEL: test_build_vec_v32i1_pgso:2080; X86:       ## %bb.0:2081; X86-NEXT:    movl $1497715861, %eax ## imm = 0x594554952082; X86-NEXT:    kmovd %eax, %k12083; X86-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}2084; X86-NEXT:    retl2085  %ret = select <32 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 true, i1 false>, <32 x i16> %x, <32 x i16> zeroinitializer2086  ret <32 x i16> %ret2087}2088 2089define <64 x i8> @test_build_vec_v64i1(<64 x i8> %x) {2090; KNL-LABEL: test_build_vec_v64i1:2091; KNL:       ## %bb.0:2092; KNL-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02093; KNL-NEXT:    retq2094;2095; SKX-LABEL: test_build_vec_v64i1:2096; SKX:       ## %bb.0:2097; SKX-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02098; SKX-NEXT:    retq2099;2100; AVX512BW-LABEL: test_build_vec_v64i1:2101; AVX512BW:       ## %bb.0:2102; AVX512BW-NEXT:    vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02103; AVX512BW-NEXT:    retq2104;2105; AVX512DQ-LABEL: test_build_vec_v64i1:2106; AVX512DQ:       ## %bb.0:2107; AVX512DQ-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm02108; AVX512DQ-NEXT:    retq2109;2110; X86-LABEL: test_build_vec_v64i1:2111; X86:       ## %bb.0:2112; X86-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}, %zmm0, %zmm02113; X86-NEXT:    retl2114  %ret = select <64 x i1> <i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 true, i1 false>, <64 x i8> %x, <64 x i8> zeroinitializer2115  ret <64 x i8> %ret2116}2117 2118define void @ktest_1(<8 x double> %in, ptr %base) {2119; KNL-LABEL: ktest_1:2120; KNL:       ## %bb.0:2121; KNL-NEXT:    vcmpgtpd (%rdi), %zmm0, %k12122; KNL-NEXT:    vcmpltpd 8(%rdi), %zmm0, %k0 {%k1}2123; KNL-NEXT:    kmovw %k0, %eax2124; KNL-NEXT:    testb %al, %al2125; KNL-NEXT:    je LBB44_22126; KNL-NEXT:  ## %bb.1: ## %L12127; KNL-NEXT:    vmovapd %zmm0, (%rdi)2128; KNL-NEXT:    vzeroupper2129; KNL-NEXT:    retq2130; KNL-NEXT:  LBB44_2: ## %L22131; KNL-NEXT:    vmovapd %zmm0, 8(%rdi)2132; KNL-NEXT:    vzeroupper2133; KNL-NEXT:    retq2134;2135; SKX-LABEL: ktest_1:2136; SKX:       ## %bb.0:2137; SKX-NEXT:    vcmpgtpd (%rdi), %zmm0, %k12138; SKX-NEXT:    vmovupd 8(%rdi), %zmm1 {%k1} {z}2139; SKX-NEXT:    vcmpltpd %zmm1, %zmm0, %k02140; SKX-NEXT:    ktestb %k0, %k12141; SKX-NEXT:    je LBB44_22142; SKX-NEXT:  ## %bb.1: ## %L12143; SKX-NEXT:    vmovapd %zmm0, (%rdi)2144; SKX-NEXT:    vzeroupper2145; SKX-NEXT:    retq2146; SKX-NEXT:  LBB44_2: ## %L22147; SKX-NEXT:    vmovapd %zmm0, 8(%rdi)2148; SKX-NEXT:    vzeroupper2149; SKX-NEXT:    retq2150;2151; AVX512BW-LABEL: ktest_1:2152; AVX512BW:       ## %bb.0:2153; AVX512BW-NEXT:    vcmpgtpd (%rdi), %zmm0, %k12154; AVX512BW-NEXT:    vcmpltpd 8(%rdi), %zmm0, %k0 {%k1}2155; AVX512BW-NEXT:    kmovd %k0, %eax2156; AVX512BW-NEXT:    testb %al, %al2157; AVX512BW-NEXT:    je LBB44_22158; AVX512BW-NEXT:  ## %bb.1: ## %L12159; AVX512BW-NEXT:    vmovapd %zmm0, (%rdi)2160; AVX512BW-NEXT:    vzeroupper2161; AVX512BW-NEXT:    retq2162; AVX512BW-NEXT:  LBB44_2: ## %L22163; AVX512BW-NEXT:    vmovapd %zmm0, 8(%rdi)2164; AVX512BW-NEXT:    vzeroupper2165; AVX512BW-NEXT:    retq2166;2167; AVX512DQ-LABEL: ktest_1:2168; AVX512DQ:       ## %bb.0:2169; AVX512DQ-NEXT:    vcmpgtpd (%rdi), %zmm0, %k12170; AVX512DQ-NEXT:    vmovupd 8(%rdi), %zmm1 {%k1} {z}2171; AVX512DQ-NEXT:    vcmpltpd %zmm1, %zmm0, %k02172; AVX512DQ-NEXT:    ktestb %k0, %k12173; AVX512DQ-NEXT:    je LBB44_22174; AVX512DQ-NEXT:  ## %bb.1: ## %L12175; AVX512DQ-NEXT:    vmovapd %zmm0, (%rdi)2176; AVX512DQ-NEXT:    vzeroupper2177; AVX512DQ-NEXT:    retq2178; AVX512DQ-NEXT:  LBB44_2: ## %L22179; AVX512DQ-NEXT:    vmovapd %zmm0, 8(%rdi)2180; AVX512DQ-NEXT:    vzeroupper2181; AVX512DQ-NEXT:    retq2182;2183; X86-LABEL: ktest_1:2184; X86:       ## %bb.0:2185; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2186; X86-NEXT:    vcmpgtpd (%eax), %zmm0, %k12187; X86-NEXT:    vmovupd 8(%eax), %zmm1 {%k1} {z}2188; X86-NEXT:    vcmpltpd %zmm1, %zmm0, %k02189; X86-NEXT:    ktestb %k0, %k12190; X86-NEXT:    je LBB44_22191; X86-NEXT:  ## %bb.1: ## %L12192; X86-NEXT:    vmovapd %zmm0, (%eax)2193; X86-NEXT:    vzeroupper2194; X86-NEXT:    retl2195; X86-NEXT:  LBB44_2: ## %L22196; X86-NEXT:    vmovapd %zmm0, 8(%eax)2197; X86-NEXT:    vzeroupper2198; X86-NEXT:    retl2199  %addr2 = getelementptr double, ptr %base, i64 12200 2201 2202  %val1 = load <8 x double>, ptr%base, align 12203  %val2 = load <8 x double>, ptr%addr2, align 12204 2205  %sel1 = fcmp ogt <8 x double>%in, %val12206  %val3 = select <8 x i1> %sel1, <8 x double> %val2, <8 x double> zeroinitializer2207  %sel2 = fcmp olt <8 x double> %in, %val32208  %sel3 = and <8 x i1> %sel1, %sel22209 2210  %int_sel3 = bitcast <8 x i1> %sel3 to i82211  %res = icmp eq i8 %int_sel3, zeroinitializer2212  br i1 %res, label %L2, label %L12213L1:2214  store <8 x double> %in, ptr %base2215  br label %End2216L2:2217  store <8 x double> %in, ptr %addr22218  br label %End2219End:2220  ret void2221}2222 2223define void @ktest_2(<32 x float> %in, ptr %base) {2224;2225; KNL-LABEL: ktest_2:2226; KNL:       ## %bb.0:2227; KNL-NEXT:    vcmpgtps (%rdi), %zmm0, %k12228; KNL-NEXT:    vcmpgtps 64(%rdi), %zmm1, %k22229; KNL-NEXT:    vmovups 68(%rdi), %zmm2 {%k2} {z}2230; KNL-NEXT:    vmovups 4(%rdi), %zmm3 {%k1} {z}2231; KNL-NEXT:    vcmpltps %zmm3, %zmm0, %k02232; KNL-NEXT:    vcmpltps %zmm2, %zmm1, %k32233; KNL-NEXT:    korw %k3, %k2, %k22234; KNL-NEXT:    korw %k0, %k1, %k02235; KNL-NEXT:    kortestw %k2, %k02236; KNL-NEXT:    je LBB45_22237; KNL-NEXT:  ## %bb.1: ## %L12238; KNL-NEXT:    vmovaps %zmm0, (%rdi)2239; KNL-NEXT:    vmovaps %zmm1, 64(%rdi)2240; KNL-NEXT:    vzeroupper2241; KNL-NEXT:    retq2242; KNL-NEXT:  LBB45_2: ## %L22243; KNL-NEXT:    vmovaps %zmm0, 4(%rdi)2244; KNL-NEXT:    vmovaps %zmm1, 68(%rdi)2245; KNL-NEXT:    vzeroupper2246; KNL-NEXT:    retq2247;2248; SKX-LABEL: ktest_2:2249; SKX:       ## %bb.0:2250; SKX-NEXT:    vcmpgtps (%rdi), %zmm0, %k12251; SKX-NEXT:    vcmpgtps 64(%rdi), %zmm1, %k22252; SKX-NEXT:    kunpckwd %k1, %k2, %k02253; SKX-NEXT:    vmovups 68(%rdi), %zmm2 {%k2} {z}2254; SKX-NEXT:    vmovups 4(%rdi), %zmm3 {%k1} {z}2255; SKX-NEXT:    vcmpltps %zmm3, %zmm0, %k12256; SKX-NEXT:    vcmpltps %zmm2, %zmm1, %k22257; SKX-NEXT:    kunpckwd %k1, %k2, %k12258; SKX-NEXT:    kortestd %k1, %k02259; SKX-NEXT:    je LBB45_22260; SKX-NEXT:  ## %bb.1: ## %L12261; SKX-NEXT:    vmovaps %zmm0, (%rdi)2262; SKX-NEXT:    vmovaps %zmm1, 64(%rdi)2263; SKX-NEXT:    vzeroupper2264; SKX-NEXT:    retq2265; SKX-NEXT:  LBB45_2: ## %L22266; SKX-NEXT:    vmovaps %zmm0, 4(%rdi)2267; SKX-NEXT:    vmovaps %zmm1, 68(%rdi)2268; SKX-NEXT:    vzeroupper2269; SKX-NEXT:    retq2270;2271; AVX512BW-LABEL: ktest_2:2272; AVX512BW:       ## %bb.0:2273; AVX512BW-NEXT:    vcmpgtps (%rdi), %zmm0, %k12274; AVX512BW-NEXT:    vcmpgtps 64(%rdi), %zmm1, %k22275; AVX512BW-NEXT:    kunpckwd %k1, %k2, %k02276; AVX512BW-NEXT:    vmovups 68(%rdi), %zmm2 {%k2} {z}2277; AVX512BW-NEXT:    vmovups 4(%rdi), %zmm3 {%k1} {z}2278; AVX512BW-NEXT:    vcmpltps %zmm3, %zmm0, %k12279; AVX512BW-NEXT:    vcmpltps %zmm2, %zmm1, %k22280; AVX512BW-NEXT:    kunpckwd %k1, %k2, %k12281; AVX512BW-NEXT:    kortestd %k1, %k02282; AVX512BW-NEXT:    je LBB45_22283; AVX512BW-NEXT:  ## %bb.1: ## %L12284; AVX512BW-NEXT:    vmovaps %zmm0, (%rdi)2285; AVX512BW-NEXT:    vmovaps %zmm1, 64(%rdi)2286; AVX512BW-NEXT:    vzeroupper2287; AVX512BW-NEXT:    retq2288; AVX512BW-NEXT:  LBB45_2: ## %L22289; AVX512BW-NEXT:    vmovaps %zmm0, 4(%rdi)2290; AVX512BW-NEXT:    vmovaps %zmm1, 68(%rdi)2291; AVX512BW-NEXT:    vzeroupper2292; AVX512BW-NEXT:    retq2293;2294; AVX512DQ-LABEL: ktest_2:2295; AVX512DQ:       ## %bb.0:2296; AVX512DQ-NEXT:    vcmpgtps (%rdi), %zmm0, %k12297; AVX512DQ-NEXT:    vcmpgtps 64(%rdi), %zmm1, %k22298; AVX512DQ-NEXT:    vmovups 68(%rdi), %zmm2 {%k2} {z}2299; AVX512DQ-NEXT:    vmovups 4(%rdi), %zmm3 {%k1} {z}2300; AVX512DQ-NEXT:    vcmpltps %zmm3, %zmm0, %k02301; AVX512DQ-NEXT:    vcmpltps %zmm2, %zmm1, %k32302; AVX512DQ-NEXT:    korw %k3, %k2, %k22303; AVX512DQ-NEXT:    korw %k0, %k1, %k02304; AVX512DQ-NEXT:    kortestw %k2, %k02305; AVX512DQ-NEXT:    je LBB45_22306; AVX512DQ-NEXT:  ## %bb.1: ## %L12307; AVX512DQ-NEXT:    vmovaps %zmm0, (%rdi)2308; AVX512DQ-NEXT:    vmovaps %zmm1, 64(%rdi)2309; AVX512DQ-NEXT:    vzeroupper2310; AVX512DQ-NEXT:    retq2311; AVX512DQ-NEXT:  LBB45_2: ## %L22312; AVX512DQ-NEXT:    vmovaps %zmm0, 4(%rdi)2313; AVX512DQ-NEXT:    vmovaps %zmm1, 68(%rdi)2314; AVX512DQ-NEXT:    vzeroupper2315; AVX512DQ-NEXT:    retq2316;2317; X86-LABEL: ktest_2:2318; X86:       ## %bb.0:2319; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2320; X86-NEXT:    vcmpgtps (%eax), %zmm0, %k12321; X86-NEXT:    vcmpgtps 64(%eax), %zmm1, %k22322; X86-NEXT:    kunpckwd %k1, %k2, %k02323; X86-NEXT:    vmovups 68(%eax), %zmm2 {%k2} {z}2324; X86-NEXT:    vmovups 4(%eax), %zmm3 {%k1} {z}2325; X86-NEXT:    vcmpltps %zmm3, %zmm0, %k12326; X86-NEXT:    vcmpltps %zmm2, %zmm1, %k22327; X86-NEXT:    kunpckwd %k1, %k2, %k12328; X86-NEXT:    kortestd %k1, %k02329; X86-NEXT:    je LBB45_22330; X86-NEXT:  ## %bb.1: ## %L12331; X86-NEXT:    vmovaps %zmm0, (%eax)2332; X86-NEXT:    vmovaps %zmm1, 64(%eax)2333; X86-NEXT:    vzeroupper2334; X86-NEXT:    retl2335; X86-NEXT:  LBB45_2: ## %L22336; X86-NEXT:    vmovaps %zmm0, 4(%eax)2337; X86-NEXT:    vmovaps %zmm1, 68(%eax)2338; X86-NEXT:    vzeroupper2339; X86-NEXT:    retl2340  %addr2 = getelementptr float, ptr %base, i64 12341 2342 2343  %val1 = load <32 x float>, ptr%base, align 12344  %val2 = load <32 x float>, ptr%addr2, align 12345 2346  %sel1 = fcmp ogt <32 x float>%in, %val12347  %val3 = select <32 x i1> %sel1, <32 x float> %val2, <32 x float> zeroinitializer2348  %sel2 = fcmp olt <32 x float> %in, %val32349  %sel3 = or <32 x i1> %sel1, %sel22350 2351  %int_sel3 = bitcast <32 x i1> %sel3 to i322352  %res = icmp eq i32 %int_sel3, zeroinitializer2353  br i1 %res, label %L2, label %L12354L1:2355  store <32 x float> %in, ptr %base2356  br label %End2357L2:2358  store <32 x float> %in, ptr %addr22359  br label %End2360End:2361  ret void2362}2363 2364define <8 x i64> @load_8i1(ptr %a) {2365; KNL-LABEL: load_8i1:2366; KNL:       ## %bb.0:2367; KNL-NEXT:    movzbl (%rdi), %eax2368; KNL-NEXT:    kmovw %eax, %k12369; KNL-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -12370; KNL-NEXT:    retq2371;2372; SKX-LABEL: load_8i1:2373; SKX:       ## %bb.0:2374; SKX-NEXT:    kmovb (%rdi), %k02375; SKX-NEXT:    vpmovm2q %k0, %zmm02376; SKX-NEXT:    retq2377;2378; AVX512BW-LABEL: load_8i1:2379; AVX512BW:       ## %bb.0:2380; AVX512BW-NEXT:    movzbl (%rdi), %eax2381; AVX512BW-NEXT:    kmovd %eax, %k12382; AVX512BW-NEXT:    vpternlogq {{.*#+}} zmm0 {%k1} {z} = -12383; AVX512BW-NEXT:    retq2384;2385; AVX512DQ-LABEL: load_8i1:2386; AVX512DQ:       ## %bb.0:2387; AVX512DQ-NEXT:    kmovb (%rdi), %k02388; AVX512DQ-NEXT:    vpmovm2q %k0, %zmm02389; AVX512DQ-NEXT:    retq2390;2391; X86-LABEL: load_8i1:2392; X86:       ## %bb.0:2393; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2394; X86-NEXT:    kmovb (%eax), %k02395; X86-NEXT:    vpmovm2q %k0, %zmm02396; X86-NEXT:    retl2397  %b = load <8 x i1>, ptr %a2398  %c = sext <8 x i1> %b to <8 x i64>2399  ret <8 x i64> %c2400}2401 2402define <16 x i32> @load_16i1(ptr %a) {2403; KNL-LABEL: load_16i1:2404; KNL:       ## %bb.0:2405; KNL-NEXT:    kmovw (%rdi), %k12406; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -12407; KNL-NEXT:    retq2408;2409; SKX-LABEL: load_16i1:2410; SKX:       ## %bb.0:2411; SKX-NEXT:    kmovw (%rdi), %k02412; SKX-NEXT:    vpmovm2d %k0, %zmm02413; SKX-NEXT:    retq2414;2415; AVX512BW-LABEL: load_16i1:2416; AVX512BW:       ## %bb.0:2417; AVX512BW-NEXT:    kmovw (%rdi), %k12418; AVX512BW-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -12419; AVX512BW-NEXT:    retq2420;2421; AVX512DQ-LABEL: load_16i1:2422; AVX512DQ:       ## %bb.0:2423; AVX512DQ-NEXT:    kmovw (%rdi), %k02424; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm02425; AVX512DQ-NEXT:    retq2426;2427; X86-LABEL: load_16i1:2428; X86:       ## %bb.0:2429; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2430; X86-NEXT:    kmovw (%eax), %k02431; X86-NEXT:    vpmovm2d %k0, %zmm02432; X86-NEXT:    retl2433  %b = load <16 x i1>, ptr %a2434  %c = sext <16 x i1> %b to <16 x i32>2435  ret <16 x i32> %c2436}2437 2438define <2 x i16> @load_2i1(ptr %a) {2439; KNL-LABEL: load_2i1:2440; KNL:       ## %bb.0:2441; KNL-NEXT:    movzbl (%rdi), %eax2442; KNL-NEXT:    kmovw %eax, %k12443; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -12444; KNL-NEXT:    vpmovdw %zmm0, %ymm02445; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm02446; KNL-NEXT:    vzeroupper2447; KNL-NEXT:    retq2448;2449; SKX-LABEL: load_2i1:2450; SKX:       ## %bb.0:2451; SKX-NEXT:    kmovb (%rdi), %k02452; SKX-NEXT:    vpmovm2w %k0, %xmm02453; SKX-NEXT:    retq2454;2455; AVX512BW-LABEL: load_2i1:2456; AVX512BW:       ## %bb.0:2457; AVX512BW-NEXT:    movzbl (%rdi), %eax2458; AVX512BW-NEXT:    kmovd %eax, %k02459; AVX512BW-NEXT:    vpmovm2w %k0, %zmm02460; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm02461; AVX512BW-NEXT:    vzeroupper2462; AVX512BW-NEXT:    retq2463;2464; AVX512DQ-LABEL: load_2i1:2465; AVX512DQ:       ## %bb.0:2466; AVX512DQ-NEXT:    kmovb (%rdi), %k02467; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm02468; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm02469; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm02470; AVX512DQ-NEXT:    vzeroupper2471; AVX512DQ-NEXT:    retq2472;2473; X86-LABEL: load_2i1:2474; X86:       ## %bb.0:2475; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2476; X86-NEXT:    kmovb (%eax), %k02477; X86-NEXT:    vpmovm2w %k0, %xmm02478; X86-NEXT:    retl2479  %b = load <2 x i1>, ptr %a2480  %c = sext <2 x i1> %b to <2 x i16>2481  ret <2 x i16> %c2482}2483 2484define <4 x i16> @load_4i1(ptr %a) {2485; KNL-LABEL: load_4i1:2486; KNL:       ## %bb.0:2487; KNL-NEXT:    movzbl (%rdi), %eax2488; KNL-NEXT:    kmovw %eax, %k12489; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -12490; KNL-NEXT:    vpmovdw %zmm0, %ymm02491; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm02492; KNL-NEXT:    vzeroupper2493; KNL-NEXT:    retq2494;2495; SKX-LABEL: load_4i1:2496; SKX:       ## %bb.0:2497; SKX-NEXT:    kmovb (%rdi), %k02498; SKX-NEXT:    vpmovm2w %k0, %xmm02499; SKX-NEXT:    retq2500;2501; AVX512BW-LABEL: load_4i1:2502; AVX512BW:       ## %bb.0:2503; AVX512BW-NEXT:    movzbl (%rdi), %eax2504; AVX512BW-NEXT:    kmovd %eax, %k02505; AVX512BW-NEXT:    vpmovm2w %k0, %zmm02506; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm02507; AVX512BW-NEXT:    vzeroupper2508; AVX512BW-NEXT:    retq2509;2510; AVX512DQ-LABEL: load_4i1:2511; AVX512DQ:       ## %bb.0:2512; AVX512DQ-NEXT:    kmovb (%rdi), %k02513; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm02514; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm02515; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm02516; AVX512DQ-NEXT:    vzeroupper2517; AVX512DQ-NEXT:    retq2518;2519; X86-LABEL: load_4i1:2520; X86:       ## %bb.0:2521; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2522; X86-NEXT:    kmovb (%eax), %k02523; X86-NEXT:    vpmovm2w %k0, %xmm02524; X86-NEXT:    retl2525  %b = load <4 x i1>, ptr %a2526  %c = sext <4 x i1> %b to <4 x i16>2527  ret <4 x i16> %c2528}2529 2530define <32 x i16> @load_32i1(ptr %a) {2531; KNL-LABEL: load_32i1:2532; KNL:       ## %bb.0:2533; KNL-NEXT:    kmovw (%rdi), %k12534; KNL-NEXT:    kmovw 2(%rdi), %k22535; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -12536; KNL-NEXT:    vpmovdw %zmm0, %ymm02537; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k2} {z} = -12538; KNL-NEXT:    vpmovdw %zmm1, %ymm12539; KNL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm02540; KNL-NEXT:    retq2541;2542; SKX-LABEL: load_32i1:2543; SKX:       ## %bb.0:2544; SKX-NEXT:    kmovd (%rdi), %k02545; SKX-NEXT:    vpmovm2w %k0, %zmm02546; SKX-NEXT:    retq2547;2548; AVX512BW-LABEL: load_32i1:2549; AVX512BW:       ## %bb.0:2550; AVX512BW-NEXT:    kmovd (%rdi), %k02551; AVX512BW-NEXT:    vpmovm2w %k0, %zmm02552; AVX512BW-NEXT:    retq2553;2554; AVX512DQ-LABEL: load_32i1:2555; AVX512DQ:       ## %bb.0:2556; AVX512DQ-NEXT:    kmovw (%rdi), %k02557; AVX512DQ-NEXT:    kmovw 2(%rdi), %k12558; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm02559; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm02560; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm12561; AVX512DQ-NEXT:    vpmovdw %zmm1, %ymm12562; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm02563; AVX512DQ-NEXT:    retq2564;2565; X86-LABEL: load_32i1:2566; X86:       ## %bb.0:2567; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2568; X86-NEXT:    kmovd (%eax), %k02569; X86-NEXT:    vpmovm2w %k0, %zmm02570; X86-NEXT:    retl2571  %b = load <32 x i1>, ptr %a2572  %c = sext <32 x i1> %b to <32 x i16>2573  ret <32 x i16> %c2574}2575 2576define <64 x i8> @load_64i1(ptr %a) {2577; KNL-LABEL: load_64i1:2578; KNL:       ## %bb.0:2579; KNL-NEXT:    kmovw (%rdi), %k12580; KNL-NEXT:    kmovw 2(%rdi), %k22581; KNL-NEXT:    kmovw 4(%rdi), %k32582; KNL-NEXT:    kmovw 6(%rdi), %k42583; KNL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k3} {z} = -12584; KNL-NEXT:    vpmovdb %zmm0, %xmm02585; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k4} {z} = -12586; KNL-NEXT:    vpmovdb %zmm1, %xmm12587; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02588; KNL-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -12589; KNL-NEXT:    vpmovdb %zmm1, %xmm12590; KNL-NEXT:    vpternlogd {{.*#+}} zmm2 {%k2} {z} = -12591; KNL-NEXT:    vpmovdb %zmm2, %xmm22592; KNL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm12593; KNL-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm02594; KNL-NEXT:    retq2595;2596; SKX-LABEL: load_64i1:2597; SKX:       ## %bb.0:2598; SKX-NEXT:    kmovq (%rdi), %k02599; SKX-NEXT:    vpmovm2b %k0, %zmm02600; SKX-NEXT:    retq2601;2602; AVX512BW-LABEL: load_64i1:2603; AVX512BW:       ## %bb.0:2604; AVX512BW-NEXT:    kmovq (%rdi), %k02605; AVX512BW-NEXT:    vpmovm2b %k0, %zmm02606; AVX512BW-NEXT:    retq2607;2608; AVX512DQ-LABEL: load_64i1:2609; AVX512DQ:       ## %bb.0:2610; AVX512DQ-NEXT:    kmovw (%rdi), %k02611; AVX512DQ-NEXT:    kmovw 2(%rdi), %k12612; AVX512DQ-NEXT:    kmovw 4(%rdi), %k22613; AVX512DQ-NEXT:    kmovw 6(%rdi), %k32614; AVX512DQ-NEXT:    vpmovm2d %k2, %zmm02615; AVX512DQ-NEXT:    vpmovdb %zmm0, %xmm02616; AVX512DQ-NEXT:    vpmovm2d %k3, %zmm12617; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm12618; AVX512DQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02619; AVX512DQ-NEXT:    vpmovm2d %k0, %zmm12620; AVX512DQ-NEXT:    vpmovdb %zmm1, %xmm12621; AVX512DQ-NEXT:    vpmovm2d %k1, %zmm22622; AVX512DQ-NEXT:    vpmovdb %zmm2, %xmm22623; AVX512DQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm12624; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm02625; AVX512DQ-NEXT:    retq2626;2627; X86-LABEL: load_64i1:2628; X86:       ## %bb.0:2629; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2630; X86-NEXT:    kmovq (%eax), %k02631; X86-NEXT:    vpmovm2b %k0, %zmm02632; X86-NEXT:    retl2633  %b = load <64 x i1>, ptr %a2634  %c = sext <64 x i1> %b to <64 x i8>2635  ret <64 x i8> %c2636}2637 2638define void @store_8i1(ptr %a, <8 x i1> %v) {2639; KNL-LABEL: store_8i1:2640; KNL:       ## %bb.0:2641; KNL-NEXT:    vpmovsxwq %xmm0, %zmm02642; KNL-NEXT:    vpsllq $63, %zmm0, %zmm02643; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k02644; KNL-NEXT:    kmovw %k0, %eax2645; KNL-NEXT:    movb %al, (%rdi)2646; KNL-NEXT:    vzeroupper2647; KNL-NEXT:    retq2648;2649; SKX-LABEL: store_8i1:2650; SKX:       ## %bb.0:2651; SKX-NEXT:    vpsllw $15, %xmm0, %xmm02652; SKX-NEXT:    vpmovw2m %xmm0, %k02653; SKX-NEXT:    kmovb %k0, (%rdi)2654; SKX-NEXT:    retq2655;2656; AVX512BW-LABEL: store_8i1:2657; AVX512BW:       ## %bb.0:2658; AVX512BW-NEXT:    vpsllw $15, %xmm0, %xmm02659; AVX512BW-NEXT:    vpmovw2m %zmm0, %k02660; AVX512BW-NEXT:    kmovd %k0, %eax2661; AVX512BW-NEXT:    movb %al, (%rdi)2662; AVX512BW-NEXT:    vzeroupper2663; AVX512BW-NEXT:    retq2664;2665; AVX512DQ-LABEL: store_8i1:2666; AVX512DQ:       ## %bb.0:2667; AVX512DQ-NEXT:    vpmovsxwq %xmm0, %zmm02668; AVX512DQ-NEXT:    vpsllq $63, %zmm0, %zmm02669; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k02670; AVX512DQ-NEXT:    kmovb %k0, (%rdi)2671; AVX512DQ-NEXT:    vzeroupper2672; AVX512DQ-NEXT:    retq2673;2674; X86-LABEL: store_8i1:2675; X86:       ## %bb.0:2676; X86-NEXT:    vpsllw $15, %xmm0, %xmm02677; X86-NEXT:    vpmovw2m %xmm0, %k02678; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2679; X86-NEXT:    kmovb %k0, (%eax)2680; X86-NEXT:    retl2681  store <8 x i1> %v, ptr %a2682  ret void2683}2684 2685define void @store_8i1_1(ptr %a, <8 x i16> %v) {2686; KNL-LABEL: store_8i1_1:2687; KNL:       ## %bb.0:2688; KNL-NEXT:    vpmovsxwq %xmm0, %zmm02689; KNL-NEXT:    vpsllq $63, %zmm0, %zmm02690; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k02691; KNL-NEXT:    kmovw %k0, %eax2692; KNL-NEXT:    movb %al, (%rdi)2693; KNL-NEXT:    vzeroupper2694; KNL-NEXT:    retq2695;2696; SKX-LABEL: store_8i1_1:2697; SKX:       ## %bb.0:2698; SKX-NEXT:    vpsllw $15, %xmm0, %xmm02699; SKX-NEXT:    vpmovw2m %xmm0, %k02700; SKX-NEXT:    kmovb %k0, (%rdi)2701; SKX-NEXT:    retq2702;2703; AVX512BW-LABEL: store_8i1_1:2704; AVX512BW:       ## %bb.0:2705; AVX512BW-NEXT:    vpsllw $15, %xmm0, %xmm02706; AVX512BW-NEXT:    vpmovw2m %zmm0, %k02707; AVX512BW-NEXT:    kmovd %k0, %eax2708; AVX512BW-NEXT:    movb %al, (%rdi)2709; AVX512BW-NEXT:    vzeroupper2710; AVX512BW-NEXT:    retq2711;2712; AVX512DQ-LABEL: store_8i1_1:2713; AVX512DQ:       ## %bb.0:2714; AVX512DQ-NEXT:    vpmovsxwq %xmm0, %zmm02715; AVX512DQ-NEXT:    vpsllq $63, %zmm0, %zmm02716; AVX512DQ-NEXT:    vpmovq2m %zmm0, %k02717; AVX512DQ-NEXT:    kmovb %k0, (%rdi)2718; AVX512DQ-NEXT:    vzeroupper2719; AVX512DQ-NEXT:    retq2720;2721; X86-LABEL: store_8i1_1:2722; X86:       ## %bb.0:2723; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2724; X86-NEXT:    vpsllw $15, %xmm0, %xmm02725; X86-NEXT:    vpmovw2m %xmm0, %k02726; X86-NEXT:    kmovb %k0, (%eax)2727; X86-NEXT:    retl2728  %v1 = trunc <8 x i16> %v to <8 x i1>2729  store <8 x i1> %v1, ptr %a2730  ret void2731}2732 2733define void @store_16i1(ptr %a, <16 x i1> %v) {2734; KNL-LABEL: store_16i1:2735; KNL:       ## %bb.0:2736; KNL-NEXT:    vpmovsxbd %xmm0, %zmm02737; KNL-NEXT:    vpslld $31, %zmm0, %zmm02738; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k02739; KNL-NEXT:    kmovw %k0, (%rdi)2740; KNL-NEXT:    vzeroupper2741; KNL-NEXT:    retq2742;2743; SKX-LABEL: store_16i1:2744; SKX:       ## %bb.0:2745; SKX-NEXT:    vpsllw $7, %xmm0, %xmm02746; SKX-NEXT:    vpmovb2m %xmm0, %k02747; SKX-NEXT:    kmovw %k0, (%rdi)2748; SKX-NEXT:    retq2749;2750; AVX512BW-LABEL: store_16i1:2751; AVX512BW:       ## %bb.0:2752; AVX512BW-NEXT:    vpsllw $7, %xmm0, %xmm02753; AVX512BW-NEXT:    vpmovb2m %zmm0, %k02754; AVX512BW-NEXT:    kmovw %k0, (%rdi)2755; AVX512BW-NEXT:    vzeroupper2756; AVX512BW-NEXT:    retq2757;2758; AVX512DQ-LABEL: store_16i1:2759; AVX512DQ:       ## %bb.0:2760; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm02761; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm02762; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k02763; AVX512DQ-NEXT:    kmovw %k0, (%rdi)2764; AVX512DQ-NEXT:    vzeroupper2765; AVX512DQ-NEXT:    retq2766;2767; X86-LABEL: store_16i1:2768; X86:       ## %bb.0:2769; X86-NEXT:    vpsllw $7, %xmm0, %xmm02770; X86-NEXT:    vpmovb2m %xmm0, %k02771; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2772; X86-NEXT:    kmovw %k0, (%eax)2773; X86-NEXT:    retl2774  store <16 x i1> %v, ptr %a2775  ret void2776}2777 2778define void @store_32i1(ptr %a, <32 x i1> %v) {2779; KNL-LABEL: store_32i1:2780; KNL:       ## %bb.0:2781; KNL-NEXT:    vpmovsxbd %xmm0, %zmm12782; KNL-NEXT:    vpslld $31, %zmm1, %zmm12783; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k02784; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm02785; KNL-NEXT:    vpmovsxbd %xmm0, %zmm02786; KNL-NEXT:    vpslld $31, %zmm0, %zmm02787; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k12788; KNL-NEXT:    kmovw %k1, 2(%rdi)2789; KNL-NEXT:    kmovw %k0, (%rdi)2790; KNL-NEXT:    vzeroupper2791; KNL-NEXT:    retq2792;2793; SKX-LABEL: store_32i1:2794; SKX:       ## %bb.0:2795; SKX-NEXT:    vpsllw $7, %ymm0, %ymm02796; SKX-NEXT:    vpmovb2m %ymm0, %k02797; SKX-NEXT:    kmovd %k0, (%rdi)2798; SKX-NEXT:    vzeroupper2799; SKX-NEXT:    retq2800;2801; AVX512BW-LABEL: store_32i1:2802; AVX512BW:       ## %bb.0:2803; AVX512BW-NEXT:    vpsllw $7, %ymm0, %ymm02804; AVX512BW-NEXT:    vpmovb2m %zmm0, %k02805; AVX512BW-NEXT:    kmovd %k0, (%rdi)2806; AVX512BW-NEXT:    vzeroupper2807; AVX512BW-NEXT:    retq2808;2809; AVX512DQ-LABEL: store_32i1:2810; AVX512DQ:       ## %bb.0:2811; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm12812; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm12813; AVX512DQ-NEXT:    vpmovd2m %zmm1, %k02814; AVX512DQ-NEXT:    vextracti128 $1, %ymm0, %xmm02815; AVX512DQ-NEXT:    vpmovsxbd %xmm0, %zmm02816; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm02817; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k12818; AVX512DQ-NEXT:    kmovw %k1, 2(%rdi)2819; AVX512DQ-NEXT:    kmovw %k0, (%rdi)2820; AVX512DQ-NEXT:    vzeroupper2821; AVX512DQ-NEXT:    retq2822;2823; X86-LABEL: store_32i1:2824; X86:       ## %bb.0:2825; X86-NEXT:    vpsllw $7, %ymm0, %ymm02826; X86-NEXT:    vpmovb2m %ymm0, %k02827; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2828; X86-NEXT:    kmovd %k0, (%eax)2829; X86-NEXT:    vzeroupper2830; X86-NEXT:    retl2831  store <32 x i1> %v, ptr %a2832  ret void2833}2834 2835define void @store_32i1_1(ptr %a, <32 x i16> %v) {2836; KNL-LABEL: store_32i1_1:2837; KNL:       ## %bb.0:2838; KNL-NEXT:    vpmovsxwd %ymm0, %zmm12839; KNL-NEXT:    vpslld $31, %zmm1, %zmm12840; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k02841; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm02842; KNL-NEXT:    vpmovsxwd %ymm0, %zmm02843; KNL-NEXT:    vpslld $31, %zmm0, %zmm02844; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k12845; KNL-NEXT:    kmovw %k1, 2(%rdi)2846; KNL-NEXT:    kmovw %k0, (%rdi)2847; KNL-NEXT:    vzeroupper2848; KNL-NEXT:    retq2849;2850; SKX-LABEL: store_32i1_1:2851; SKX:       ## %bb.0:2852; SKX-NEXT:    vpsllw $15, %zmm0, %zmm02853; SKX-NEXT:    vpmovw2m %zmm0, %k02854; SKX-NEXT:    kmovd %k0, (%rdi)2855; SKX-NEXT:    vzeroupper2856; SKX-NEXT:    retq2857;2858; AVX512BW-LABEL: store_32i1_1:2859; AVX512BW:       ## %bb.0:2860; AVX512BW-NEXT:    vpsllw $15, %zmm0, %zmm02861; AVX512BW-NEXT:    vpmovw2m %zmm0, %k02862; AVX512BW-NEXT:    kmovd %k0, (%rdi)2863; AVX512BW-NEXT:    vzeroupper2864; AVX512BW-NEXT:    retq2865;2866; AVX512DQ-LABEL: store_32i1_1:2867; AVX512DQ:       ## %bb.0:2868; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm12869; AVX512DQ-NEXT:    vpslld $31, %zmm1, %zmm12870; AVX512DQ-NEXT:    vpmovd2m %zmm1, %k02871; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm02872; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm02873; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm02874; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k12875; AVX512DQ-NEXT:    kmovw %k1, 2(%rdi)2876; AVX512DQ-NEXT:    kmovw %k0, (%rdi)2877; AVX512DQ-NEXT:    vzeroupper2878; AVX512DQ-NEXT:    retq2879;2880; X86-LABEL: store_32i1_1:2881; X86:       ## %bb.0:2882; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax2883; X86-NEXT:    vpsllw $15, %zmm0, %zmm02884; X86-NEXT:    vpmovw2m %zmm0, %k02885; X86-NEXT:    kmovd %k0, (%eax)2886; X86-NEXT:    vzeroupper2887; X86-NEXT:    retl2888  %v1 = trunc <32 x i16> %v to <32 x i1>2889  store <32 x i1> %v1, ptr %a2890  ret void2891}2892 2893 2894define void @store_64i1(ptr %a, <64 x i1> %v) {2895;2896; KNL-LABEL: store_64i1:2897; KNL:       ## %bb.0:2898; KNL-NEXT:    andl $1, %esi2899; KNL-NEXT:    kmovw %esi, %k02900; KNL-NEXT:    kmovw %edx, %k12901; KNL-NEXT:    kshiftlw $15, %k1, %k12902; KNL-NEXT:    kshiftrw $14, %k1, %k12903; KNL-NEXT:    korw %k1, %k0, %k02904; KNL-NEXT:    movw $-5, %ax2905; KNL-NEXT:    kmovw %eax, %k12906; KNL-NEXT:    kandw %k1, %k0, %k02907; KNL-NEXT:    kmovw %k1, %k72908; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2909; KNL-NEXT:    kmovw %ecx, %k12910; KNL-NEXT:    kshiftlw $15, %k1, %k12911; KNL-NEXT:    kshiftrw $13, %k1, %k12912; KNL-NEXT:    korw %k1, %k0, %k02913; KNL-NEXT:    movw $-9, %ax2914; KNL-NEXT:    kmovw %eax, %k12915; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2916; KNL-NEXT:    kandw %k1, %k0, %k02917; KNL-NEXT:    kmovw %r8d, %k12918; KNL-NEXT:    kshiftlw $15, %k1, %k12919; KNL-NEXT:    kshiftrw $12, %k1, %k12920; KNL-NEXT:    korw %k1, %k0, %k02921; KNL-NEXT:    movw $-17, %ax2922; KNL-NEXT:    kmovw %eax, %k12923; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2924; KNL-NEXT:    kandw %k1, %k0, %k02925; KNL-NEXT:    kmovw %r9d, %k12926; KNL-NEXT:    kshiftlw $15, %k1, %k12927; KNL-NEXT:    kshiftrw $11, %k1, %k12928; KNL-NEXT:    korw %k1, %k0, %k02929; KNL-NEXT:    movw $-33, %ax2930; KNL-NEXT:    kmovw %eax, %k12931; KNL-NEXT:    kandw %k1, %k0, %k02932; KNL-NEXT:    kmovw %k1, %k22933; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2934; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2935; KNL-NEXT:    kmovw %eax, %k12936; KNL-NEXT:    kshiftlw $15, %k1, %k12937; KNL-NEXT:    kshiftrw $10, %k1, %k12938; KNL-NEXT:    korw %k1, %k0, %k02939; KNL-NEXT:    movw $-65, %ax2940; KNL-NEXT:    kmovw %eax, %k12941; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2942; KNL-NEXT:    kandw %k1, %k0, %k02943; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2944; KNL-NEXT:    kmovw %eax, %k12945; KNL-NEXT:    kshiftlw $15, %k1, %k12946; KNL-NEXT:    kshiftrw $9, %k1, %k12947; KNL-NEXT:    korw %k1, %k0, %k02948; KNL-NEXT:    movw $-129, %ax2949; KNL-NEXT:    kmovw %eax, %k12950; KNL-NEXT:    kandw %k1, %k0, %k02951; KNL-NEXT:    kmovw %k1, %k32952; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2953; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2954; KNL-NEXT:    kmovw %eax, %k12955; KNL-NEXT:    kshiftlw $15, %k1, %k12956; KNL-NEXT:    kshiftrw $8, %k1, %k12957; KNL-NEXT:    korw %k1, %k0, %k02958; KNL-NEXT:    movw $-257, %ax ## imm = 0xFEFF2959; KNL-NEXT:    kmovw %eax, %k12960; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2961; KNL-NEXT:    kandw %k1, %k0, %k02962; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2963; KNL-NEXT:    kmovw %eax, %k12964; KNL-NEXT:    kshiftlw $15, %k1, %k12965; KNL-NEXT:    kshiftrw $7, %k1, %k12966; KNL-NEXT:    korw %k1, %k0, %k02967; KNL-NEXT:    movw $-513, %ax ## imm = 0xFDFF2968; KNL-NEXT:    kmovw %eax, %k12969; KNL-NEXT:    kandw %k1, %k0, %k02970; KNL-NEXT:    kmovw %k1, %k42971; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2972; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2973; KNL-NEXT:    kmovw %eax, %k12974; KNL-NEXT:    kshiftlw $15, %k1, %k12975; KNL-NEXT:    kshiftrw $6, %k1, %k12976; KNL-NEXT:    korw %k1, %k0, %k02977; KNL-NEXT:    movw $-1025, %ax ## imm = 0xFBFF2978; KNL-NEXT:    kmovw %eax, %k12979; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2980; KNL-NEXT:    kandw %k1, %k0, %k02981; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2982; KNL-NEXT:    kmovw %eax, %k12983; KNL-NEXT:    kshiftlw $15, %k1, %k12984; KNL-NEXT:    kshiftrw $5, %k1, %k12985; KNL-NEXT:    korw %k1, %k0, %k02986; KNL-NEXT:    movw $-2049, %ax ## imm = 0xF7FF2987; KNL-NEXT:    kmovw %eax, %k52988; KNL-NEXT:    kandw %k5, %k0, %k02989; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2990; KNL-NEXT:    kmovw %eax, %k12991; KNL-NEXT:    kshiftlw $15, %k1, %k12992; KNL-NEXT:    kshiftrw $4, %k1, %k12993; KNL-NEXT:    korw %k1, %k0, %k02994; KNL-NEXT:    movw $-4097, %ax ## imm = 0xEFFF2995; KNL-NEXT:    kmovw %eax, %k12996; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill2997; KNL-NEXT:    kandw %k1, %k0, %k02998; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax2999; KNL-NEXT:    kmovw %eax, %k13000; KNL-NEXT:    kshiftlw $15, %k1, %k13001; KNL-NEXT:    kshiftrw $3, %k1, %k13002; KNL-NEXT:    korw %k1, %k0, %k03003; KNL-NEXT:    movw $-8193, %ax ## imm = 0xDFFF3004; KNL-NEXT:    kmovw %eax, %k13005; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3006; KNL-NEXT:    kandw %k1, %k0, %k03007; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3008; KNL-NEXT:    kmovw %eax, %k13009; KNL-NEXT:    kshiftlw $15, %k1, %k13010; KNL-NEXT:    kshiftrw $2, %k1, %k13011; KNL-NEXT:    korw %k1, %k0, %k03012; KNL-NEXT:    movw $-16385, %ax ## imm = 0xBFFF3013; KNL-NEXT:    kmovw %eax, %k13014; KNL-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3015; KNL-NEXT:    kandw %k1, %k0, %k03016; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3017; KNL-NEXT:    kmovw %eax, %k63018; KNL-NEXT:    kshiftlw $14, %k6, %k63019; KNL-NEXT:    korw %k6, %k0, %k03020; KNL-NEXT:    kshiftlw $1, %k0, %k03021; KNL-NEXT:    kshiftrw $1, %k0, %k03022; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3023; KNL-NEXT:    kmovw %eax, %k63024; KNL-NEXT:    kshiftlw $15, %k6, %k63025; KNL-NEXT:    korw %k6, %k0, %k03026; KNL-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3027; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3028; KNL-NEXT:    andl $1, %eax3029; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3030; KNL-NEXT:    kmovw %ecx, %k03031; KNL-NEXT:    kshiftlw $15, %k0, %k03032; KNL-NEXT:    kshiftrw $14, %k0, %k03033; KNL-NEXT:    kmovw %eax, %k63034; KNL-NEXT:    korw %k0, %k6, %k03035; KNL-NEXT:    kandw %k7, %k0, %k03036; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3037; KNL-NEXT:    kmovw %eax, %k63038; KNL-NEXT:    kshiftlw $15, %k6, %k63039; KNL-NEXT:    kshiftrw $13, %k6, %k63040; KNL-NEXT:    korw %k6, %k0, %k03041; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 ## 2-byte Reload3042; KNL-NEXT:    kandw %k7, %k0, %k03043; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3044; KNL-NEXT:    kmovw %eax, %k63045; KNL-NEXT:    kshiftlw $15, %k6, %k63046; KNL-NEXT:    kshiftrw $12, %k6, %k63047; KNL-NEXT:    korw %k6, %k0, %k03048; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3049; KNL-NEXT:    kandw %k1, %k0, %k03050; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3051; KNL-NEXT:    kmovw %eax, %k63052; KNL-NEXT:    kshiftlw $15, %k6, %k63053; KNL-NEXT:    kshiftrw $11, %k6, %k63054; KNL-NEXT:    korw %k6, %k0, %k03055; KNL-NEXT:    kandw %k2, %k0, %k03056; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3057; KNL-NEXT:    kmovw %eax, %k63058; KNL-NEXT:    kshiftlw $15, %k6, %k63059; KNL-NEXT:    kshiftrw $10, %k6, %k63060; KNL-NEXT:    korw %k6, %k0, %k03061; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 ## 2-byte Reload3062; KNL-NEXT:    kandw %k2, %k0, %k03063; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3064; KNL-NEXT:    kmovw %eax, %k63065; KNL-NEXT:    kshiftlw $15, %k6, %k63066; KNL-NEXT:    kshiftrw $9, %k6, %k63067; KNL-NEXT:    korw %k6, %k0, %k03068; KNL-NEXT:    kandw %k3, %k0, %k03069; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3070; KNL-NEXT:    kmovw %eax, %k63071; KNL-NEXT:    kshiftlw $15, %k6, %k63072; KNL-NEXT:    kshiftrw $8, %k6, %k63073; KNL-NEXT:    korw %k6, %k0, %k03074; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3075; KNL-NEXT:    kandw %k3, %k0, %k03076; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3077; KNL-NEXT:    kmovw %eax, %k63078; KNL-NEXT:    kshiftlw $15, %k6, %k63079; KNL-NEXT:    kshiftrw $7, %k6, %k63080; KNL-NEXT:    korw %k6, %k0, %k03081; KNL-NEXT:    kandw %k4, %k0, %k03082; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3083; KNL-NEXT:    kmovw %eax, %k63084; KNL-NEXT:    kshiftlw $15, %k6, %k63085; KNL-NEXT:    kshiftrw $6, %k6, %k63086; KNL-NEXT:    korw %k6, %k0, %k03087; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 ## 2-byte Reload3088; KNL-NEXT:    kandw %k4, %k0, %k03089; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3090; KNL-NEXT:    kmovw %eax, %k63091; KNL-NEXT:    kshiftlw $15, %k6, %k63092; KNL-NEXT:    kshiftrw $5, %k6, %k63093; KNL-NEXT:    korw %k6, %k0, %k03094; KNL-NEXT:    kmovw %k5, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3095; KNL-NEXT:    kandw %k5, %k0, %k03096; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3097; KNL-NEXT:    kmovw %eax, %k63098; KNL-NEXT:    kshiftlw $15, %k6, %k63099; KNL-NEXT:    kshiftrw $4, %k6, %k63100; KNL-NEXT:    korw %k6, %k0, %k03101; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3102; KNL-NEXT:    kandw %k6, %k0, %k03103; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3104; KNL-NEXT:    kmovw %eax, %k63105; KNL-NEXT:    kshiftlw $15, %k6, %k63106; KNL-NEXT:    kshiftrw $3, %k6, %k63107; KNL-NEXT:    korw %k6, %k0, %k03108; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3109; KNL-NEXT:    kandw %k6, %k0, %k03110; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3111; KNL-NEXT:    kmovw %eax, %k63112; KNL-NEXT:    kshiftlw $15, %k6, %k63113; KNL-NEXT:    kshiftrw $2, %k6, %k63114; KNL-NEXT:    korw %k6, %k0, %k03115; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3116; KNL-NEXT:    kandw %k6, %k0, %k03117; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3118; KNL-NEXT:    kmovw %eax, %k63119; KNL-NEXT:    kshiftlw $14, %k6, %k63120; KNL-NEXT:    korw %k6, %k0, %k03121; KNL-NEXT:    kshiftlw $1, %k0, %k03122; KNL-NEXT:    kshiftrw $1, %k0, %k03123; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3124; KNL-NEXT:    kmovw %eax, %k63125; KNL-NEXT:    kshiftlw $15, %k6, %k63126; KNL-NEXT:    korw %k6, %k0, %k03127; KNL-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3128; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3129; KNL-NEXT:    andl $1, %eax3130; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3131; KNL-NEXT:    kmovw %ecx, %k03132; KNL-NEXT:    kshiftlw $15, %k0, %k03133; KNL-NEXT:    kshiftrw $14, %k0, %k03134; KNL-NEXT:    kmovw %eax, %k63135; KNL-NEXT:    korw %k0, %k6, %k03136; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3137; KNL-NEXT:    kandw %k6, %k0, %k03138; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3139; KNL-NEXT:    kmovw %eax, %k63140; KNL-NEXT:    kshiftlw $15, %k6, %k63141; KNL-NEXT:    kshiftrw $13, %k6, %k63142; KNL-NEXT:    korw %k6, %k0, %k03143; KNL-NEXT:    kandw %k7, %k0, %k03144; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3145; KNL-NEXT:    kmovw %eax, %k63146; KNL-NEXT:    kshiftlw $15, %k6, %k63147; KNL-NEXT:    kshiftrw $12, %k6, %k63148; KNL-NEXT:    korw %k6, %k0, %k03149; KNL-NEXT:    kandw %k1, %k0, %k03150; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3151; KNL-NEXT:    kmovw %eax, %k63152; KNL-NEXT:    kshiftlw $15, %k6, %k63153; KNL-NEXT:    kshiftrw $11, %k6, %k63154; KNL-NEXT:    korw %k6, %k0, %k03155; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3156; KNL-NEXT:    kandw %k1, %k0, %k03157; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3158; KNL-NEXT:    kmovw %eax, %k63159; KNL-NEXT:    kshiftlw $15, %k6, %k63160; KNL-NEXT:    kshiftrw $10, %k6, %k63161; KNL-NEXT:    korw %k6, %k0, %k03162; KNL-NEXT:    kandw %k2, %k0, %k03163; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3164; KNL-NEXT:    kmovw %eax, %k63165; KNL-NEXT:    kshiftlw $15, %k6, %k63166; KNL-NEXT:    kshiftrw $9, %k6, %k63167; KNL-NEXT:    korw %k6, %k0, %k03168; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3169; KNL-NEXT:    kandw %k1, %k0, %k03170; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3171; KNL-NEXT:    kmovw %eax, %k63172; KNL-NEXT:    kshiftlw $15, %k6, %k63173; KNL-NEXT:    kshiftrw $8, %k6, %k63174; KNL-NEXT:    korw %k6, %k0, %k03175; KNL-NEXT:    kandw %k3, %k0, %k03176; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3177; KNL-NEXT:    kmovw %eax, %k63178; KNL-NEXT:    kshiftlw $15, %k6, %k63179; KNL-NEXT:    kshiftrw $7, %k6, %k63180; KNL-NEXT:    korw %k6, %k0, %k03181; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3182; KNL-NEXT:    kandw %k3, %k0, %k03183; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3184; KNL-NEXT:    kmovw %eax, %k63185; KNL-NEXT:    kshiftlw $15, %k6, %k63186; KNL-NEXT:    kshiftrw $6, %k6, %k63187; KNL-NEXT:    korw %k6, %k0, %k03188; KNL-NEXT:    kandw %k4, %k0, %k03189; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3190; KNL-NEXT:    kmovw %eax, %k63191; KNL-NEXT:    kshiftlw $15, %k6, %k63192; KNL-NEXT:    kshiftrw $5, %k6, %k63193; KNL-NEXT:    korw %k6, %k0, %k03194; KNL-NEXT:    kandw %k5, %k0, %k03195; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3196; KNL-NEXT:    kmovw %eax, %k63197; KNL-NEXT:    kshiftlw $15, %k6, %k63198; KNL-NEXT:    kshiftrw $4, %k6, %k63199; KNL-NEXT:    korw %k6, %k0, %k03200; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3201; KNL-NEXT:    kandw %k1, %k0, %k03202; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3203; KNL-NEXT:    kmovw %eax, %k63204; KNL-NEXT:    kshiftlw $15, %k6, %k63205; KNL-NEXT:    kshiftrw $3, %k6, %k63206; KNL-NEXT:    korw %k6, %k0, %k03207; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 ## 2-byte Reload3208; KNL-NEXT:    kandw %k2, %k0, %k03209; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3210; KNL-NEXT:    kmovw %eax, %k63211; KNL-NEXT:    kshiftlw $15, %k6, %k63212; KNL-NEXT:    kshiftrw $2, %k6, %k63213; KNL-NEXT:    korw %k6, %k0, %k03214; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3215; KNL-NEXT:    kandw %k5, %k0, %k03216; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3217; KNL-NEXT:    kmovw %eax, %k63218; KNL-NEXT:    kshiftlw $14, %k6, %k63219; KNL-NEXT:    korw %k6, %k0, %k03220; KNL-NEXT:    kshiftlw $1, %k0, %k03221; KNL-NEXT:    kshiftrw $1, %k0, %k03222; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3223; KNL-NEXT:    kmovw %eax, %k63224; KNL-NEXT:    kshiftlw $15, %k6, %k63225; KNL-NEXT:    korw %k6, %k0, %k03226; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3227; KNL-NEXT:    andl $1, %eax3228; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3229; KNL-NEXT:    kmovw %ecx, %k63230; KNL-NEXT:    kshiftlw $15, %k6, %k63231; KNL-NEXT:    kshiftrw $14, %k6, %k63232; KNL-NEXT:    kmovw %eax, %k73233; KNL-NEXT:    korw %k6, %k7, %k63234; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3235; KNL-NEXT:    kandw %k5, %k6, %k63236; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3237; KNL-NEXT:    kmovw %eax, %k73238; KNL-NEXT:    kshiftlw $15, %k7, %k73239; KNL-NEXT:    kshiftrw $13, %k7, %k73240; KNL-NEXT:    korw %k7, %k6, %k63241; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3242; KNL-NEXT:    kandw %k5, %k6, %k63243; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3244; KNL-NEXT:    kmovw %eax, %k73245; KNL-NEXT:    kshiftlw $15, %k7, %k73246; KNL-NEXT:    kshiftrw $12, %k7, %k73247; KNL-NEXT:    korw %k7, %k6, %k63248; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3249; KNL-NEXT:    kandw %k5, %k6, %k63250; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3251; KNL-NEXT:    kmovw %eax, %k73252; KNL-NEXT:    kshiftlw $15, %k7, %k73253; KNL-NEXT:    kshiftrw $11, %k7, %k73254; KNL-NEXT:    korw %k7, %k6, %k63255; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3256; KNL-NEXT:    kandw %k5, %k6, %k63257; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3258; KNL-NEXT:    kmovw %eax, %k73259; KNL-NEXT:    kshiftlw $15, %k7, %k73260; KNL-NEXT:    kshiftrw $10, %k7, %k73261; KNL-NEXT:    korw %k7, %k6, %k63262; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3263; KNL-NEXT:    kandw %k5, %k6, %k63264; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3265; KNL-NEXT:    kmovw %eax, %k73266; KNL-NEXT:    kshiftlw $15, %k7, %k73267; KNL-NEXT:    kshiftrw $9, %k7, %k73268; KNL-NEXT:    korw %k7, %k6, %k63269; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3270; KNL-NEXT:    kandw %k5, %k6, %k63271; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3272; KNL-NEXT:    kmovw %eax, %k73273; KNL-NEXT:    kshiftlw $15, %k7, %k73274; KNL-NEXT:    kshiftrw $8, %k7, %k73275; KNL-NEXT:    korw %k7, %k6, %k63276; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3277; KNL-NEXT:    kandw %k5, %k6, %k63278; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3279; KNL-NEXT:    kmovw %eax, %k73280; KNL-NEXT:    kshiftlw $15, %k7, %k73281; KNL-NEXT:    kshiftrw $7, %k7, %k73282; KNL-NEXT:    korw %k7, %k6, %k63283; KNL-NEXT:    kandw %k3, %k6, %k63284; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3285; KNL-NEXT:    kmovw %eax, %k73286; KNL-NEXT:    kshiftlw $15, %k7, %k73287; KNL-NEXT:    kshiftrw $6, %k7, %k73288; KNL-NEXT:    korw %k7, %k6, %k63289; KNL-NEXT:    kandw %k4, %k6, %k53290; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3291; KNL-NEXT:    kmovw %eax, %k63292; KNL-NEXT:    kshiftlw $15, %k6, %k63293; KNL-NEXT:    kshiftrw $5, %k6, %k63294; KNL-NEXT:    korw %k6, %k5, %k53295; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3296; KNL-NEXT:    kandw %k3, %k5, %k43297; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3298; KNL-NEXT:    kmovw %eax, %k53299; KNL-NEXT:    kshiftlw $15, %k5, %k53300; KNL-NEXT:    kshiftrw $4, %k5, %k53301; KNL-NEXT:    korw %k5, %k4, %k43302; KNL-NEXT:    kandw %k1, %k4, %k33303; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3304; KNL-NEXT:    kmovw %eax, %k43305; KNL-NEXT:    kshiftlw $15, %k4, %k43306; KNL-NEXT:    kshiftrw $3, %k4, %k43307; KNL-NEXT:    korw %k4, %k3, %k33308; KNL-NEXT:    kandw %k2, %k3, %k23309; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3310; KNL-NEXT:    kmovw %eax, %k33311; KNL-NEXT:    kshiftlw $15, %k3, %k33312; KNL-NEXT:    kshiftrw $2, %k3, %k33313; KNL-NEXT:    korw %k3, %k2, %k23314; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3315; KNL-NEXT:    kandw %k1, %k2, %k13316; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3317; KNL-NEXT:    kmovw %eax, %k23318; KNL-NEXT:    kshiftlw $14, %k2, %k23319; KNL-NEXT:    korw %k2, %k1, %k13320; KNL-NEXT:    kshiftlw $1, %k1, %k13321; KNL-NEXT:    kshiftrw $1, %k1, %k13322; KNL-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3323; KNL-NEXT:    kmovw %eax, %k23324; KNL-NEXT:    kshiftlw $15, %k2, %k23325; KNL-NEXT:    korw %k2, %k1, %k13326; KNL-NEXT:    kmovw %k1, 6(%rdi)3327; KNL-NEXT:    kmovw %k0, 4(%rdi)3328; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 ## 2-byte Reload3329; KNL-NEXT:    kmovw %k0, 2(%rdi)3330; KNL-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 ## 2-byte Reload3331; KNL-NEXT:    kmovw %k0, (%rdi)3332; KNL-NEXT:    retq3333;3334; SKX-LABEL: store_64i1:3335; SKX:       ## %bb.0:3336; SKX-NEXT:    vpsllw $7, %zmm0, %zmm03337; SKX-NEXT:    vpmovb2m %zmm0, %k03338; SKX-NEXT:    kmovq %k0, (%rdi)3339; SKX-NEXT:    vzeroupper3340; SKX-NEXT:    retq3341;3342; AVX512BW-LABEL: store_64i1:3343; AVX512BW:       ## %bb.0:3344; AVX512BW-NEXT:    vpsllw $7, %zmm0, %zmm03345; AVX512BW-NEXT:    vpmovb2m %zmm0, %k03346; AVX512BW-NEXT:    kmovq %k0, (%rdi)3347; AVX512BW-NEXT:    vzeroupper3348; AVX512BW-NEXT:    retq3349;3350; AVX512DQ-LABEL: store_64i1:3351; AVX512DQ:       ## %bb.0:3352; AVX512DQ-NEXT:    andl $1, %esi3353; AVX512DQ-NEXT:    kmovw %esi, %k03354; AVX512DQ-NEXT:    kmovw %edx, %k13355; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13356; AVX512DQ-NEXT:    kshiftrw $14, %k1, %k13357; AVX512DQ-NEXT:    korw %k1, %k0, %k03358; AVX512DQ-NEXT:    movw $-5, %ax3359; AVX512DQ-NEXT:    kmovw %eax, %k13360; AVX512DQ-NEXT:    kandw %k1, %k0, %k03361; AVX512DQ-NEXT:    kmovw %k1, %k73362; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3363; AVX512DQ-NEXT:    kmovw %ecx, %k13364; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13365; AVX512DQ-NEXT:    kshiftrw $13, %k1, %k13366; AVX512DQ-NEXT:    korw %k1, %k0, %k03367; AVX512DQ-NEXT:    movw $-9, %ax3368; AVX512DQ-NEXT:    kmovw %eax, %k13369; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3370; AVX512DQ-NEXT:    kandw %k1, %k0, %k03371; AVX512DQ-NEXT:    kmovw %r8d, %k13372; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13373; AVX512DQ-NEXT:    kshiftrw $12, %k1, %k13374; AVX512DQ-NEXT:    korw %k1, %k0, %k03375; AVX512DQ-NEXT:    movw $-17, %ax3376; AVX512DQ-NEXT:    kmovw %eax, %k13377; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3378; AVX512DQ-NEXT:    kandw %k1, %k0, %k03379; AVX512DQ-NEXT:    kmovw %r9d, %k13380; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13381; AVX512DQ-NEXT:    kshiftrw $11, %k1, %k13382; AVX512DQ-NEXT:    korw %k1, %k0, %k03383; AVX512DQ-NEXT:    movw $-33, %ax3384; AVX512DQ-NEXT:    kmovw %eax, %k13385; AVX512DQ-NEXT:    kandw %k1, %k0, %k03386; AVX512DQ-NEXT:    kmovw %k1, %k23387; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3388; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3389; AVX512DQ-NEXT:    kmovw %eax, %k13390; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13391; AVX512DQ-NEXT:    kshiftrw $10, %k1, %k13392; AVX512DQ-NEXT:    korw %k1, %k0, %k03393; AVX512DQ-NEXT:    movw $-65, %ax3394; AVX512DQ-NEXT:    kmovw %eax, %k13395; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3396; AVX512DQ-NEXT:    kandw %k1, %k0, %k03397; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3398; AVX512DQ-NEXT:    kmovw %eax, %k13399; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13400; AVX512DQ-NEXT:    kshiftrw $9, %k1, %k13401; AVX512DQ-NEXT:    korw %k1, %k0, %k03402; AVX512DQ-NEXT:    movw $-129, %ax3403; AVX512DQ-NEXT:    kmovw %eax, %k13404; AVX512DQ-NEXT:    kandw %k1, %k0, %k03405; AVX512DQ-NEXT:    kmovw %k1, %k33406; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3407; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3408; AVX512DQ-NEXT:    kmovw %eax, %k13409; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13410; AVX512DQ-NEXT:    kshiftrw $8, %k1, %k13411; AVX512DQ-NEXT:    korw %k1, %k0, %k03412; AVX512DQ-NEXT:    movw $-257, %ax ## imm = 0xFEFF3413; AVX512DQ-NEXT:    kmovw %eax, %k13414; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3415; AVX512DQ-NEXT:    kandw %k1, %k0, %k03416; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3417; AVX512DQ-NEXT:    kmovw %eax, %k13418; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13419; AVX512DQ-NEXT:    kshiftrw $7, %k1, %k13420; AVX512DQ-NEXT:    korw %k1, %k0, %k03421; AVX512DQ-NEXT:    movw $-513, %ax ## imm = 0xFDFF3422; AVX512DQ-NEXT:    kmovw %eax, %k13423; AVX512DQ-NEXT:    kandw %k1, %k0, %k03424; AVX512DQ-NEXT:    kmovw %k1, %k43425; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3426; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3427; AVX512DQ-NEXT:    kmovw %eax, %k13428; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13429; AVX512DQ-NEXT:    kshiftrw $6, %k1, %k13430; AVX512DQ-NEXT:    korw %k1, %k0, %k03431; AVX512DQ-NEXT:    movw $-1025, %ax ## imm = 0xFBFF3432; AVX512DQ-NEXT:    kmovw %eax, %k13433; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3434; AVX512DQ-NEXT:    kandw %k1, %k0, %k03435; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3436; AVX512DQ-NEXT:    kmovw %eax, %k13437; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13438; AVX512DQ-NEXT:    kshiftrw $5, %k1, %k13439; AVX512DQ-NEXT:    korw %k1, %k0, %k03440; AVX512DQ-NEXT:    movw $-2049, %ax ## imm = 0xF7FF3441; AVX512DQ-NEXT:    kmovw %eax, %k53442; AVX512DQ-NEXT:    kandw %k5, %k0, %k03443; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3444; AVX512DQ-NEXT:    kmovw %eax, %k13445; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13446; AVX512DQ-NEXT:    kshiftrw $4, %k1, %k13447; AVX512DQ-NEXT:    korw %k1, %k0, %k03448; AVX512DQ-NEXT:    movw $-4097, %ax ## imm = 0xEFFF3449; AVX512DQ-NEXT:    kmovw %eax, %k13450; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3451; AVX512DQ-NEXT:    kandw %k1, %k0, %k03452; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3453; AVX512DQ-NEXT:    kmovw %eax, %k13454; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13455; AVX512DQ-NEXT:    kshiftrw $3, %k1, %k13456; AVX512DQ-NEXT:    korw %k1, %k0, %k03457; AVX512DQ-NEXT:    movw $-8193, %ax ## imm = 0xDFFF3458; AVX512DQ-NEXT:    kmovw %eax, %k13459; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3460; AVX512DQ-NEXT:    kandw %k1, %k0, %k03461; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3462; AVX512DQ-NEXT:    kmovw %eax, %k13463; AVX512DQ-NEXT:    kshiftlw $15, %k1, %k13464; AVX512DQ-NEXT:    kshiftrw $2, %k1, %k13465; AVX512DQ-NEXT:    korw %k1, %k0, %k03466; AVX512DQ-NEXT:    movw $-16385, %ax ## imm = 0xBFFF3467; AVX512DQ-NEXT:    kmovw %eax, %k13468; AVX512DQ-NEXT:    kmovw %k1, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3469; AVX512DQ-NEXT:    kandw %k1, %k0, %k03470; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3471; AVX512DQ-NEXT:    kmovw %eax, %k63472; AVX512DQ-NEXT:    kshiftlw $14, %k6, %k63473; AVX512DQ-NEXT:    korw %k6, %k0, %k03474; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k03475; AVX512DQ-NEXT:    kshiftrw $1, %k0, %k03476; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3477; AVX512DQ-NEXT:    kmovw %eax, %k63478; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63479; AVX512DQ-NEXT:    korw %k6, %k0, %k03480; AVX512DQ-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3481; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3482; AVX512DQ-NEXT:    andl $1, %eax3483; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3484; AVX512DQ-NEXT:    kmovw %ecx, %k03485; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k03486; AVX512DQ-NEXT:    kshiftrw $14, %k0, %k03487; AVX512DQ-NEXT:    kmovw %eax, %k63488; AVX512DQ-NEXT:    korw %k0, %k6, %k03489; AVX512DQ-NEXT:    kandw %k7, %k0, %k03490; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3491; AVX512DQ-NEXT:    kmovw %eax, %k63492; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63493; AVX512DQ-NEXT:    kshiftrw $13, %k6, %k63494; AVX512DQ-NEXT:    korw %k6, %k0, %k03495; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k7 ## 2-byte Reload3496; AVX512DQ-NEXT:    kandw %k7, %k0, %k03497; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3498; AVX512DQ-NEXT:    kmovw %eax, %k63499; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63500; AVX512DQ-NEXT:    kshiftrw $12, %k6, %k63501; AVX512DQ-NEXT:    korw %k6, %k0, %k03502; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3503; AVX512DQ-NEXT:    kandw %k1, %k0, %k03504; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3505; AVX512DQ-NEXT:    kmovw %eax, %k63506; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63507; AVX512DQ-NEXT:    kshiftrw $11, %k6, %k63508; AVX512DQ-NEXT:    korw %k6, %k0, %k03509; AVX512DQ-NEXT:    kandw %k2, %k0, %k03510; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3511; AVX512DQ-NEXT:    kmovw %eax, %k63512; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63513; AVX512DQ-NEXT:    kshiftrw $10, %k6, %k63514; AVX512DQ-NEXT:    korw %k6, %k0, %k03515; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 ## 2-byte Reload3516; AVX512DQ-NEXT:    kandw %k2, %k0, %k03517; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3518; AVX512DQ-NEXT:    kmovw %eax, %k63519; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63520; AVX512DQ-NEXT:    kshiftrw $9, %k6, %k63521; AVX512DQ-NEXT:    korw %k6, %k0, %k03522; AVX512DQ-NEXT:    kandw %k3, %k0, %k03523; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3524; AVX512DQ-NEXT:    kmovw %eax, %k63525; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63526; AVX512DQ-NEXT:    kshiftrw $8, %k6, %k63527; AVX512DQ-NEXT:    korw %k6, %k0, %k03528; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3529; AVX512DQ-NEXT:    kandw %k3, %k0, %k03530; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3531; AVX512DQ-NEXT:    kmovw %eax, %k63532; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63533; AVX512DQ-NEXT:    kshiftrw $7, %k6, %k63534; AVX512DQ-NEXT:    korw %k6, %k0, %k03535; AVX512DQ-NEXT:    kandw %k4, %k0, %k03536; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3537; AVX512DQ-NEXT:    kmovw %eax, %k63538; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63539; AVX512DQ-NEXT:    kshiftrw $6, %k6, %k63540; AVX512DQ-NEXT:    korw %k6, %k0, %k03541; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k4 ## 2-byte Reload3542; AVX512DQ-NEXT:    kandw %k4, %k0, %k03543; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3544; AVX512DQ-NEXT:    kmovw %eax, %k63545; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63546; AVX512DQ-NEXT:    kshiftrw $5, %k6, %k63547; AVX512DQ-NEXT:    korw %k6, %k0, %k03548; AVX512DQ-NEXT:    kmovw %k5, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3549; AVX512DQ-NEXT:    kandw %k5, %k0, %k03550; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3551; AVX512DQ-NEXT:    kmovw %eax, %k63552; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63553; AVX512DQ-NEXT:    kshiftrw $4, %k6, %k63554; AVX512DQ-NEXT:    korw %k6, %k0, %k03555; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3556; AVX512DQ-NEXT:    kandw %k6, %k0, %k03557; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3558; AVX512DQ-NEXT:    kmovw %eax, %k63559; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63560; AVX512DQ-NEXT:    kshiftrw $3, %k6, %k63561; AVX512DQ-NEXT:    korw %k6, %k0, %k03562; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3563; AVX512DQ-NEXT:    kandw %k6, %k0, %k03564; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3565; AVX512DQ-NEXT:    kmovw %eax, %k63566; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63567; AVX512DQ-NEXT:    kshiftrw $2, %k6, %k63568; AVX512DQ-NEXT:    korw %k6, %k0, %k03569; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3570; AVX512DQ-NEXT:    kandw %k6, %k0, %k03571; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3572; AVX512DQ-NEXT:    kmovw %eax, %k63573; AVX512DQ-NEXT:    kshiftlw $14, %k6, %k63574; AVX512DQ-NEXT:    korw %k6, %k0, %k03575; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k03576; AVX512DQ-NEXT:    kshiftrw $1, %k0, %k03577; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3578; AVX512DQ-NEXT:    kmovw %eax, %k63579; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63580; AVX512DQ-NEXT:    korw %k6, %k0, %k03581; AVX512DQ-NEXT:    kmovw %k0, {{[-0-9]+}}(%r{{[sb]}}p) ## 2-byte Spill3582; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3583; AVX512DQ-NEXT:    andl $1, %eax3584; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3585; AVX512DQ-NEXT:    kmovw %ecx, %k03586; AVX512DQ-NEXT:    kshiftlw $15, %k0, %k03587; AVX512DQ-NEXT:    kshiftrw $14, %k0, %k03588; AVX512DQ-NEXT:    kmovw %eax, %k63589; AVX512DQ-NEXT:    korw %k0, %k6, %k03590; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k6 ## 2-byte Reload3591; AVX512DQ-NEXT:    kandw %k6, %k0, %k03592; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3593; AVX512DQ-NEXT:    kmovw %eax, %k63594; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63595; AVX512DQ-NEXT:    kshiftrw $13, %k6, %k63596; AVX512DQ-NEXT:    korw %k6, %k0, %k03597; AVX512DQ-NEXT:    kandw %k7, %k0, %k03598; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3599; AVX512DQ-NEXT:    kmovw %eax, %k63600; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63601; AVX512DQ-NEXT:    kshiftrw $12, %k6, %k63602; AVX512DQ-NEXT:    korw %k6, %k0, %k03603; AVX512DQ-NEXT:    kandw %k1, %k0, %k03604; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3605; AVX512DQ-NEXT:    kmovw %eax, %k63606; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63607; AVX512DQ-NEXT:    kshiftrw $11, %k6, %k63608; AVX512DQ-NEXT:    korw %k6, %k0, %k03609; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3610; AVX512DQ-NEXT:    kandw %k1, %k0, %k03611; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3612; AVX512DQ-NEXT:    kmovw %eax, %k63613; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63614; AVX512DQ-NEXT:    kshiftrw $10, %k6, %k63615; AVX512DQ-NEXT:    korw %k6, %k0, %k03616; AVX512DQ-NEXT:    kandw %k2, %k0, %k03617; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3618; AVX512DQ-NEXT:    kmovw %eax, %k63619; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63620; AVX512DQ-NEXT:    kshiftrw $9, %k6, %k63621; AVX512DQ-NEXT:    korw %k6, %k0, %k03622; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3623; AVX512DQ-NEXT:    kandw %k1, %k0, %k03624; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3625; AVX512DQ-NEXT:    kmovw %eax, %k63626; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63627; AVX512DQ-NEXT:    kshiftrw $8, %k6, %k63628; AVX512DQ-NEXT:    korw %k6, %k0, %k03629; AVX512DQ-NEXT:    kandw %k3, %k0, %k03630; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3631; AVX512DQ-NEXT:    kmovw %eax, %k63632; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63633; AVX512DQ-NEXT:    kshiftrw $7, %k6, %k63634; AVX512DQ-NEXT:    korw %k6, %k0, %k03635; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3636; AVX512DQ-NEXT:    kandw %k3, %k0, %k03637; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3638; AVX512DQ-NEXT:    kmovw %eax, %k63639; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63640; AVX512DQ-NEXT:    kshiftrw $6, %k6, %k63641; AVX512DQ-NEXT:    korw %k6, %k0, %k03642; AVX512DQ-NEXT:    kandw %k4, %k0, %k03643; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3644; AVX512DQ-NEXT:    kmovw %eax, %k63645; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63646; AVX512DQ-NEXT:    kshiftrw $5, %k6, %k63647; AVX512DQ-NEXT:    korw %k6, %k0, %k03648; AVX512DQ-NEXT:    kandw %k5, %k0, %k03649; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3650; AVX512DQ-NEXT:    kmovw %eax, %k63651; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63652; AVX512DQ-NEXT:    kshiftrw $4, %k6, %k63653; AVX512DQ-NEXT:    korw %k6, %k0, %k03654; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3655; AVX512DQ-NEXT:    kandw %k1, %k0, %k03656; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3657; AVX512DQ-NEXT:    kmovw %eax, %k63658; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63659; AVX512DQ-NEXT:    kshiftrw $3, %k6, %k63660; AVX512DQ-NEXT:    korw %k6, %k0, %k03661; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k2 ## 2-byte Reload3662; AVX512DQ-NEXT:    kandw %k2, %k0, %k03663; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3664; AVX512DQ-NEXT:    kmovw %eax, %k63665; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63666; AVX512DQ-NEXT:    kshiftrw $2, %k6, %k63667; AVX512DQ-NEXT:    korw %k6, %k0, %k03668; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3669; AVX512DQ-NEXT:    kandw %k5, %k0, %k03670; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3671; AVX512DQ-NEXT:    kmovw %eax, %k63672; AVX512DQ-NEXT:    kshiftlw $14, %k6, %k63673; AVX512DQ-NEXT:    korw %k6, %k0, %k03674; AVX512DQ-NEXT:    kshiftlw $1, %k0, %k03675; AVX512DQ-NEXT:    kshiftrw $1, %k0, %k03676; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3677; AVX512DQ-NEXT:    kmovw %eax, %k63678; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63679; AVX512DQ-NEXT:    korw %k6, %k0, %k03680; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3681; AVX512DQ-NEXT:    andl $1, %eax3682; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %ecx3683; AVX512DQ-NEXT:    kmovw %ecx, %k63684; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63685; AVX512DQ-NEXT:    kshiftrw $14, %k6, %k63686; AVX512DQ-NEXT:    kmovw %eax, %k73687; AVX512DQ-NEXT:    korw %k6, %k7, %k63688; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3689; AVX512DQ-NEXT:    kandw %k5, %k6, %k63690; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3691; AVX512DQ-NEXT:    kmovw %eax, %k73692; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73693; AVX512DQ-NEXT:    kshiftrw $13, %k7, %k73694; AVX512DQ-NEXT:    korw %k7, %k6, %k63695; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3696; AVX512DQ-NEXT:    kandw %k5, %k6, %k63697; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3698; AVX512DQ-NEXT:    kmovw %eax, %k73699; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73700; AVX512DQ-NEXT:    kshiftrw $12, %k7, %k73701; AVX512DQ-NEXT:    korw %k7, %k6, %k63702; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3703; AVX512DQ-NEXT:    kandw %k5, %k6, %k63704; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3705; AVX512DQ-NEXT:    kmovw %eax, %k73706; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73707; AVX512DQ-NEXT:    kshiftrw $11, %k7, %k73708; AVX512DQ-NEXT:    korw %k7, %k6, %k63709; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3710; AVX512DQ-NEXT:    kandw %k5, %k6, %k63711; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3712; AVX512DQ-NEXT:    kmovw %eax, %k73713; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73714; AVX512DQ-NEXT:    kshiftrw $10, %k7, %k73715; AVX512DQ-NEXT:    korw %k7, %k6, %k63716; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3717; AVX512DQ-NEXT:    kandw %k5, %k6, %k63718; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3719; AVX512DQ-NEXT:    kmovw %eax, %k73720; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73721; AVX512DQ-NEXT:    kshiftrw $9, %k7, %k73722; AVX512DQ-NEXT:    korw %k7, %k6, %k63723; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3724; AVX512DQ-NEXT:    kandw %k5, %k6, %k63725; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3726; AVX512DQ-NEXT:    kmovw %eax, %k73727; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73728; AVX512DQ-NEXT:    kshiftrw $8, %k7, %k73729; AVX512DQ-NEXT:    korw %k7, %k6, %k63730; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k5 ## 2-byte Reload3731; AVX512DQ-NEXT:    kandw %k5, %k6, %k63732; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3733; AVX512DQ-NEXT:    kmovw %eax, %k73734; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73735; AVX512DQ-NEXT:    kshiftrw $7, %k7, %k73736; AVX512DQ-NEXT:    korw %k7, %k6, %k63737; AVX512DQ-NEXT:    kandw %k3, %k6, %k63738; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3739; AVX512DQ-NEXT:    kmovw %eax, %k73740; AVX512DQ-NEXT:    kshiftlw $15, %k7, %k73741; AVX512DQ-NEXT:    kshiftrw $6, %k7, %k73742; AVX512DQ-NEXT:    korw %k7, %k6, %k63743; AVX512DQ-NEXT:    kandw %k4, %k6, %k53744; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3745; AVX512DQ-NEXT:    kmovw %eax, %k63746; AVX512DQ-NEXT:    kshiftlw $15, %k6, %k63747; AVX512DQ-NEXT:    kshiftrw $5, %k6, %k63748; AVX512DQ-NEXT:    korw %k6, %k5, %k53749; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k3 ## 2-byte Reload3750; AVX512DQ-NEXT:    kandw %k3, %k5, %k43751; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3752; AVX512DQ-NEXT:    kmovw %eax, %k53753; AVX512DQ-NEXT:    kshiftlw $15, %k5, %k53754; AVX512DQ-NEXT:    kshiftrw $4, %k5, %k53755; AVX512DQ-NEXT:    korw %k5, %k4, %k43756; AVX512DQ-NEXT:    kandw %k1, %k4, %k33757; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3758; AVX512DQ-NEXT:    kmovw %eax, %k43759; AVX512DQ-NEXT:    kshiftlw $15, %k4, %k43760; AVX512DQ-NEXT:    kshiftrw $3, %k4, %k43761; AVX512DQ-NEXT:    korw %k4, %k3, %k33762; AVX512DQ-NEXT:    kandw %k2, %k3, %k23763; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3764; AVX512DQ-NEXT:    kmovw %eax, %k33765; AVX512DQ-NEXT:    kshiftlw $15, %k3, %k33766; AVX512DQ-NEXT:    kshiftrw $2, %k3, %k33767; AVX512DQ-NEXT:    korw %k3, %k2, %k23768; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k1 ## 2-byte Reload3769; AVX512DQ-NEXT:    kandw %k1, %k2, %k13770; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3771; AVX512DQ-NEXT:    kmovw %eax, %k23772; AVX512DQ-NEXT:    kshiftlw $14, %k2, %k23773; AVX512DQ-NEXT:    korw %k2, %k1, %k13774; AVX512DQ-NEXT:    kshiftlw $1, %k1, %k13775; AVX512DQ-NEXT:    kshiftrw $1, %k1, %k13776; AVX512DQ-NEXT:    movzbl {{[0-9]+}}(%rsp), %eax3777; AVX512DQ-NEXT:    kmovw %eax, %k23778; AVX512DQ-NEXT:    kshiftlw $15, %k2, %k23779; AVX512DQ-NEXT:    korw %k2, %k1, %k13780; AVX512DQ-NEXT:    kmovw %k1, 6(%rdi)3781; AVX512DQ-NEXT:    kmovw %k0, 4(%rdi)3782; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 ## 2-byte Reload3783; AVX512DQ-NEXT:    kmovw %k0, 2(%rdi)3784; AVX512DQ-NEXT:    kmovw {{[-0-9]+}}(%r{{[sb]}}p), %k0 ## 2-byte Reload3785; AVX512DQ-NEXT:    kmovw %k0, (%rdi)3786; AVX512DQ-NEXT:    retq3787;3788; X86-LABEL: store_64i1:3789; X86:       ## %bb.0:3790; X86-NEXT:    vpsllw $7, %zmm0, %zmm03791; X86-NEXT:    vpmovb2m %zmm0, %k03792; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax3793; X86-NEXT:    kmovq %k0, (%eax)3794; X86-NEXT:    vzeroupper3795; X86-NEXT:    retl3796  store <64 x i1> %v, ptr %a3797  ret void3798}3799 3800define i32 @test_bitcast_v8i1_zext(<16 x i32> %a) {3801; KNL-LABEL: test_bitcast_v8i1_zext:3802; KNL:       ## %bb.0:3803; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k03804; KNL-NEXT:    kmovw %k0, %eax3805; KNL-NEXT:    movzbl %al, %eax3806; KNL-NEXT:    addl %eax, %eax3807; KNL-NEXT:    vzeroupper3808; KNL-NEXT:    retq3809;3810; SKX-LABEL: test_bitcast_v8i1_zext:3811; SKX:       ## %bb.0:3812; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k03813; SKX-NEXT:    kmovb %k0, %eax3814; SKX-NEXT:    addl %eax, %eax3815; SKX-NEXT:    vzeroupper3816; SKX-NEXT:    retq3817;3818; AVX512BW-LABEL: test_bitcast_v8i1_zext:3819; AVX512BW:       ## %bb.0:3820; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k03821; AVX512BW-NEXT:    kmovd %k0, %eax3822; AVX512BW-NEXT:    movzbl %al, %eax3823; AVX512BW-NEXT:    addl %eax, %eax3824; AVX512BW-NEXT:    vzeroupper3825; AVX512BW-NEXT:    retq3826;3827; AVX512DQ-LABEL: test_bitcast_v8i1_zext:3828; AVX512DQ:       ## %bb.0:3829; AVX512DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k03830; AVX512DQ-NEXT:    kmovb %k0, %eax3831; AVX512DQ-NEXT:    addl %eax, %eax3832; AVX512DQ-NEXT:    vzeroupper3833; AVX512DQ-NEXT:    retq3834;3835; X86-LABEL: test_bitcast_v8i1_zext:3836; X86:       ## %bb.0:3837; X86-NEXT:    vptestnmd %zmm0, %zmm0, %k03838; X86-NEXT:    kmovb %k0, %eax3839; X86-NEXT:    addl %eax, %eax3840; X86-NEXT:    vzeroupper3841; X86-NEXT:    retl3842   %v1 = icmp eq <16 x i32> %a, zeroinitializer3843   %mask = shufflevector <16 x i1> %v1, <16 x i1> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3844   %mask1 = bitcast <8 x i1> %mask to i83845   %val = zext i8 %mask1 to i323846   %val1 = add i32 %val, %val3847   ret i32 %val13848}3849 3850define i32 @test_bitcast_v16i1_zext(<16 x i32> %a) {3851; CHECK-LABEL: test_bitcast_v16i1_zext:3852; CHECK:       ## %bb.0:3853; CHECK-NEXT:    vptestnmd %zmm0, %zmm0, %k03854; CHECK-NEXT:    kmovw %k0, %eax3855; CHECK-NEXT:    addl %eax, %eax3856; CHECK-NEXT:    vzeroupper3857; CHECK-NEXT:    retq3858;3859; X86-LABEL: test_bitcast_v16i1_zext:3860; X86:       ## %bb.0:3861; X86-NEXT:    vptestnmd %zmm0, %zmm0, %k03862; X86-NEXT:    kmovw %k0, %eax3863; X86-NEXT:    addl %eax, %eax3864; X86-NEXT:    vzeroupper3865; X86-NEXT:    retl3866   %v1 = icmp eq <16 x i32> %a, zeroinitializer3867   %mask1 = bitcast <16 x i1> %v1 to i163868   %val = zext i16 %mask1 to i323869   %val1 = add i32 %val, %val3870   ret i32 %val13871}3872 3873define i16 @test_v16i1_add(i16 %x, i16 %y) {3874; CHECK-LABEL: test_v16i1_add:3875; CHECK:       ## %bb.0:3876; CHECK-NEXT:    movl %edi, %eax3877; CHECK-NEXT:    xorl %esi, %eax3878; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax3879; CHECK-NEXT:    retq3880;3881; X86-LABEL: test_v16i1_add:3882; X86:       ## %bb.0:3883; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3884; X86-NEXT:    xorw {{[0-9]+}}(%esp), %ax3885; X86-NEXT:    retl3886  %m0 = bitcast i16 %x to <16 x i1>3887  %m1 = bitcast i16 %y to <16 x i1>3888  %m2 = add <16 x i1> %m0,  %m13889  %ret = bitcast <16 x i1> %m2 to i163890  ret i16 %ret3891}3892 3893define i16 @test_v16i1_sub(i16 %x, i16 %y) {3894; CHECK-LABEL: test_v16i1_sub:3895; CHECK:       ## %bb.0:3896; CHECK-NEXT:    movl %edi, %eax3897; CHECK-NEXT:    xorl %esi, %eax3898; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax3899; CHECK-NEXT:    retq3900;3901; X86-LABEL: test_v16i1_sub:3902; X86:       ## %bb.0:3903; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3904; X86-NEXT:    xorw {{[0-9]+}}(%esp), %ax3905; X86-NEXT:    retl3906  %m0 = bitcast i16 %x to <16 x i1>3907  %m1 = bitcast i16 %y to <16 x i1>3908  %m2 = sub <16 x i1> %m0,  %m13909  %ret = bitcast <16 x i1> %m2 to i163910  ret i16 %ret3911}3912 3913define i16 @test_v16i1_mul(i16 %x, i16 %y) {3914; CHECK-LABEL: test_v16i1_mul:3915; CHECK:       ## %bb.0:3916; CHECK-NEXT:    movl %edi, %eax3917; CHECK-NEXT:    andl %esi, %eax3918; CHECK-NEXT:    ## kill: def $ax killed $ax killed $eax3919; CHECK-NEXT:    retq3920;3921; X86-LABEL: test_v16i1_mul:3922; X86:       ## %bb.0:3923; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax3924; X86-NEXT:    andw {{[0-9]+}}(%esp), %ax3925; X86-NEXT:    retl3926  %m0 = bitcast i16 %x to <16 x i1>3927  %m1 = bitcast i16 %y to <16 x i1>3928  %m2 = mul <16 x i1> %m0,  %m13929  %ret = bitcast <16 x i1> %m2 to i163930  ret i16 %ret3931}3932 3933define i8 @test_v8i1_add(i8 %x, i8 %y) {3934; CHECK-LABEL: test_v8i1_add:3935; CHECK:       ## %bb.0:3936; CHECK-NEXT:    movl %edi, %eax3937; CHECK-NEXT:    xorl %esi, %eax3938; CHECK-NEXT:    ## kill: def $al killed $al killed $eax3939; CHECK-NEXT:    retq3940;3941; X86-LABEL: test_v8i1_add:3942; X86:       ## %bb.0:3943; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3944; X86-NEXT:    xorb {{[0-9]+}}(%esp), %al3945; X86-NEXT:    retl3946  %m0 = bitcast i8 %x to <8 x i1>3947  %m1 = bitcast i8 %y to <8 x i1>3948  %m2 = add <8 x i1> %m0,  %m13949  %ret = bitcast <8 x i1> %m2 to i83950  ret i8 %ret3951}3952 3953define i8 @test_v8i1_sub(i8 %x, i8 %y) {3954; CHECK-LABEL: test_v8i1_sub:3955; CHECK:       ## %bb.0:3956; CHECK-NEXT:    movl %edi, %eax3957; CHECK-NEXT:    xorl %esi, %eax3958; CHECK-NEXT:    ## kill: def $al killed $al killed $eax3959; CHECK-NEXT:    retq3960;3961; X86-LABEL: test_v8i1_sub:3962; X86:       ## %bb.0:3963; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3964; X86-NEXT:    xorb {{[0-9]+}}(%esp), %al3965; X86-NEXT:    retl3966  %m0 = bitcast i8 %x to <8 x i1>3967  %m1 = bitcast i8 %y to <8 x i1>3968  %m2 = sub <8 x i1> %m0,  %m13969  %ret = bitcast <8 x i1> %m2 to i83970  ret i8 %ret3971}3972 3973define i8 @test_v8i1_mul(i8 %x, i8 %y) {3974; CHECK-LABEL: test_v8i1_mul:3975; CHECK:       ## %bb.0:3976; CHECK-NEXT:    movl %edi, %eax3977; CHECK-NEXT:    andl %esi, %eax3978; CHECK-NEXT:    ## kill: def $al killed $al killed $eax3979; CHECK-NEXT:    retq3980;3981; X86-LABEL: test_v8i1_mul:3982; X86:       ## %bb.0:3983; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax3984; X86-NEXT:    andb {{[0-9]+}}(%esp), %al3985; X86-NEXT:    retl3986  %m0 = bitcast i8 %x to <8 x i1>3987  %m1 = bitcast i8 %y to <8 x i1>3988  %m2 = mul <8 x i1> %m0,  %m13989  %ret = bitcast <8 x i1> %m2 to i83990  ret i8 %ret3991}3992 3993; Make sure we don't emit a ktest for signed comparisons.3994define void @ktest_signed(<16 x i32> %x, <16 x i32> %y) {3995; KNL-LABEL: ktest_signed:3996; KNL:       ## %bb.0:3997; KNL-NEXT:    vpord %zmm1, %zmm0, %zmm03998; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k03999; KNL-NEXT:    kmovw %k0, %eax4000; KNL-NEXT:    testw %ax, %ax4001; KNL-NEXT:    jle LBB66_14002; KNL-NEXT:  ## %bb.2: ## %bb.24003; KNL-NEXT:    vzeroupper4004; KNL-NEXT:    retq4005; KNL-NEXT:  LBB66_1: ## %bb.14006; KNL-NEXT:    pushq %rax4007; KNL-NEXT:    .cfi_def_cfa_offset 164008; KNL-NEXT:    vzeroupper4009; KNL-NEXT:    callq _foo4010; KNL-NEXT:    addq $8, %rsp4011; KNL-NEXT:    retq4012;4013; SKX-LABEL: ktest_signed:4014; SKX:       ## %bb.0:4015; SKX-NEXT:    vpord %zmm1, %zmm0, %zmm04016; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k04017; SKX-NEXT:    kmovd %k0, %eax4018; SKX-NEXT:    testw %ax, %ax4019; SKX-NEXT:    jle LBB66_14020; SKX-NEXT:  ## %bb.2: ## %bb.24021; SKX-NEXT:    vzeroupper4022; SKX-NEXT:    retq4023; SKX-NEXT:  LBB66_1: ## %bb.14024; SKX-NEXT:    pushq %rax4025; SKX-NEXT:    .cfi_def_cfa_offset 164026; SKX-NEXT:    vzeroupper4027; SKX-NEXT:    callq _foo4028; SKX-NEXT:    addq $8, %rsp4029; SKX-NEXT:    retq4030;4031; AVX512BW-LABEL: ktest_signed:4032; AVX512BW:       ## %bb.0:4033; AVX512BW-NEXT:    vpord %zmm1, %zmm0, %zmm04034; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k04035; AVX512BW-NEXT:    kmovd %k0, %eax4036; AVX512BW-NEXT:    testw %ax, %ax4037; AVX512BW-NEXT:    jle LBB66_14038; AVX512BW-NEXT:  ## %bb.2: ## %bb.24039; AVX512BW-NEXT:    vzeroupper4040; AVX512BW-NEXT:    retq4041; AVX512BW-NEXT:  LBB66_1: ## %bb.14042; AVX512BW-NEXT:    pushq %rax4043; AVX512BW-NEXT:    .cfi_def_cfa_offset 164044; AVX512BW-NEXT:    vzeroupper4045; AVX512BW-NEXT:    callq _foo4046; AVX512BW-NEXT:    addq $8, %rsp4047; AVX512BW-NEXT:    retq4048;4049; AVX512DQ-LABEL: ktest_signed:4050; AVX512DQ:       ## %bb.0:4051; AVX512DQ-NEXT:    vpord %zmm1, %zmm0, %zmm04052; AVX512DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k04053; AVX512DQ-NEXT:    kmovw %k0, %eax4054; AVX512DQ-NEXT:    testw %ax, %ax4055; AVX512DQ-NEXT:    jle LBB66_14056; AVX512DQ-NEXT:  ## %bb.2: ## %bb.24057; AVX512DQ-NEXT:    vzeroupper4058; AVX512DQ-NEXT:    retq4059; AVX512DQ-NEXT:  LBB66_1: ## %bb.14060; AVX512DQ-NEXT:    pushq %rax4061; AVX512DQ-NEXT:    .cfi_def_cfa_offset 164062; AVX512DQ-NEXT:    vzeroupper4063; AVX512DQ-NEXT:    callq _foo4064; AVX512DQ-NEXT:    addq $8, %rsp4065; AVX512DQ-NEXT:    retq4066;4067; X86-LABEL: ktest_signed:4068; X86:       ## %bb.0:4069; X86-NEXT:    vpord %zmm1, %zmm0, %zmm04070; X86-NEXT:    vptestnmd %zmm0, %zmm0, %k04071; X86-NEXT:    kmovd %k0, %eax4072; X86-NEXT:    testw %ax, %ax4073; X86-NEXT:    jle LBB66_14074; X86-NEXT:  ## %bb.2: ## %bb.24075; X86-NEXT:    vzeroupper4076; X86-NEXT:    retl4077; X86-NEXT:  LBB66_1: ## %bb.14078; X86-NEXT:    subl $12, %esp4079; X86-NEXT:    .cfi_def_cfa_offset 164080; X86-NEXT:    vzeroupper4081; X86-NEXT:    calll _foo4082; X86-NEXT:    addl $12, %esp4083; X86-NEXT:    retl4084  %a = icmp eq <16 x i32> %x, zeroinitializer4085  %b = icmp eq <16 x i32> %y, zeroinitializer4086  %c = and <16 x i1> %a, %b4087  %d = bitcast <16 x i1> %c to i164088  %e = icmp sgt i16 %d, 04089  br i1 %e, label %bb.2, label %bb.14090bb.1:4091  call void @foo()4092  br label %bb.24093bb.2:4094  ret void4095}4096declare void @foo()4097 4098; Make sure we can use the ZF/CF flags from kortest to check for all ones.4099define void @ktest_allones(<16 x i32> %x, <16 x i32> %y) {4100; CHECK-LABEL: ktest_allones:4101; CHECK:       ## %bb.0:4102; CHECK-NEXT:    vpord %zmm1, %zmm0, %zmm04103; CHECK-NEXT:    vptestmd %zmm0, %zmm0, %k04104; CHECK-NEXT:    kortestw %k0, %k04105; CHECK-NEXT:    je LBB67_24106; CHECK-NEXT:  ## %bb.1: ## %bb.14107; CHECK-NEXT:    pushq %rax4108; CHECK-NEXT:    .cfi_def_cfa_offset 164109; CHECK-NEXT:    vzeroupper4110; CHECK-NEXT:    callq _foo4111; CHECK-NEXT:    addq $8, %rsp4112; CHECK-NEXT:  LBB67_2: ## %bb.24113; CHECK-NEXT:    vzeroupper4114; CHECK-NEXT:    retq4115;4116; X86-LABEL: ktest_allones:4117; X86:       ## %bb.0:4118; X86-NEXT:    vpord %zmm1, %zmm0, %zmm04119; X86-NEXT:    vptestmd %zmm0, %zmm0, %k04120; X86-NEXT:    kortestw %k0, %k04121; X86-NEXT:    je LBB67_24122; X86-NEXT:  ## %bb.1: ## %bb.14123; X86-NEXT:    subl $12, %esp4124; X86-NEXT:    .cfi_def_cfa_offset 164125; X86-NEXT:    vzeroupper4126; X86-NEXT:    calll _foo4127; X86-NEXT:    addl $12, %esp4128; X86-NEXT:  LBB67_2: ## %bb.24129; X86-NEXT:    vzeroupper4130; X86-NEXT:    retl4131  %a = icmp eq <16 x i32> %x, zeroinitializer4132  %b = icmp eq <16 x i32> %y, zeroinitializer4133  %c = and <16 x i1> %a, %b4134  %d = bitcast <16 x i1> %c to i164135  %e = icmp eq i16 %d, -14136  br i1 %e, label %bb.2, label %bb.14137bb.1:4138  call void @foo()4139  br label %bb.24140bb.2:4141  ret void4142}4143 4144; This is derived from an intrinsic test where v4i1 mask was created by _mm_cmp_epi32_mask, then it was passed to _mm512_mask_blend_epi32 which uses a v16i1 mask.4145; The widening happens in the scalar domain between the intrinsics. The middle end optmized it to this.4146define <8 x i64> @mask_widening(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d, <8 x i64> %e, <8 x i64> %f) {4147; KNL-LABEL: mask_widening:4148; KNL:       ## %bb.0: ## %entry4149; KNL-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm14150; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm04151; KNL-NEXT:    vpcmpeqd %zmm1, %zmm0, %k04152; KNL-NEXT:    kshiftlw $12, %k0, %k04153; KNL-NEXT:    kshiftrw $12, %k0, %k14154; KNL-NEXT:    vpblendmd %zmm5, %zmm4, %zmm0 {%k1}4155; KNL-NEXT:    retq4156;4157; SKX-LABEL: mask_widening:4158; SKX:       ## %bb.0: ## %entry4159; SKX-NEXT:    vpcmpeqd %xmm1, %xmm0, %k14160; SKX-NEXT:    vpblendmd %zmm5, %zmm4, %zmm0 {%k1}4161; SKX-NEXT:    retq4162;4163; AVX512BW-LABEL: mask_widening:4164; AVX512BW:       ## %bb.0: ## %entry4165; AVX512BW-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm14166; AVX512BW-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm04167; AVX512BW-NEXT:    vpcmpeqd %zmm1, %zmm0, %k04168; AVX512BW-NEXT:    kshiftlw $12, %k0, %k04169; AVX512BW-NEXT:    kshiftrw $12, %k0, %k14170; AVX512BW-NEXT:    vpblendmd %zmm5, %zmm4, %zmm0 {%k1}4171; AVX512BW-NEXT:    retq4172;4173; AVX512DQ-LABEL: mask_widening:4174; AVX512DQ:       ## %bb.0: ## %entry4175; AVX512DQ-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm14176; AVX512DQ-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm04177; AVX512DQ-NEXT:    vpcmpeqd %zmm1, %zmm0, %k04178; AVX512DQ-NEXT:    kshiftlw $12, %k0, %k04179; AVX512DQ-NEXT:    kshiftrw $12, %k0, %k14180; AVX512DQ-NEXT:    vpblendmd %zmm5, %zmm4, %zmm0 {%k1}4181; AVX512DQ-NEXT:    retq4182;4183; X86-LABEL: mask_widening:4184; X86:       ## %bb.0: ## %entry4185; X86-NEXT:    pushl %ebp4186; X86-NEXT:    .cfi_def_cfa_offset 84187; X86-NEXT:    .cfi_offset %ebp, -84188; X86-NEXT:    movl %esp, %ebp4189; X86-NEXT:    .cfi_def_cfa_register %ebp4190; X86-NEXT:    andl $-64, %esp4191; X86-NEXT:    subl $64, %esp4192; X86-NEXT:    vpcmpeqd %xmm1, %xmm0, %k14193; X86-NEXT:    vmovdqa64 8(%ebp), %zmm04194; X86-NEXT:    vmovdqa32 72(%ebp), %zmm0 {%k1}4195; X86-NEXT:    movl %ebp, %esp4196; X86-NEXT:    popl %ebp4197; X86-NEXT:    retl4198entry:4199  %0 = bitcast <2 x i64> %a to <4 x i32>4200  %1 = bitcast <2 x i64> %b to <4 x i32>4201  %2 = icmp eq <4 x i32> %0, %14202  %3 = shufflevector <4 x i1> %2, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>4203  %4 = bitcast <8 x i64> %f to <16 x i32>4204  %5 = bitcast <8 x i64> %e to <16 x i32>4205  %6 = shufflevector <8 x i1> %3, <8 x i1> <i1 false, i1 undef, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>4206  %7 = select <16 x i1> %6, <16 x i32> %4, <16 x i32> %54207  %8 = bitcast <16 x i32> %7 to <8 x i64>4208  ret <8 x i64> %84209}4210 4211define void @store_v128i1_constant(ptr %R) {4212; KNL-LABEL: store_v128i1_constant:4213; KNL:       ## %bb.0: ## %entry4214; KNL-NEXT:    vmovaps {{.*#+}} xmm0 = [61437,65535,65403,57343,57341,65535,65467,49151]4215; KNL-NEXT:    vmovaps %xmm0, (%rdi)4216; KNL-NEXT:    retq4217;4218; SKX-LABEL: store_v128i1_constant:4219; SKX:       ## %bb.0: ## %entry4220; SKX-NEXT:    movabsq $-4611686310485172227, %rax ## imm = 0xBFFFFFBBFFFFDFFD4221; SKX-NEXT:    movq %rax, 8(%rdi)4222; SKX-NEXT:    movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD4223; SKX-NEXT:    movq %rax, (%rdi)4224; SKX-NEXT:    retq4225;4226; AVX512BW-LABEL: store_v128i1_constant:4227; AVX512BW:       ## %bb.0: ## %entry4228; AVX512BW-NEXT:    movabsq $-4611686310485172227, %rax ## imm = 0xBFFFFFBBFFFFDFFD4229; AVX512BW-NEXT:    movq %rax, 8(%rdi)4230; AVX512BW-NEXT:    movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD4231; AVX512BW-NEXT:    movq %rax, (%rdi)4232; AVX512BW-NEXT:    retq4233;4234; AVX512DQ-LABEL: store_v128i1_constant:4235; AVX512DQ:       ## %bb.0: ## %entry4236; AVX512DQ-NEXT:    vmovaps {{.*#+}} xmm0 = [61437,65535,65403,57343,57341,65535,65467,49151]4237; AVX512DQ-NEXT:    vmovaps %xmm0, (%rdi)4238; AVX512DQ-NEXT:    retq4239;4240; X86-LABEL: store_v128i1_constant:4241; X86:       ## %bb.0: ## %entry4242; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax4243; X86-NEXT:    vmovaps {{.*#+}} xmm0 = [4294963197,3758096251,4294959101,3221225403]4244; X86-NEXT:    vmovaps %xmm0, (%eax)4245; X86-NEXT:    retl4246entry:4247  store <128 x i1> <i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1>, ptr %R4248  ret void4249}4250 4251define void @store_v64i1_constant(ptr %R) {4252; CHECK-LABEL: store_v64i1_constant:4253; CHECK:       ## %bb.0: ## %entry4254; CHECK-NEXT:    movabsq $-2305843576149381123, %rax ## imm = 0xDFFFFF7BFFFFEFFD4255; CHECK-NEXT:    movq %rax, (%rdi)4256; CHECK-NEXT:    retq4257;4258; X86-LABEL: store_v64i1_constant:4259; X86:       ## %bb.0: ## %entry4260; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax4261; X86-NEXT:    movl $-536871045, 4(%eax) ## imm = 0xDFFFFF7B4262; X86-NEXT:    movl $-4099, (%eax) ## imm = 0xEFFD4263; X86-NEXT:    retl4264entry:4265  store <64 x i1> <i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1>, ptr %R4266  ret void4267}4268 4269define void @store_v2i1_constant(ptr %R) {4270; CHECK-LABEL: store_v2i1_constant:4271; CHECK:       ## %bb.0: ## %entry4272; CHECK-NEXT:    movb $1, (%rdi)4273; CHECK-NEXT:    retq4274;4275; X86-LABEL: store_v2i1_constant:4276; X86:       ## %bb.0: ## %entry4277; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax4278; X86-NEXT:    movb $1, (%eax)4279; X86-NEXT:    retl4280entry:4281  store <2 x i1> <i1 1, i1 0>, ptr %R4282  ret void4283}4284 4285define void @store_v4i1_constant(ptr %R) {4286; CHECK-LABEL: store_v4i1_constant:4287; CHECK:       ## %bb.0: ## %entry4288; CHECK-NEXT:    movb $5, (%rdi)4289; CHECK-NEXT:    retq4290;4291; X86-LABEL: store_v4i1_constant:4292; X86:       ## %bb.0: ## %entry4293; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax4294; X86-NEXT:    movb $5, (%eax)4295; X86-NEXT:    retl4296entry:4297  store <4 x i1> <i1 1, i1 0, i1 1, i1 0>, ptr %R4298  ret void4299}4300 4301; Make sure we bring the -1 constant into the mask domain.4302define void @mask_not_cast(ptr, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>) {4303; CHECK-LABEL: mask_not_cast:4304; CHECK:       ## %bb.0:4305; CHECK-NEXT:    vpcmpnleud %zmm3, %zmm2, %k14306; CHECK-NEXT:    vptestmd %zmm0, %zmm1, %k1 {%k1}4307; CHECK-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}4308; CHECK-NEXT:    vzeroupper4309; CHECK-NEXT:    retq4310;4311; X86-LABEL: mask_not_cast:4312; X86:       ## %bb.0:4313; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax4314; X86-NEXT:    vpcmpnleud %zmm3, %zmm2, %k14315; X86-NEXT:    vptestmd %zmm0, %zmm1, %k1 {%k1}4316; X86-NEXT:    vmovdqu32 %zmm0, (%eax) {%k1}4317; X86-NEXT:    vzeroupper4318; X86-NEXT:    retl4319  %6 = and <8 x i64> %2, %14320  %7 = bitcast <8 x i64> %6 to <16 x i32>4321  %8 = icmp ne <16 x i32> %7, zeroinitializer4322  %9 = bitcast <16 x i1> %8 to i164323  %10 = bitcast <8 x i64> %3 to <16 x i32>4324  %11 = bitcast <8 x i64> %4 to <16 x i32>4325  %12 = icmp ule <16 x i32> %10, %114326  %13 = bitcast <16 x i1> %12 to i164327  %14 = xor i16 %13, -14328  %15 = and i16 %14, %94329  %16 = bitcast <8 x i64> %1 to <16 x i32>4330  %17 = bitcast i16 %15 to <16 x i1>4331  tail call void @llvm.masked.store.v16i32.p0(<16 x i32> %16, ptr %0, i32 1, <16 x i1> %17) #24332  ret void4333}4334declare void @llvm.masked.store.v16i32.p0(<16 x i32>, ptr, i32, <16 x i1>)4335 4336define void @ktest_3(<8 x i32> %w, <8 x i32> %x, <8 x i32> %y, <8 x i32> %z) {4337; KNL-LABEL: ktest_3:4338; KNL:       ## %bb.0:4339; KNL-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm34340; KNL-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm24341; KNL-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm14342; KNL-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm04343; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k04344; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k14345; KNL-NEXT:    vptestnmd %zmm2, %zmm2, %k24346; KNL-NEXT:    vptestnmd %zmm3, %zmm3, %k34347; KNL-NEXT:    korw %k1, %k0, %k04348; KNL-NEXT:    korw %k3, %k2, %k14349; KNL-NEXT:    kandw %k1, %k0, %k04350; KNL-NEXT:    kmovw %k0, %eax4351; KNL-NEXT:    testb %al, %al4352; KNL-NEXT:    je LBB74_14353; KNL-NEXT:  ## %bb.2: ## %exit4354; KNL-NEXT:    vzeroupper4355; KNL-NEXT:    retq4356; KNL-NEXT:  LBB74_1: ## %bar4357; KNL-NEXT:    pushq %rax4358; KNL-NEXT:    .cfi_def_cfa_offset 164359; KNL-NEXT:    vzeroupper4360; KNL-NEXT:    callq _foo4361; KNL-NEXT:    addq $8, %rsp4362; KNL-NEXT:    retq4363;4364; SKX-LABEL: ktest_3:4365; SKX:       ## %bb.0:4366; SKX-NEXT:    vptestnmd %ymm0, %ymm0, %k04367; SKX-NEXT:    vptestnmd %ymm1, %ymm1, %k14368; SKX-NEXT:    korb %k1, %k0, %k04369; SKX-NEXT:    vptestnmd %ymm2, %ymm2, %k14370; SKX-NEXT:    vptestnmd %ymm3, %ymm3, %k24371; SKX-NEXT:    korb %k2, %k1, %k14372; SKX-NEXT:    ktestb %k1, %k04373; SKX-NEXT:    je LBB74_14374; SKX-NEXT:  ## %bb.2: ## %exit4375; SKX-NEXT:    vzeroupper4376; SKX-NEXT:    retq4377; SKX-NEXT:  LBB74_1: ## %bar4378; SKX-NEXT:    pushq %rax4379; SKX-NEXT:    .cfi_def_cfa_offset 164380; SKX-NEXT:    vzeroupper4381; SKX-NEXT:    callq _foo4382; SKX-NEXT:    addq $8, %rsp4383; SKX-NEXT:    retq4384;4385; AVX512BW-LABEL: ktest_3:4386; AVX512BW:       ## %bb.0:4387; AVX512BW-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm34388; AVX512BW-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm24389; AVX512BW-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm14390; AVX512BW-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm04391; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k04392; AVX512BW-NEXT:    vptestnmd %zmm1, %zmm1, %k14393; AVX512BW-NEXT:    vptestnmd %zmm2, %zmm2, %k24394; AVX512BW-NEXT:    vptestnmd %zmm3, %zmm3, %k34395; AVX512BW-NEXT:    korw %k1, %k0, %k04396; AVX512BW-NEXT:    korw %k3, %k2, %k14397; AVX512BW-NEXT:    kandw %k1, %k0, %k04398; AVX512BW-NEXT:    kmovd %k0, %eax4399; AVX512BW-NEXT:    testb %al, %al4400; AVX512BW-NEXT:    je LBB74_14401; AVX512BW-NEXT:  ## %bb.2: ## %exit4402; AVX512BW-NEXT:    vzeroupper4403; AVX512BW-NEXT:    retq4404; AVX512BW-NEXT:  LBB74_1: ## %bar4405; AVX512BW-NEXT:    pushq %rax4406; AVX512BW-NEXT:    .cfi_def_cfa_offset 164407; AVX512BW-NEXT:    vzeroupper4408; AVX512BW-NEXT:    callq _foo4409; AVX512BW-NEXT:    addq $8, %rsp4410; AVX512BW-NEXT:    retq4411;4412; AVX512DQ-LABEL: ktest_3:4413; AVX512DQ:       ## %bb.0:4414; AVX512DQ-NEXT:    ## kill: def $ymm3 killed $ymm3 def $zmm34415; AVX512DQ-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm24416; AVX512DQ-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm14417; AVX512DQ-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm04418; AVX512DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k04419; AVX512DQ-NEXT:    vptestnmd %zmm1, %zmm1, %k14420; AVX512DQ-NEXT:    vptestnmd %zmm2, %zmm2, %k24421; AVX512DQ-NEXT:    vptestnmd %zmm3, %zmm3, %k34422; AVX512DQ-NEXT:    korb %k1, %k0, %k04423; AVX512DQ-NEXT:    korb %k3, %k2, %k14424; AVX512DQ-NEXT:    ktestb %k1, %k04425; AVX512DQ-NEXT:    je LBB74_14426; AVX512DQ-NEXT:  ## %bb.2: ## %exit4427; AVX512DQ-NEXT:    vzeroupper4428; AVX512DQ-NEXT:    retq4429; AVX512DQ-NEXT:  LBB74_1: ## %bar4430; AVX512DQ-NEXT:    pushq %rax4431; AVX512DQ-NEXT:    .cfi_def_cfa_offset 164432; AVX512DQ-NEXT:    vzeroupper4433; AVX512DQ-NEXT:    callq _foo4434; AVX512DQ-NEXT:    addq $8, %rsp4435; AVX512DQ-NEXT:    retq4436;4437; X86-LABEL: ktest_3:4438; X86:       ## %bb.0:4439; X86-NEXT:    vptestnmd %ymm0, %ymm0, %k04440; X86-NEXT:    vptestnmd %ymm1, %ymm1, %k14441; X86-NEXT:    korb %k1, %k0, %k04442; X86-NEXT:    vptestnmd %ymm2, %ymm2, %k14443; X86-NEXT:    vptestnmd %ymm3, %ymm3, %k24444; X86-NEXT:    korb %k2, %k1, %k14445; X86-NEXT:    ktestb %k1, %k04446; X86-NEXT:    je LBB74_14447; X86-NEXT:  ## %bb.2: ## %exit4448; X86-NEXT:    vzeroupper4449; X86-NEXT:    retl4450; X86-NEXT:  LBB74_1: ## %bar4451; X86-NEXT:    subl $12, %esp4452; X86-NEXT:    .cfi_def_cfa_offset 164453; X86-NEXT:    vzeroupper4454; X86-NEXT:    calll _foo4455; X86-NEXT:    addl $12, %esp4456; X86-NEXT:    retl4457  %a = icmp eq <8 x i32> %w, zeroinitializer4458  %b = icmp eq <8 x i32> %x, zeroinitializer4459  %c = icmp eq <8 x i32> %y, zeroinitializer4460  %d = icmp eq <8 x i32> %z, zeroinitializer4461  %e = or <8 x i1> %a, %b4462  %f = or <8 x i1> %c, %d4463  %g = and <8 x i1> %e, %f4464  %h = bitcast <8 x i1> %g to i84465  %i = icmp eq i8 %h, 04466  br i1 %i, label %bar, label %exit4467 4468bar:4469  call void @foo()4470  br label %exit4471 4472exit:4473  ret void4474}4475 4476define void @ktest_4(<8 x i64> %w, <8 x i64> %x, <8 x i64> %y, <8 x i64> %z) {4477; KNL-LABEL: ktest_4:4478; KNL:       ## %bb.0:4479; KNL-NEXT:    vptestnmq %zmm0, %zmm0, %k04480; KNL-NEXT:    vptestnmq %zmm1, %zmm1, %k14481; KNL-NEXT:    vptestnmq %zmm2, %zmm2, %k24482; KNL-NEXT:    vptestnmq %zmm3, %zmm3, %k34483; KNL-NEXT:    korw %k1, %k0, %k04484; KNL-NEXT:    korw %k3, %k2, %k14485; KNL-NEXT:    kandw %k1, %k0, %k04486; KNL-NEXT:    kmovw %k0, %eax4487; KNL-NEXT:    testb %al, %al4488; KNL-NEXT:    je LBB75_14489; KNL-NEXT:  ## %bb.2: ## %exit4490; KNL-NEXT:    vzeroupper4491; KNL-NEXT:    retq4492; KNL-NEXT:  LBB75_1: ## %bar4493; KNL-NEXT:    pushq %rax4494; KNL-NEXT:    .cfi_def_cfa_offset 164495; KNL-NEXT:    vzeroupper4496; KNL-NEXT:    callq _foo4497; KNL-NEXT:    addq $8, %rsp4498; KNL-NEXT:    retq4499;4500; SKX-LABEL: ktest_4:4501; SKX:       ## %bb.0:4502; SKX-NEXT:    vptestnmq %zmm0, %zmm0, %k04503; SKX-NEXT:    vptestnmq %zmm1, %zmm1, %k14504; SKX-NEXT:    korb %k1, %k0, %k04505; SKX-NEXT:    vptestnmq %zmm2, %zmm2, %k14506; SKX-NEXT:    vptestnmq %zmm3, %zmm3, %k24507; SKX-NEXT:    korb %k2, %k1, %k14508; SKX-NEXT:    ktestb %k1, %k04509; SKX-NEXT:    je LBB75_14510; SKX-NEXT:  ## %bb.2: ## %exit4511; SKX-NEXT:    vzeroupper4512; SKX-NEXT:    retq4513; SKX-NEXT:  LBB75_1: ## %bar4514; SKX-NEXT:    pushq %rax4515; SKX-NEXT:    .cfi_def_cfa_offset 164516; SKX-NEXT:    vzeroupper4517; SKX-NEXT:    callq _foo4518; SKX-NEXT:    addq $8, %rsp4519; SKX-NEXT:    retq4520;4521; AVX512BW-LABEL: ktest_4:4522; AVX512BW:       ## %bb.0:4523; AVX512BW-NEXT:    vptestnmq %zmm0, %zmm0, %k04524; AVX512BW-NEXT:    vptestnmq %zmm1, %zmm1, %k14525; AVX512BW-NEXT:    vptestnmq %zmm2, %zmm2, %k24526; AVX512BW-NEXT:    vptestnmq %zmm3, %zmm3, %k34527; AVX512BW-NEXT:    korw %k1, %k0, %k04528; AVX512BW-NEXT:    korw %k3, %k2, %k14529; AVX512BW-NEXT:    kandw %k1, %k0, %k04530; AVX512BW-NEXT:    kmovd %k0, %eax4531; AVX512BW-NEXT:    testb %al, %al4532; AVX512BW-NEXT:    je LBB75_14533; AVX512BW-NEXT:  ## %bb.2: ## %exit4534; AVX512BW-NEXT:    vzeroupper4535; AVX512BW-NEXT:    retq4536; AVX512BW-NEXT:  LBB75_1: ## %bar4537; AVX512BW-NEXT:    pushq %rax4538; AVX512BW-NEXT:    .cfi_def_cfa_offset 164539; AVX512BW-NEXT:    vzeroupper4540; AVX512BW-NEXT:    callq _foo4541; AVX512BW-NEXT:    addq $8, %rsp4542; AVX512BW-NEXT:    retq4543;4544; AVX512DQ-LABEL: ktest_4:4545; AVX512DQ:       ## %bb.0:4546; AVX512DQ-NEXT:    vptestnmq %zmm0, %zmm0, %k04547; AVX512DQ-NEXT:    vptestnmq %zmm1, %zmm1, %k14548; AVX512DQ-NEXT:    korb %k1, %k0, %k04549; AVX512DQ-NEXT:    vptestnmq %zmm2, %zmm2, %k14550; AVX512DQ-NEXT:    vptestnmq %zmm3, %zmm3, %k24551; AVX512DQ-NEXT:    korb %k2, %k1, %k14552; AVX512DQ-NEXT:    ktestb %k1, %k04553; AVX512DQ-NEXT:    je LBB75_14554; AVX512DQ-NEXT:  ## %bb.2: ## %exit4555; AVX512DQ-NEXT:    vzeroupper4556; AVX512DQ-NEXT:    retq4557; AVX512DQ-NEXT:  LBB75_1: ## %bar4558; AVX512DQ-NEXT:    pushq %rax4559; AVX512DQ-NEXT:    .cfi_def_cfa_offset 164560; AVX512DQ-NEXT:    vzeroupper4561; AVX512DQ-NEXT:    callq _foo4562; AVX512DQ-NEXT:    addq $8, %rsp4563; AVX512DQ-NEXT:    retq4564;4565; X86-LABEL: ktest_4:4566; X86:       ## %bb.0:4567; X86-NEXT:    vptestnmq %zmm0, %zmm0, %k04568; X86-NEXT:    vptestnmq %zmm1, %zmm1, %k14569; X86-NEXT:    korb %k1, %k0, %k04570; X86-NEXT:    vptestnmq %zmm2, %zmm2, %k14571; X86-NEXT:    vptestnmq %zmm3, %zmm3, %k24572; X86-NEXT:    korb %k2, %k1, %k14573; X86-NEXT:    ktestb %k1, %k04574; X86-NEXT:    je LBB75_14575; X86-NEXT:  ## %bb.2: ## %exit4576; X86-NEXT:    vzeroupper4577; X86-NEXT:    retl4578; X86-NEXT:  LBB75_1: ## %bar4579; X86-NEXT:    subl $12, %esp4580; X86-NEXT:    .cfi_def_cfa_offset 164581; X86-NEXT:    vzeroupper4582; X86-NEXT:    calll _foo4583; X86-NEXT:    addl $12, %esp4584; X86-NEXT:    retl4585  %a = icmp eq <8 x i64> %w, zeroinitializer4586  %b = icmp eq <8 x i64> %x, zeroinitializer4587  %c = icmp eq <8 x i64> %y, zeroinitializer4588  %d = icmp eq <8 x i64> %z, zeroinitializer4589  %e = or <8 x i1> %a, %b4590  %f = or <8 x i1> %c, %d4591  %g = and <8 x i1> %e, %f4592  %h = bitcast <8 x i1> %g to i84593  %i = icmp eq i8 %h, 04594  br i1 %i, label %bar, label %exit4595 4596bar:4597  call void @foo()4598  br label %exit4599 4600exit:4601  ret void4602}4603 4604define void @ktest_5(<16 x i32> %w, <16 x i32> %x, <16 x i32> %y, <16 x i32> %z) {4605; KNL-LABEL: ktest_5:4606; KNL:       ## %bb.0:4607; KNL-NEXT:    vptestnmd %zmm0, %zmm0, %k04608; KNL-NEXT:    vptestnmd %zmm1, %zmm1, %k14609; KNL-NEXT:    korw %k1, %k0, %k04610; KNL-NEXT:    vptestnmd %zmm2, %zmm2, %k14611; KNL-NEXT:    vptestnmd %zmm3, %zmm3, %k24612; KNL-NEXT:    korw %k2, %k1, %k14613; KNL-NEXT:    kandw %k1, %k0, %k04614; KNL-NEXT:    kortestw %k0, %k04615; KNL-NEXT:    je LBB76_14616; KNL-NEXT:  ## %bb.2: ## %exit4617; KNL-NEXT:    vzeroupper4618; KNL-NEXT:    retq4619; KNL-NEXT:  LBB76_1: ## %bar4620; KNL-NEXT:    pushq %rax4621; KNL-NEXT:    .cfi_def_cfa_offset 164622; KNL-NEXT:    vzeroupper4623; KNL-NEXT:    callq _foo4624; KNL-NEXT:    addq $8, %rsp4625; KNL-NEXT:    retq4626;4627; SKX-LABEL: ktest_5:4628; SKX:       ## %bb.0:4629; SKX-NEXT:    vptestnmd %zmm0, %zmm0, %k04630; SKX-NEXT:    vptestnmd %zmm1, %zmm1, %k14631; SKX-NEXT:    korw %k1, %k0, %k04632; SKX-NEXT:    vptestnmd %zmm2, %zmm2, %k14633; SKX-NEXT:    vptestnmd %zmm3, %zmm3, %k24634; SKX-NEXT:    korw %k2, %k1, %k14635; SKX-NEXT:    ktestw %k1, %k04636; SKX-NEXT:    je LBB76_14637; SKX-NEXT:  ## %bb.2: ## %exit4638; SKX-NEXT:    vzeroupper4639; SKX-NEXT:    retq4640; SKX-NEXT:  LBB76_1: ## %bar4641; SKX-NEXT:    pushq %rax4642; SKX-NEXT:    .cfi_def_cfa_offset 164643; SKX-NEXT:    vzeroupper4644; SKX-NEXT:    callq _foo4645; SKX-NEXT:    addq $8, %rsp4646; SKX-NEXT:    retq4647;4648; AVX512BW-LABEL: ktest_5:4649; AVX512BW:       ## %bb.0:4650; AVX512BW-NEXT:    vptestnmd %zmm0, %zmm0, %k04651; AVX512BW-NEXT:    vptestnmd %zmm1, %zmm1, %k14652; AVX512BW-NEXT:    korw %k1, %k0, %k04653; AVX512BW-NEXT:    vptestnmd %zmm2, %zmm2, %k14654; AVX512BW-NEXT:    vptestnmd %zmm3, %zmm3, %k24655; AVX512BW-NEXT:    korw %k2, %k1, %k14656; AVX512BW-NEXT:    kandw %k1, %k0, %k04657; AVX512BW-NEXT:    kortestw %k0, %k04658; AVX512BW-NEXT:    je LBB76_14659; AVX512BW-NEXT:  ## %bb.2: ## %exit4660; AVX512BW-NEXT:    vzeroupper4661; AVX512BW-NEXT:    retq4662; AVX512BW-NEXT:  LBB76_1: ## %bar4663; AVX512BW-NEXT:    pushq %rax4664; AVX512BW-NEXT:    .cfi_def_cfa_offset 164665; AVX512BW-NEXT:    vzeroupper4666; AVX512BW-NEXT:    callq _foo4667; AVX512BW-NEXT:    addq $8, %rsp4668; AVX512BW-NEXT:    retq4669;4670; AVX512DQ-LABEL: ktest_5:4671; AVX512DQ:       ## %bb.0:4672; AVX512DQ-NEXT:    vptestnmd %zmm0, %zmm0, %k04673; AVX512DQ-NEXT:    vptestnmd %zmm1, %zmm1, %k14674; AVX512DQ-NEXT:    korw %k1, %k0, %k04675; AVX512DQ-NEXT:    vptestnmd %zmm2, %zmm2, %k14676; AVX512DQ-NEXT:    vptestnmd %zmm3, %zmm3, %k24677; AVX512DQ-NEXT:    korw %k2, %k1, %k14678; AVX512DQ-NEXT:    ktestw %k1, %k04679; AVX512DQ-NEXT:    je LBB76_14680; AVX512DQ-NEXT:  ## %bb.2: ## %exit4681; AVX512DQ-NEXT:    vzeroupper4682; AVX512DQ-NEXT:    retq4683; AVX512DQ-NEXT:  LBB76_1: ## %bar4684; AVX512DQ-NEXT:    pushq %rax4685; AVX512DQ-NEXT:    .cfi_def_cfa_offset 164686; AVX512DQ-NEXT:    vzeroupper4687; AVX512DQ-NEXT:    callq _foo4688; AVX512DQ-NEXT:    addq $8, %rsp4689; AVX512DQ-NEXT:    retq4690;4691; X86-LABEL: ktest_5:4692; X86:       ## %bb.0:4693; X86-NEXT:    vptestnmd %zmm0, %zmm0, %k04694; X86-NEXT:    vptestnmd %zmm1, %zmm1, %k14695; X86-NEXT:    korw %k1, %k0, %k04696; X86-NEXT:    vptestnmd %zmm2, %zmm2, %k14697; X86-NEXT:    vptestnmd %zmm3, %zmm3, %k24698; X86-NEXT:    korw %k2, %k1, %k14699; X86-NEXT:    ktestw %k1, %k04700; X86-NEXT:    je LBB76_14701; X86-NEXT:  ## %bb.2: ## %exit4702; X86-NEXT:    vzeroupper4703; X86-NEXT:    retl4704; X86-NEXT:  LBB76_1: ## %bar4705; X86-NEXT:    subl $12, %esp4706; X86-NEXT:    .cfi_def_cfa_offset 164707; X86-NEXT:    vzeroupper4708; X86-NEXT:    calll _foo4709; X86-NEXT:    addl $12, %esp4710; X86-NEXT:    retl4711  %a = icmp eq <16 x i32> %w, zeroinitializer4712  %b = icmp eq <16 x i32> %x, zeroinitializer4713  %c = icmp eq <16 x i32> %y, zeroinitializer4714  %d = icmp eq <16 x i32> %z, zeroinitializer4715  %e = or <16 x i1> %a, %b4716  %f = or <16 x i1> %c, %d4717  %g = and <16 x i1> %e, %f4718  %h = bitcast <16 x i1> %g to i164719  %i = icmp eq i16 %h, 04720  br i1 %i, label %bar, label %exit4721 4722bar:4723  call void @foo()4724  br label %exit4725 4726exit:4727  ret void4728}4729 4730define void @ktest_6(<32 x i16> %w, <32 x i16> %x, <32 x i16> %y, <32 x i16> %z) {4731; KNL-LABEL: ktest_6:4732; KNL:       ## %bb.0:4733; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm44734; KNL-NEXT:    vpxor %xmm5, %xmm5, %xmm54735; KNL-NEXT:    vpcmpeqw %ymm5, %ymm4, %ymm44736; KNL-NEXT:    vpcmpeqw %ymm5, %ymm0, %ymm04737; KNL-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm04738; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm44739; KNL-NEXT:    vpcmpeqw %ymm5, %ymm4, %ymm44740; KNL-NEXT:    vpcmpeqw %ymm5, %ymm1, %ymm14741; KNL-NEXT:    vinserti64x4 $1, %ymm4, %zmm1, %zmm14742; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm04743; KNL-NEXT:    vextracti64x4 $1, %zmm2, %ymm14744; KNL-NEXT:    vpcmpeqw %ymm5, %ymm1, %ymm14745; KNL-NEXT:    vpcmpeqw %ymm5, %ymm2, %ymm24746; KNL-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm14747; KNL-NEXT:    vextracti64x4 $1, %zmm3, %ymm24748; KNL-NEXT:    vpcmpeqw %ymm5, %ymm2, %ymm24749; KNL-NEXT:    vpcmpeqw %ymm5, %ymm3, %ymm34750; KNL-NEXT:    vinserti64x4 $1, %ymm2, %zmm3, %zmm24751; KNL-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm0 & (zmm2 | zmm1)4752; KNL-NEXT:    vextracti64x4 $1, %zmm2, %ymm04753; KNL-NEXT:    vpor %ymm0, %ymm2, %ymm04754; KNL-NEXT:    vpmovsxwd %ymm0, %zmm04755; KNL-NEXT:    vpslld $31, %zmm0, %zmm04756; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k04757; KNL-NEXT:    kortestw %k0, %k04758; KNL-NEXT:    je LBB77_14759; KNL-NEXT:  ## %bb.2: ## %exit4760; KNL-NEXT:    vzeroupper4761; KNL-NEXT:    retq4762; KNL-NEXT:  LBB77_1: ## %bar4763; KNL-NEXT:    pushq %rax4764; KNL-NEXT:    .cfi_def_cfa_offset 164765; KNL-NEXT:    vzeroupper4766; KNL-NEXT:    callq _foo4767; KNL-NEXT:    addq $8, %rsp4768; KNL-NEXT:    retq4769;4770; SKX-LABEL: ktest_6:4771; SKX:       ## %bb.0:4772; SKX-NEXT:    vptestnmw %zmm0, %zmm0, %k04773; SKX-NEXT:    vptestnmw %zmm1, %zmm1, %k14774; SKX-NEXT:    kord %k1, %k0, %k04775; SKX-NEXT:    vptestnmw %zmm2, %zmm2, %k14776; SKX-NEXT:    vptestnmw %zmm3, %zmm3, %k24777; SKX-NEXT:    kord %k2, %k1, %k14778; SKX-NEXT:    ktestd %k1, %k04779; SKX-NEXT:    je LBB77_14780; SKX-NEXT:  ## %bb.2: ## %exit4781; SKX-NEXT:    vzeroupper4782; SKX-NEXT:    retq4783; SKX-NEXT:  LBB77_1: ## %bar4784; SKX-NEXT:    pushq %rax4785; SKX-NEXT:    .cfi_def_cfa_offset 164786; SKX-NEXT:    vzeroupper4787; SKX-NEXT:    callq _foo4788; SKX-NEXT:    addq $8, %rsp4789; SKX-NEXT:    retq4790;4791; AVX512BW-LABEL: ktest_6:4792; AVX512BW:       ## %bb.0:4793; AVX512BW-NEXT:    vptestnmw %zmm0, %zmm0, %k04794; AVX512BW-NEXT:    vptestnmw %zmm1, %zmm1, %k14795; AVX512BW-NEXT:    kord %k1, %k0, %k04796; AVX512BW-NEXT:    vptestnmw %zmm2, %zmm2, %k14797; AVX512BW-NEXT:    vptestnmw %zmm3, %zmm3, %k24798; AVX512BW-NEXT:    kord %k2, %k1, %k14799; AVX512BW-NEXT:    ktestd %k1, %k04800; AVX512BW-NEXT:    je LBB77_14801; AVX512BW-NEXT:  ## %bb.2: ## %exit4802; AVX512BW-NEXT:    vzeroupper4803; AVX512BW-NEXT:    retq4804; AVX512BW-NEXT:  LBB77_1: ## %bar4805; AVX512BW-NEXT:    pushq %rax4806; AVX512BW-NEXT:    .cfi_def_cfa_offset 164807; AVX512BW-NEXT:    vzeroupper4808; AVX512BW-NEXT:    callq _foo4809; AVX512BW-NEXT:    addq $8, %rsp4810; AVX512BW-NEXT:    retq4811;4812; AVX512DQ-LABEL: ktest_6:4813; AVX512DQ:       ## %bb.0:4814; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm44815; AVX512DQ-NEXT:    vpxor %xmm5, %xmm5, %xmm54816; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm4, %ymm44817; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm0, %ymm04818; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm04819; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm44820; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm4, %ymm44821; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm1, %ymm14822; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm1, %zmm14823; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm04824; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm2, %ymm14825; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm1, %ymm14826; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm2, %ymm24827; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm14828; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm3, %ymm24829; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm2, %ymm24830; AVX512DQ-NEXT:    vpcmpeqw %ymm5, %ymm3, %ymm34831; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm3, %zmm24832; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm0 & (zmm2 | zmm1)4833; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm2, %ymm04834; AVX512DQ-NEXT:    vpor %ymm0, %ymm2, %ymm04835; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm04836; AVX512DQ-NEXT:    vpslld $31, %zmm0, %zmm04837; AVX512DQ-NEXT:    vpmovd2m %zmm0, %k04838; AVX512DQ-NEXT:    kortestw %k0, %k04839; AVX512DQ-NEXT:    je LBB77_14840; AVX512DQ-NEXT:  ## %bb.2: ## %exit4841; AVX512DQ-NEXT:    vzeroupper4842; AVX512DQ-NEXT:    retq4843; AVX512DQ-NEXT:  LBB77_1: ## %bar4844; AVX512DQ-NEXT:    pushq %rax4845; AVX512DQ-NEXT:    .cfi_def_cfa_offset 164846; AVX512DQ-NEXT:    vzeroupper4847; AVX512DQ-NEXT:    callq _foo4848; AVX512DQ-NEXT:    addq $8, %rsp4849; AVX512DQ-NEXT:    retq4850;4851; X86-LABEL: ktest_6:4852; X86:       ## %bb.0:4853; X86-NEXT:    vptestnmw %zmm0, %zmm0, %k04854; X86-NEXT:    vptestnmw %zmm1, %zmm1, %k14855; X86-NEXT:    kord %k1, %k0, %k04856; X86-NEXT:    vptestnmw %zmm2, %zmm2, %k14857; X86-NEXT:    vptestnmw %zmm3, %zmm3, %k24858; X86-NEXT:    kord %k2, %k1, %k14859; X86-NEXT:    ktestd %k1, %k04860; X86-NEXT:    je LBB77_14861; X86-NEXT:  ## %bb.2: ## %exit4862; X86-NEXT:    vzeroupper4863; X86-NEXT:    retl4864; X86-NEXT:  LBB77_1: ## %bar4865; X86-NEXT:    subl $12, %esp4866; X86-NEXT:    .cfi_def_cfa_offset 164867; X86-NEXT:    vzeroupper4868; X86-NEXT:    calll _foo4869; X86-NEXT:    addl $12, %esp4870; X86-NEXT:    retl4871  %a = icmp eq <32 x i16> %w, zeroinitializer4872  %b = icmp eq <32 x i16> %x, zeroinitializer4873  %c = icmp eq <32 x i16> %y, zeroinitializer4874  %d = icmp eq <32 x i16> %z, zeroinitializer4875  %e = or <32 x i1> %a, %b4876  %f = or <32 x i1> %c, %d4877  %g = and <32 x i1> %e, %f4878  %h = bitcast <32 x i1> %g to i324879  %i = icmp eq i32 %h, 04880  br i1 %i, label %bar, label %exit4881 4882bar:4883  call void @foo()4884  br label %exit4885 4886exit:4887  ret void4888}4889 4890define void @ktest_7(<64 x i8> %w, <64 x i8> %x, <64 x i8> %y, <64 x i8> %z) {4891; KNL-LABEL: ktest_7:4892; KNL:       ## %bb.0:4893; KNL-NEXT:    vextracti64x4 $1, %zmm0, %ymm44894; KNL-NEXT:    vpxor %xmm5, %xmm5, %xmm54895; KNL-NEXT:    vpcmpeqb %ymm5, %ymm4, %ymm44896; KNL-NEXT:    vpcmpeqb %ymm5, %ymm0, %ymm04897; KNL-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm04898; KNL-NEXT:    vextracti64x4 $1, %zmm1, %ymm44899; KNL-NEXT:    vpcmpeqb %ymm5, %ymm4, %ymm44900; KNL-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm14901; KNL-NEXT:    vinserti64x4 $1, %ymm4, %zmm1, %zmm14902; KNL-NEXT:    vporq %zmm1, %zmm0, %zmm04903; KNL-NEXT:    vextracti64x4 $1, %zmm2, %ymm14904; KNL-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm14905; KNL-NEXT:    vpcmpeqb %ymm5, %ymm2, %ymm24906; KNL-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm14907; KNL-NEXT:    vextracti64x4 $1, %zmm3, %ymm24908; KNL-NEXT:    vpcmpeqb %ymm5, %ymm2, %ymm24909; KNL-NEXT:    vpcmpeqb %ymm5, %ymm3, %ymm34910; KNL-NEXT:    vinserti64x4 $1, %ymm2, %zmm3, %zmm24911; KNL-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm0 & (zmm2 | zmm1)4912; KNL-NEXT:    vextracti64x4 $1, %zmm2, %ymm04913; KNL-NEXT:    vpor %ymm0, %ymm2, %ymm04914; KNL-NEXT:    vpmovmskb %ymm0, %eax4915; KNL-NEXT:    testl %eax, %eax4916; KNL-NEXT:    je LBB78_14917; KNL-NEXT:  ## %bb.2: ## %exit4918; KNL-NEXT:    vzeroupper4919; KNL-NEXT:    retq4920; KNL-NEXT:  LBB78_1: ## %bar4921; KNL-NEXT:    pushq %rax4922; KNL-NEXT:    .cfi_def_cfa_offset 164923; KNL-NEXT:    vzeroupper4924; KNL-NEXT:    callq _foo4925; KNL-NEXT:    addq $8, %rsp4926; KNL-NEXT:    retq4927;4928; SKX-LABEL: ktest_7:4929; SKX:       ## %bb.0:4930; SKX-NEXT:    vptestnmb %zmm0, %zmm0, %k04931; SKX-NEXT:    vptestnmb %zmm1, %zmm1, %k14932; SKX-NEXT:    korq %k1, %k0, %k04933; SKX-NEXT:    vptestnmb %zmm2, %zmm2, %k14934; SKX-NEXT:    vptestnmb %zmm3, %zmm3, %k24935; SKX-NEXT:    korq %k2, %k1, %k14936; SKX-NEXT:    ktestq %k1, %k04937; SKX-NEXT:    je LBB78_14938; SKX-NEXT:  ## %bb.2: ## %exit4939; SKX-NEXT:    vzeroupper4940; SKX-NEXT:    retq4941; SKX-NEXT:  LBB78_1: ## %bar4942; SKX-NEXT:    pushq %rax4943; SKX-NEXT:    .cfi_def_cfa_offset 164944; SKX-NEXT:    vzeroupper4945; SKX-NEXT:    callq _foo4946; SKX-NEXT:    addq $8, %rsp4947; SKX-NEXT:    retq4948;4949; AVX512BW-LABEL: ktest_7:4950; AVX512BW:       ## %bb.0:4951; AVX512BW-NEXT:    vptestnmb %zmm0, %zmm0, %k04952; AVX512BW-NEXT:    vptestnmb %zmm1, %zmm1, %k14953; AVX512BW-NEXT:    korq %k1, %k0, %k04954; AVX512BW-NEXT:    vptestnmb %zmm2, %zmm2, %k14955; AVX512BW-NEXT:    vptestnmb %zmm3, %zmm3, %k24956; AVX512BW-NEXT:    korq %k2, %k1, %k14957; AVX512BW-NEXT:    ktestq %k1, %k04958; AVX512BW-NEXT:    je LBB78_14959; AVX512BW-NEXT:  ## %bb.2: ## %exit4960; AVX512BW-NEXT:    vzeroupper4961; AVX512BW-NEXT:    retq4962; AVX512BW-NEXT:  LBB78_1: ## %bar4963; AVX512BW-NEXT:    pushq %rax4964; AVX512BW-NEXT:    .cfi_def_cfa_offset 164965; AVX512BW-NEXT:    vzeroupper4966; AVX512BW-NEXT:    callq _foo4967; AVX512BW-NEXT:    addq $8, %rsp4968; AVX512BW-NEXT:    retq4969;4970; AVX512DQ-LABEL: ktest_7:4971; AVX512DQ:       ## %bb.0:4972; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm0, %ymm44973; AVX512DQ-NEXT:    vpxor %xmm5, %xmm5, %xmm54974; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm4, %ymm44975; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm0, %ymm04976; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm0, %zmm04977; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm44978; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm4, %ymm44979; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm14980; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm4, %zmm1, %zmm14981; AVX512DQ-NEXT:    vporq %zmm1, %zmm0, %zmm04982; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm2, %ymm14983; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm1, %ymm14984; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm2, %ymm24985; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm1, %zmm2, %zmm14986; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm3, %ymm24987; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm2, %ymm24988; AVX512DQ-NEXT:    vpcmpeqb %ymm5, %ymm3, %ymm34989; AVX512DQ-NEXT:    vinserti64x4 $1, %ymm2, %zmm3, %zmm24990; AVX512DQ-NEXT:    vpternlogq {{.*#+}} zmm2 = zmm0 & (zmm2 | zmm1)4991; AVX512DQ-NEXT:    vextracti64x4 $1, %zmm2, %ymm04992; AVX512DQ-NEXT:    vpor %ymm0, %ymm2, %ymm04993; AVX512DQ-NEXT:    vpmovmskb %ymm0, %eax4994; AVX512DQ-NEXT:    testl %eax, %eax4995; AVX512DQ-NEXT:    je LBB78_14996; AVX512DQ-NEXT:  ## %bb.2: ## %exit4997; AVX512DQ-NEXT:    vzeroupper4998; AVX512DQ-NEXT:    retq4999; AVX512DQ-NEXT:  LBB78_1: ## %bar5000; AVX512DQ-NEXT:    pushq %rax5001; AVX512DQ-NEXT:    .cfi_def_cfa_offset 165002; AVX512DQ-NEXT:    vzeroupper5003; AVX512DQ-NEXT:    callq _foo5004; AVX512DQ-NEXT:    addq $8, %rsp5005; AVX512DQ-NEXT:    retq5006;5007; X86-LABEL: ktest_7:5008; X86:       ## %bb.0:5009; X86-NEXT:    vptestnmb %zmm0, %zmm0, %k05010; X86-NEXT:    vptestnmb %zmm1, %zmm1, %k15011; X86-NEXT:    korq %k1, %k0, %k05012; X86-NEXT:    vptestnmb %zmm2, %zmm2, %k15013; X86-NEXT:    vptestnmb %zmm3, %zmm3, %k25014; X86-NEXT:    korq %k2, %k1, %k15015; X86-NEXT:    kandq %k1, %k0, %k05016; X86-NEXT:    kshiftrq $32, %k0, %k15017; X86-NEXT:    kortestd %k1, %k05018; X86-NEXT:    je LBB78_15019; X86-NEXT:  ## %bb.2: ## %exit5020; X86-NEXT:    vzeroupper5021; X86-NEXT:    retl5022; X86-NEXT:  LBB78_1: ## %bar5023; X86-NEXT:    subl $12, %esp5024; X86-NEXT:    .cfi_def_cfa_offset 165025; X86-NEXT:    vzeroupper5026; X86-NEXT:    calll _foo5027; X86-NEXT:    addl $12, %esp5028; X86-NEXT:    retl5029  %a = icmp eq <64 x i8> %w, zeroinitializer5030  %b = icmp eq <64 x i8> %x, zeroinitializer5031  %c = icmp eq <64 x i8> %y, zeroinitializer5032  %d = icmp eq <64 x i8> %z, zeroinitializer5033  %e = or <64 x i1> %a, %b5034  %f = or <64 x i1> %c, %d5035  %g = and <64 x i1> %e, %f5036  %h = bitcast <64 x i1> %g to i645037  %i = icmp eq i64 %h, 05038  br i1 %i, label %bar, label %exit5039 5040bar:5041  call void @foo()5042  br label %exit5043 5044exit:5045  ret void5046}5047 5048define <64 x i1> @mask64_insert(i32 %a) {5049; KNL-LABEL: mask64_insert:5050; KNL:       ## %bb.0:5051; KNL-NEXT:    movq %rdi, %rax5052; KNL-NEXT:    andl $1, %esi5053; KNL-NEXT:    kmovw %esi, %k05054; KNL-NEXT:    movw $-4, %cx5055; KNL-NEXT:    kmovw %ecx, %k15056; KNL-NEXT:    kshiftrw $1, %k1, %k15057; KNL-NEXT:    kshiftlw $1, %k1, %k15058; KNL-NEXT:    korw %k0, %k1, %k05059; KNL-NEXT:    kmovw %k0, (%rdi)5060; KNL-NEXT:    movw $-3, 6(%rdi)5061; KNL-NEXT:    movl $-131075, 2(%rdi) ## imm = 0xFFFDFFFD5062; KNL-NEXT:    retq5063;5064; SKX-LABEL: mask64_insert:5065; SKX:       ## %bb.0:5066; SKX-NEXT:    kmovd %edi, %k05067; SKX-NEXT:    kshiftlq $63, %k0, %k05068; SKX-NEXT:    kshiftrq $63, %k0, %k05069; SKX-NEXT:    movabsq $-562958543486980, %rax ## imm = 0xFFFDFFFDFFFDFFFC5070; SKX-NEXT:    kmovq %rax, %k15071; SKX-NEXT:    kshiftrq $1, %k1, %k15072; SKX-NEXT:    kshiftlq $1, %k1, %k15073; SKX-NEXT:    korq %k0, %k1, %k05074; SKX-NEXT:    vpmovm2b %k0, %zmm05075; SKX-NEXT:    retq5076;5077; AVX512BW-LABEL: mask64_insert:5078; AVX512BW:       ## %bb.0:5079; AVX512BW-NEXT:    kmovd %edi, %k05080; AVX512BW-NEXT:    kshiftlq $63, %k0, %k05081; AVX512BW-NEXT:    kshiftrq $63, %k0, %k05082; AVX512BW-NEXT:    movabsq $-562958543486980, %rax ## imm = 0xFFFDFFFDFFFDFFFC5083; AVX512BW-NEXT:    kmovq %rax, %k15084; AVX512BW-NEXT:    kshiftrq $1, %k1, %k15085; AVX512BW-NEXT:    kshiftlq $1, %k1, %k15086; AVX512BW-NEXT:    korq %k0, %k1, %k05087; AVX512BW-NEXT:    vpmovm2b %k0, %zmm05088; AVX512BW-NEXT:    retq5089;5090; AVX512DQ-LABEL: mask64_insert:5091; AVX512DQ:       ## %bb.0:5092; AVX512DQ-NEXT:    movq %rdi, %rax5093; AVX512DQ-NEXT:    andl $1, %esi5094; AVX512DQ-NEXT:    kmovw %esi, %k05095; AVX512DQ-NEXT:    movw $-4, %cx5096; AVX512DQ-NEXT:    kmovw %ecx, %k15097; AVX512DQ-NEXT:    kshiftrw $1, %k1, %k15098; AVX512DQ-NEXT:    kshiftlw $1, %k1, %k15099; AVX512DQ-NEXT:    korw %k0, %k1, %k05100; AVX512DQ-NEXT:    kmovw %k0, (%rdi)5101; AVX512DQ-NEXT:    movw $-3, 6(%rdi)5102; AVX512DQ-NEXT:    movl $-131075, 2(%rdi) ## imm = 0xFFFDFFFD5103; AVX512DQ-NEXT:    retq5104;5105; X86-LABEL: mask64_insert:5106; X86:       ## %bb.0:5107; X86-NEXT:    kmovb {{[0-9]+}}(%esp), %k05108; X86-NEXT:    movl $-131076, %eax ## imm = 0xFFFDFFFC5109; X86-NEXT:    kmovd %eax, %k15110; X86-NEXT:    movl $-131075, %eax ## imm = 0xFFFDFFFD5111; X86-NEXT:    kmovd %eax, %k25112; X86-NEXT:    kunpckdq %k1, %k2, %k15113; X86-NEXT:    kshiftrq $1, %k1, %k15114; X86-NEXT:    kshiftlq $1, %k1, %k15115; X86-NEXT:    kshiftlq $63, %k0, %k05116; X86-NEXT:    kshiftrq $63, %k0, %k05117; X86-NEXT:    korq %k0, %k1, %k05118; X86-NEXT:    vpmovm2b %k0, %zmm05119; X86-NEXT:    retl5120  %a_i = trunc i32 %a to i15121  %maskv = insertelement <64 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %a_i, i32 05122  ret <64 x i1> %maskv5123}5124 5125define i1 @test_v1i1_add(i1 %x, i1 %y) {5126; CHECK-LABEL: test_v1i1_add:5127; CHECK:       ## %bb.0:5128; CHECK-NEXT:    movl %edi, %eax5129; CHECK-NEXT:    xorl %esi, %eax5130; CHECK-NEXT:    ## kill: def $al killed $al killed $eax5131; CHECK-NEXT:    retq5132;5133; X86-LABEL: test_v1i1_add:5134; X86:       ## %bb.0:5135; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax5136; X86-NEXT:    xorb {{[0-9]+}}(%esp), %al5137; X86-NEXT:    retl5138  %m0 = bitcast i1 %x to <1 x i1>5139  %m1 = bitcast i1 %y to <1 x i1>5140  %m2 = add <1 x i1> %m0,  %m15141  %ret = bitcast <1 x i1> %m2 to i15142  ret i1 %ret5143}5144 5145define i1 @test_v1i1_sub(i1 %x, i1 %y) {5146; CHECK-LABEL: test_v1i1_sub:5147; CHECK:       ## %bb.0:5148; CHECK-NEXT:    movl %edi, %eax5149; CHECK-NEXT:    xorl %esi, %eax5150; CHECK-NEXT:    ## kill: def $al killed $al killed $eax5151; CHECK-NEXT:    retq5152;5153; X86-LABEL: test_v1i1_sub:5154; X86:       ## %bb.0:5155; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax5156; X86-NEXT:    xorb {{[0-9]+}}(%esp), %al5157; X86-NEXT:    retl5158  %m0 = bitcast i1 %x to <1 x i1>5159  %m1 = bitcast i1 %y to <1 x i1>5160  %m2 = sub <1 x i1> %m0,  %m15161  %ret = bitcast <1 x i1> %m2 to i15162  ret i1 %ret5163}5164 5165define i1 @test_v1i1_mul(i1 %x, i1 %y) {5166; CHECK-LABEL: test_v1i1_mul:5167; CHECK:       ## %bb.0:5168; CHECK-NEXT:    movl %edi, %eax5169; CHECK-NEXT:    andl %esi, %eax5170; CHECK-NEXT:    ## kill: def $al killed $al killed $eax5171; CHECK-NEXT:    retq5172;5173; X86-LABEL: test_v1i1_mul:5174; X86:       ## %bb.0:5175; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax5176; X86-NEXT:    andb {{[0-9]+}}(%esp), %al5177; X86-NEXT:    retl5178  %m0 = bitcast i1 %x to <1 x i1>5179  %m1 = bitcast i1 %y to <1 x i1>5180  %m2 = mul <1 x i1> %m0,  %m15181  %ret = bitcast <1 x i1> %m2 to i15182  ret i1 %ret5183}5184 5185define <1 x i1> @uadd_sat_v1i1(<1 x i1> %x, <1 x i1> %y) nounwind {5186; CHECK-LABEL: uadd_sat_v1i1:5187; CHECK:       ## %bb.0:5188; CHECK-NEXT:    movl %edi, %eax5189; CHECK-NEXT:    orl %esi, %eax5190; CHECK-NEXT:    ## kill: def $al killed $al killed $eax5191; CHECK-NEXT:    retq5192;5193; X86-LABEL: uadd_sat_v1i1:5194; X86:       ## %bb.0:5195; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax5196; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax5197; X86-NEXT:    ## kill: def $al killed $al killed $eax5198; X86-NEXT:    retl5199  %z = call <1 x i1> @llvm.uadd.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5200  ret <1 x i1> %z5201}5202declare <1 x i1> @llvm.uadd.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5203 5204define <1 x i1> @usub_sat_v1i1(<1 x i1> %x, <1 x i1> %y) nounwind {5205; KNL-LABEL: usub_sat_v1i1:5206; KNL:       ## %bb.0:5207; KNL-NEXT:    kmovw %esi, %k05208; KNL-NEXT:    kmovw %edi, %k15209; KNL-NEXT:    kandnw %k1, %k0, %k05210; KNL-NEXT:    kmovw %k0, %eax5211; KNL-NEXT:    ## kill: def $al killed $al killed $eax5212; KNL-NEXT:    retq5213;5214; SKX-LABEL: usub_sat_v1i1:5215; SKX:       ## %bb.0:5216; SKX-NEXT:    kmovd %esi, %k05217; SKX-NEXT:    kmovd %edi, %k15218; SKX-NEXT:    kandnw %k1, %k0, %k05219; SKX-NEXT:    kmovd %k0, %eax5220; SKX-NEXT:    ## kill: def $al killed $al killed $eax5221; SKX-NEXT:    retq5222;5223; AVX512BW-LABEL: usub_sat_v1i1:5224; AVX512BW:       ## %bb.0:5225; AVX512BW-NEXT:    kmovd %esi, %k05226; AVX512BW-NEXT:    kmovd %edi, %k15227; AVX512BW-NEXT:    kandnw %k1, %k0, %k05228; AVX512BW-NEXT:    kmovd %k0, %eax5229; AVX512BW-NEXT:    ## kill: def $al killed $al killed $eax5230; AVX512BW-NEXT:    retq5231;5232; AVX512DQ-LABEL: usub_sat_v1i1:5233; AVX512DQ:       ## %bb.0:5234; AVX512DQ-NEXT:    kmovw %esi, %k05235; AVX512DQ-NEXT:    kmovw %edi, %k15236; AVX512DQ-NEXT:    kandnw %k1, %k0, %k05237; AVX512DQ-NEXT:    kmovw %k0, %eax5238; AVX512DQ-NEXT:    ## kill: def $al killed $al killed $eax5239; AVX512DQ-NEXT:    retq5240;5241; X86-LABEL: usub_sat_v1i1:5242; X86:       ## %bb.0:5243; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k05244; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k15245; X86-NEXT:    kandnw %k1, %k0, %k05246; X86-NEXT:    kmovd %k0, %eax5247; X86-NEXT:    ## kill: def $al killed $al killed $eax5248; X86-NEXT:    retl5249  %z = call <1 x i1> @llvm.usub.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5250  ret <1 x i1> %z5251}5252declare <1 x i1> @llvm.usub.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5253 5254define <1 x i1> @sadd_sat_v1i1(<1 x i1> %x, <1 x i1> %y) nounwind {5255; CHECK-LABEL: sadd_sat_v1i1:5256; CHECK:       ## %bb.0:5257; CHECK-NEXT:    movl %edi, %eax5258; CHECK-NEXT:    orl %esi, %eax5259; CHECK-NEXT:    ## kill: def $al killed $al killed $eax5260; CHECK-NEXT:    retq5261;5262; X86-LABEL: sadd_sat_v1i1:5263; X86:       ## %bb.0:5264; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax5265; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax5266; X86-NEXT:    ## kill: def $al killed $al killed $eax5267; X86-NEXT:    retl5268  %z = call <1 x i1> @llvm.sadd.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5269  ret <1 x i1> %z5270}5271declare <1 x i1> @llvm.sadd.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5272 5273define <1 x i1> @ssub_sat_v1i1(<1 x i1> %x, <1 x i1> %y) nounwind {5274; KNL-LABEL: ssub_sat_v1i1:5275; KNL:       ## %bb.0:5276; KNL-NEXT:    kmovw %esi, %k05277; KNL-NEXT:    kmovw %edi, %k15278; KNL-NEXT:    kandnw %k1, %k0, %k05279; KNL-NEXT:    kmovw %k0, %eax5280; KNL-NEXT:    ## kill: def $al killed $al killed $eax5281; KNL-NEXT:    retq5282;5283; SKX-LABEL: ssub_sat_v1i1:5284; SKX:       ## %bb.0:5285; SKX-NEXT:    kmovd %esi, %k05286; SKX-NEXT:    kmovd %edi, %k15287; SKX-NEXT:    kandnw %k1, %k0, %k05288; SKX-NEXT:    kmovd %k0, %eax5289; SKX-NEXT:    ## kill: def $al killed $al killed $eax5290; SKX-NEXT:    retq5291;5292; AVX512BW-LABEL: ssub_sat_v1i1:5293; AVX512BW:       ## %bb.0:5294; AVX512BW-NEXT:    kmovd %esi, %k05295; AVX512BW-NEXT:    kmovd %edi, %k15296; AVX512BW-NEXT:    kandnw %k1, %k0, %k05297; AVX512BW-NEXT:    kmovd %k0, %eax5298; AVX512BW-NEXT:    ## kill: def $al killed $al killed $eax5299; AVX512BW-NEXT:    retq5300;5301; AVX512DQ-LABEL: ssub_sat_v1i1:5302; AVX512DQ:       ## %bb.0:5303; AVX512DQ-NEXT:    kmovw %esi, %k05304; AVX512DQ-NEXT:    kmovw %edi, %k15305; AVX512DQ-NEXT:    kandnw %k1, %k0, %k05306; AVX512DQ-NEXT:    kmovw %k0, %eax5307; AVX512DQ-NEXT:    ## kill: def $al killed $al killed $eax5308; AVX512DQ-NEXT:    retq5309;5310; X86-LABEL: ssub_sat_v1i1:5311; X86:       ## %bb.0:5312; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k05313; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k15314; X86-NEXT:    kandnw %k1, %k0, %k05315; X86-NEXT:    kmovd %k0, %eax5316; X86-NEXT:    ## kill: def $al killed $al killed $eax5317; X86-NEXT:    retl5318  %z = call <1 x i1> @llvm.ssub.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5319  ret <1 x i1> %z5320}5321declare <1 x i1> @llvm.ssub.sat.v1i1(<1 x i1> %x, <1 x i1> %y)5322 5323!llvm.module.flags = !{!0}5324!0 = !{i32 1, !"ProfileSummary", !1}5325!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}5326!2 = !{!"ProfileFormat", !"InstrProf"}5327!3 = !{!"TotalCount", i64 10000}5328!4 = !{!"MaxCount", i64 10}5329!5 = !{!"MaxInternalCount", i64 1}5330!6 = !{!"MaxFunctionCount", i64 1000}5331!7 = !{!"NumCounts", i64 3}5332!8 = !{!"NumFunctions", i64 3}5333!9 = !{!"DetailedSummary", !10}5334!10 = !{!11, !12, !13}5335!11 = !{i32 10000, i64 100, i32 1}5336!12 = !{i32 999000, i64 100, i32 1}5337!13 = !{i32 999999, i64 1, i32 2}5338!14 = !{!"function_entry_count", i64 0}5339