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