679 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512VL --check-prefix=AVX512VL-X643; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512VL --check-prefix=AVX512VL-X864; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512F --check-prefix=AVX512F-X645; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512F --check-prefix=AVX512F-X866 7; Function Attrs: norecurse nounwind readnone8define zeroext i8 @TEST_mm_test_epi64_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {9; AVX512VL-LABEL: TEST_mm_test_epi64_mask:10; AVX512VL: # %bb.0: # %entry11; AVX512VL-NEXT: vptestmq %xmm0, %xmm1, %k012; AVX512VL-NEXT: kmovw %k0, %eax13; AVX512VL-NEXT: # kill: def $al killed $al killed $eax14; AVX512VL-NEXT: ret{{[l|q]}}15;16; AVX512F-LABEL: TEST_mm_test_epi64_mask:17; AVX512F: # %bb.0: # %entry18; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm119; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm020; AVX512F-NEXT: vptestmq %zmm0, %zmm1, %k021; AVX512F-NEXT: kshiftlw $14, %k0, %k022; AVX512F-NEXT: kshiftrw $14, %k0, %k023; AVX512F-NEXT: kmovw %k0, %eax24; AVX512F-NEXT: # kill: def $al killed $al killed $eax25; AVX512F-NEXT: vzeroupper26; AVX512F-NEXT: ret{{[l|q]}}27entry:28 %and.i.i = and <2 x i64> %__B, %__A29 %0 = icmp ne <2 x i64> %and.i.i, zeroinitializer30 %1 = shufflevector <2 x i1> %0, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>31 %2 = bitcast <8 x i1> %1 to i832 ret i8 %233}34 35; Function Attrs: norecurse nounwind readnone36define zeroext i8 @TEST_mm_test_epi32_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {37; AVX512VL-LABEL: TEST_mm_test_epi32_mask:38; AVX512VL: # %bb.0: # %entry39; AVX512VL-NEXT: vptestmd %xmm0, %xmm1, %k040; AVX512VL-NEXT: kmovw %k0, %eax41; AVX512VL-NEXT: # kill: def $al killed $al killed $eax42; AVX512VL-NEXT: ret{{[l|q]}}43;44; AVX512F-LABEL: TEST_mm_test_epi32_mask:45; AVX512F: # %bb.0: # %entry46; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm147; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm048; AVX512F-NEXT: vptestmd %zmm0, %zmm1, %k049; AVX512F-NEXT: kshiftlw $12, %k0, %k050; AVX512F-NEXT: kshiftrw $12, %k0, %k051; AVX512F-NEXT: kmovw %k0, %eax52; AVX512F-NEXT: # kill: def $al killed $al killed $eax53; AVX512F-NEXT: vzeroupper54; AVX512F-NEXT: ret{{[l|q]}}55entry:56 %and.i.i = and <2 x i64> %__B, %__A57 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>58 %1 = icmp ne <4 x i32> %0, zeroinitializer59 %2 = shufflevector <4 x i1> %1, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>60 %3 = bitcast <8 x i1> %2 to i861 ret i8 %362}63 64; Function Attrs: norecurse nounwind readnone65define zeroext i8 @TEST_mm256_test_epi64_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {66; AVX512VL-LABEL: TEST_mm256_test_epi64_mask:67; AVX512VL: # %bb.0: # %entry68; AVX512VL-NEXT: vptestmq %ymm0, %ymm1, %k069; AVX512VL-NEXT: kmovw %k0, %eax70; AVX512VL-NEXT: # kill: def $al killed $al killed $eax71; AVX512VL-NEXT: vzeroupper72; AVX512VL-NEXT: ret{{[l|q]}}73;74; AVX512F-LABEL: TEST_mm256_test_epi64_mask:75; AVX512F: # %bb.0: # %entry76; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm177; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm078; AVX512F-NEXT: vptestmq %zmm0, %zmm1, %k079; AVX512F-NEXT: kshiftlw $12, %k0, %k080; AVX512F-NEXT: kshiftrw $12, %k0, %k081; AVX512F-NEXT: kmovw %k0, %eax82; AVX512F-NEXT: # kill: def $al killed $al killed $eax83; AVX512F-NEXT: vzeroupper84; AVX512F-NEXT: ret{{[l|q]}}85entry:86 %and.i.i = and <4 x i64> %__B, %__A87 %0 = icmp ne <4 x i64> %and.i.i, zeroinitializer88 %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>89 %2 = bitcast <8 x i1> %1 to i890 ret i8 %291}92 93; Function Attrs: norecurse nounwind readnone94define zeroext i8 @TEST_mm256_test_epi32_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {95; AVX512VL-LABEL: TEST_mm256_test_epi32_mask:96; AVX512VL: # %bb.0: # %entry97; AVX512VL-NEXT: vptestmd %ymm0, %ymm1, %k098; AVX512VL-NEXT: kmovw %k0, %eax99; AVX512VL-NEXT: # kill: def $al killed $al killed $eax100; AVX512VL-NEXT: vzeroupper101; AVX512VL-NEXT: ret{{[l|q]}}102;103; AVX512F-LABEL: TEST_mm256_test_epi32_mask:104; AVX512F: # %bb.0: # %entry105; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1106; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0107; AVX512F-NEXT: vptestmd %zmm0, %zmm1, %k0108; AVX512F-NEXT: kmovw %k0, %eax109; AVX512F-NEXT: # kill: def $al killed $al killed $eax110; AVX512F-NEXT: vzeroupper111; AVX512F-NEXT: ret{{[l|q]}}112entry:113 %and.i.i = and <4 x i64> %__B, %__A114 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>115 %1 = icmp ne <8 x i32> %0, zeroinitializer116 %2 = bitcast <8 x i1> %1 to i8117 ret i8 %2118}119 120; Function Attrs: norecurse nounwind readnone121define zeroext i8 @TEST_mm_mask_test_epi64_mask(i8 %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {122; AVX512VL-X64-LABEL: TEST_mm_mask_test_epi64_mask:123; AVX512VL-X64: # %bb.0: # %entry124; AVX512VL-X64-NEXT: kmovw %edi, %k1125; AVX512VL-X64-NEXT: vptestmq %xmm0, %xmm1, %k0 {%k1}126; AVX512VL-X64-NEXT: kmovw %k0, %eax127; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax128; AVX512VL-X64-NEXT: retq129;130; AVX512VL-X86-LABEL: TEST_mm_mask_test_epi64_mask:131; AVX512VL-X86: # %bb.0: # %entry132; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax133; AVX512VL-X86-NEXT: kmovw %eax, %k1134; AVX512VL-X86-NEXT: vptestmq %xmm0, %xmm1, %k0 {%k1}135; AVX512VL-X86-NEXT: kmovw %k0, %eax136; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax137; AVX512VL-X86-NEXT: retl138;139; AVX512F-X64-LABEL: TEST_mm_mask_test_epi64_mask:140; AVX512F-X64: # %bb.0: # %entry141; AVX512F-X64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1142; AVX512F-X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0143; AVX512F-X64-NEXT: kmovw %edi, %k1144; AVX512F-X64-NEXT: vptestmq %zmm0, %zmm1, %k0 {%k1}145; AVX512F-X64-NEXT: kshiftlw $14, %k0, %k0146; AVX512F-X64-NEXT: kshiftrw $14, %k0, %k0147; AVX512F-X64-NEXT: kmovw %k0, %eax148; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax149; AVX512F-X64-NEXT: vzeroupper150; AVX512F-X64-NEXT: retq151;152; AVX512F-X86-LABEL: TEST_mm_mask_test_epi64_mask:153; AVX512F-X86: # %bb.0: # %entry154; AVX512F-X86-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1155; AVX512F-X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0156; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax157; AVX512F-X86-NEXT: kmovw %eax, %k1158; AVX512F-X86-NEXT: vptestmq %zmm0, %zmm1, %k0 {%k1}159; AVX512F-X86-NEXT: kshiftlw $14, %k0, %k0160; AVX512F-X86-NEXT: kshiftrw $14, %k0, %k0161; AVX512F-X86-NEXT: kmovw %k0, %eax162; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax163; AVX512F-X86-NEXT: vzeroupper164; AVX512F-X86-NEXT: retl165entry:166 %and.i.i = and <2 x i64> %__B, %__A167 %0 = icmp ne <2 x i64> %and.i.i, zeroinitializer168 %1 = bitcast i8 %__U to <8 x i1>169 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>170 %3 = and <2 x i1> %0, %2171 %4 = shufflevector <2 x i1> %3, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>172 %5 = bitcast <8 x i1> %4 to i8173 ret i8 %5174}175 176; Function Attrs: norecurse nounwind readnone177define zeroext i8 @TEST_mm_mask_test_epi32_mask(i8 %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {178; AVX512VL-X64-LABEL: TEST_mm_mask_test_epi32_mask:179; AVX512VL-X64: # %bb.0: # %entry180; AVX512VL-X64-NEXT: kmovw %edi, %k1181; AVX512VL-X64-NEXT: vptestmd %xmm0, %xmm1, %k0 {%k1}182; AVX512VL-X64-NEXT: kmovw %k0, %eax183; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax184; AVX512VL-X64-NEXT: retq185;186; AVX512VL-X86-LABEL: TEST_mm_mask_test_epi32_mask:187; AVX512VL-X86: # %bb.0: # %entry188; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax189; AVX512VL-X86-NEXT: kmovw %eax, %k1190; AVX512VL-X86-NEXT: vptestmd %xmm0, %xmm1, %k0 {%k1}191; AVX512VL-X86-NEXT: kmovw %k0, %eax192; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax193; AVX512VL-X86-NEXT: retl194;195; AVX512F-X64-LABEL: TEST_mm_mask_test_epi32_mask:196; AVX512F-X64: # %bb.0: # %entry197; AVX512F-X64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1198; AVX512F-X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0199; AVX512F-X64-NEXT: kmovw %edi, %k1200; AVX512F-X64-NEXT: vptestmd %zmm0, %zmm1, %k0 {%k1}201; AVX512F-X64-NEXT: kshiftlw $12, %k0, %k0202; AVX512F-X64-NEXT: kshiftrw $12, %k0, %k0203; AVX512F-X64-NEXT: kmovw %k0, %eax204; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax205; AVX512F-X64-NEXT: vzeroupper206; AVX512F-X64-NEXT: retq207;208; AVX512F-X86-LABEL: TEST_mm_mask_test_epi32_mask:209; AVX512F-X86: # %bb.0: # %entry210; AVX512F-X86-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1211; AVX512F-X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0212; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax213; AVX512F-X86-NEXT: kmovw %eax, %k1214; AVX512F-X86-NEXT: vptestmd %zmm0, %zmm1, %k0 {%k1}215; AVX512F-X86-NEXT: kshiftlw $12, %k0, %k0216; AVX512F-X86-NEXT: kshiftrw $12, %k0, %k0217; AVX512F-X86-NEXT: kmovw %k0, %eax218; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax219; AVX512F-X86-NEXT: vzeroupper220; AVX512F-X86-NEXT: retl221entry:222 %and.i.i = and <2 x i64> %__B, %__A223 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>224 %1 = icmp ne <4 x i32> %0, zeroinitializer225 %2 = bitcast i8 %__U to <8 x i1>226 %3 = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>227 %4 = and <4 x i1> %1, %3228 %5 = shufflevector <4 x i1> %4, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>229 %6 = bitcast <8 x i1> %5 to i8230 ret i8 %6231}232 233 234; Function Attrs: norecurse nounwind readnone235define zeroext i8 @TEST_mm256_mask_test_epi64_mask(i8 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {236; AVX512VL-X64-LABEL: TEST_mm256_mask_test_epi64_mask:237; AVX512VL-X64: # %bb.0: # %entry238; AVX512VL-X64-NEXT: kmovw %edi, %k1239; AVX512VL-X64-NEXT: vptestmq %ymm0, %ymm1, %k0 {%k1}240; AVX512VL-X64-NEXT: kmovw %k0, %eax241; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax242; AVX512VL-X64-NEXT: vzeroupper243; AVX512VL-X64-NEXT: retq244;245; AVX512VL-X86-LABEL: TEST_mm256_mask_test_epi64_mask:246; AVX512VL-X86: # %bb.0: # %entry247; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax248; AVX512VL-X86-NEXT: kmovw %eax, %k1249; AVX512VL-X86-NEXT: vptestmq %ymm0, %ymm1, %k0 {%k1}250; AVX512VL-X86-NEXT: kmovw %k0, %eax251; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax252; AVX512VL-X86-NEXT: vzeroupper253; AVX512VL-X86-NEXT: retl254;255; AVX512F-X64-LABEL: TEST_mm256_mask_test_epi64_mask:256; AVX512F-X64: # %bb.0: # %entry257; AVX512F-X64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1258; AVX512F-X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0259; AVX512F-X64-NEXT: kmovw %edi, %k1260; AVX512F-X64-NEXT: vptestmq %zmm0, %zmm1, %k0 {%k1}261; AVX512F-X64-NEXT: kshiftlw $12, %k0, %k0262; AVX512F-X64-NEXT: kshiftrw $12, %k0, %k0263; AVX512F-X64-NEXT: kmovw %k0, %eax264; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax265; AVX512F-X64-NEXT: vzeroupper266; AVX512F-X64-NEXT: retq267;268; AVX512F-X86-LABEL: TEST_mm256_mask_test_epi64_mask:269; AVX512F-X86: # %bb.0: # %entry270; AVX512F-X86-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1271; AVX512F-X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0272; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax273; AVX512F-X86-NEXT: kmovw %eax, %k1274; AVX512F-X86-NEXT: vptestmq %zmm0, %zmm1, %k0 {%k1}275; AVX512F-X86-NEXT: kshiftlw $12, %k0, %k0276; AVX512F-X86-NEXT: kshiftrw $12, %k0, %k0277; AVX512F-X86-NEXT: kmovw %k0, %eax278; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax279; AVX512F-X86-NEXT: vzeroupper280; AVX512F-X86-NEXT: retl281entry:282 %and.i.i = and <4 x i64> %__B, %__A283 %0 = icmp ne <4 x i64> %and.i.i, zeroinitializer284 %1 = bitcast i8 %__U to <8 x i1>285 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>286 %3 = and <4 x i1> %0, %2287 %4 = shufflevector <4 x i1> %3, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>288 %5 = bitcast <8 x i1> %4 to i8289 ret i8 %5290}291 292; Function Attrs: norecurse nounwind readnone293define zeroext i8 @TEST_mm256_mask_test_epi32_mask(i8 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {294; AVX512VL-X64-LABEL: TEST_mm256_mask_test_epi32_mask:295; AVX512VL-X64: # %bb.0: # %entry296; AVX512VL-X64-NEXT: vptestmd %ymm0, %ymm1, %k0297; AVX512VL-X64-NEXT: kmovw %k0, %eax298; AVX512VL-X64-NEXT: andb %dil, %al299; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax300; AVX512VL-X64-NEXT: vzeroupper301; AVX512VL-X64-NEXT: retq302;303; AVX512VL-X86-LABEL: TEST_mm256_mask_test_epi32_mask:304; AVX512VL-X86: # %bb.0: # %entry305; AVX512VL-X86-NEXT: vptestmd %ymm0, %ymm1, %k0306; AVX512VL-X86-NEXT: kmovw %k0, %eax307; AVX512VL-X86-NEXT: andb {{[0-9]+}}(%esp), %al308; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax309; AVX512VL-X86-NEXT: vzeroupper310; AVX512VL-X86-NEXT: retl311;312; AVX512F-X64-LABEL: TEST_mm256_mask_test_epi32_mask:313; AVX512F-X64: # %bb.0: # %entry314; AVX512F-X64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1315; AVX512F-X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0316; AVX512F-X64-NEXT: vptestmd %zmm0, %zmm1, %k0317; AVX512F-X64-NEXT: kmovw %k0, %eax318; AVX512F-X64-NEXT: andb %dil, %al319; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax320; AVX512F-X64-NEXT: vzeroupper321; AVX512F-X64-NEXT: retq322;323; AVX512F-X86-LABEL: TEST_mm256_mask_test_epi32_mask:324; AVX512F-X86: # %bb.0: # %entry325; AVX512F-X86-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1326; AVX512F-X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0327; AVX512F-X86-NEXT: vptestmd %zmm0, %zmm1, %k0328; AVX512F-X86-NEXT: kmovw %k0, %eax329; AVX512F-X86-NEXT: andb {{[0-9]+}}(%esp), %al330; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax331; AVX512F-X86-NEXT: vzeroupper332; AVX512F-X86-NEXT: retl333entry:334 %and.i.i = and <4 x i64> %__B, %__A335 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>336 %1 = icmp ne <8 x i32> %0, zeroinitializer337 %2 = bitcast i8 %__U to <8 x i1>338 %3 = and <8 x i1> %1, %2339 %4 = bitcast <8 x i1> %3 to i8340 ret i8 %4341}342 343; Function Attrs: norecurse nounwind readnone344define zeroext i8 @TEST_mm_testn_epi64_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {345; AVX512VL-LABEL: TEST_mm_testn_epi64_mask:346; AVX512VL: # %bb.0: # %entry347; AVX512VL-NEXT: vptestnmq %xmm0, %xmm1, %k0348; AVX512VL-NEXT: kmovw %k0, %eax349; AVX512VL-NEXT: # kill: def $al killed $al killed $eax350; AVX512VL-NEXT: ret{{[l|q]}}351;352; AVX512F-LABEL: TEST_mm_testn_epi64_mask:353; AVX512F: # %bb.0: # %entry354; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1355; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0356; AVX512F-NEXT: vptestnmq %zmm0, %zmm1, %k0357; AVX512F-NEXT: kshiftlw $14, %k0, %k0358; AVX512F-NEXT: kshiftrw $14, %k0, %k0359; AVX512F-NEXT: kmovw %k0, %eax360; AVX512F-NEXT: # kill: def $al killed $al killed $eax361; AVX512F-NEXT: vzeroupper362; AVX512F-NEXT: ret{{[l|q]}}363entry:364 %and.i.i = and <2 x i64> %__B, %__A365 %0 = icmp eq <2 x i64> %and.i.i, zeroinitializer366 %1 = shufflevector <2 x i1> %0, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>367 %2 = bitcast <8 x i1> %1 to i8368 ret i8 %2369}370 371; Function Attrs: norecurse nounwind readnone372define zeroext i8 @TEST_mm_testn_epi32_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {373; AVX512VL-LABEL: TEST_mm_testn_epi32_mask:374; AVX512VL: # %bb.0: # %entry375; AVX512VL-NEXT: vptestnmd %xmm0, %xmm1, %k0376; AVX512VL-NEXT: kmovw %k0, %eax377; AVX512VL-NEXT: # kill: def $al killed $al killed $eax378; AVX512VL-NEXT: ret{{[l|q]}}379;380; AVX512F-LABEL: TEST_mm_testn_epi32_mask:381; AVX512F: # %bb.0: # %entry382; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1383; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0384; AVX512F-NEXT: vptestnmd %zmm0, %zmm1, %k0385; AVX512F-NEXT: kshiftlw $12, %k0, %k0386; AVX512F-NEXT: kshiftrw $12, %k0, %k0387; AVX512F-NEXT: kmovw %k0, %eax388; AVX512F-NEXT: # kill: def $al killed $al killed $eax389; AVX512F-NEXT: vzeroupper390; AVX512F-NEXT: ret{{[l|q]}}391entry:392 %and.i.i = and <2 x i64> %__B, %__A393 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>394 %1 = icmp eq <4 x i32> %0, zeroinitializer395 %2 = shufflevector <4 x i1> %1, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>396 %3 = bitcast <8 x i1> %2 to i8397 ret i8 %3398}399 400; Function Attrs: norecurse nounwind readnone401define zeroext i8 @TEST_mm256_testn_epi64_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {402; AVX512VL-LABEL: TEST_mm256_testn_epi64_mask:403; AVX512VL: # %bb.0: # %entry404; AVX512VL-NEXT: vptestnmq %ymm0, %ymm1, %k0405; AVX512VL-NEXT: kmovw %k0, %eax406; AVX512VL-NEXT: # kill: def $al killed $al killed $eax407; AVX512VL-NEXT: vzeroupper408; AVX512VL-NEXT: ret{{[l|q]}}409;410; AVX512F-LABEL: TEST_mm256_testn_epi64_mask:411; AVX512F: # %bb.0: # %entry412; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1413; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0414; AVX512F-NEXT: vptestnmq %zmm0, %zmm1, %k0415; AVX512F-NEXT: kshiftlw $12, %k0, %k0416; AVX512F-NEXT: kshiftrw $12, %k0, %k0417; AVX512F-NEXT: kmovw %k0, %eax418; AVX512F-NEXT: # kill: def $al killed $al killed $eax419; AVX512F-NEXT: vzeroupper420; AVX512F-NEXT: ret{{[l|q]}}421entry:422 %and.i.i = and <4 x i64> %__B, %__A423 %0 = icmp eq <4 x i64> %and.i.i, zeroinitializer424 %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>425 %2 = bitcast <8 x i1> %1 to i8426 ret i8 %2427}428 429; Function Attrs: norecurse nounwind readnone430define zeroext i8 @TEST_mm256_testn_epi32_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {431; AVX512VL-LABEL: TEST_mm256_testn_epi32_mask:432; AVX512VL: # %bb.0: # %entry433; AVX512VL-NEXT: vptestnmd %ymm0, %ymm1, %k0434; AVX512VL-NEXT: kmovw %k0, %eax435; AVX512VL-NEXT: # kill: def $al killed $al killed $eax436; AVX512VL-NEXT: vzeroupper437; AVX512VL-NEXT: ret{{[l|q]}}438;439; AVX512F-LABEL: TEST_mm256_testn_epi32_mask:440; AVX512F: # %bb.0: # %entry441; AVX512F-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1442; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0443; AVX512F-NEXT: vptestnmd %zmm0, %zmm1, %k0444; AVX512F-NEXT: kmovw %k0, %eax445; AVX512F-NEXT: # kill: def $al killed $al killed $eax446; AVX512F-NEXT: vzeroupper447; AVX512F-NEXT: ret{{[l|q]}}448entry:449 %and.i.i = and <4 x i64> %__B, %__A450 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>451 %1 = icmp eq <8 x i32> %0, zeroinitializer452 %2 = bitcast <8 x i1> %1 to i8453 ret i8 %2454}455 456; Function Attrs: norecurse nounwind readnone457define zeroext i8 @TEST_mm_mask_testn_epi64_mask(i8 %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {458; AVX512VL-X64-LABEL: TEST_mm_mask_testn_epi64_mask:459; AVX512VL-X64: # %bb.0: # %entry460; AVX512VL-X64-NEXT: kmovw %edi, %k1461; AVX512VL-X64-NEXT: vptestnmq %xmm0, %xmm1, %k0 {%k1}462; AVX512VL-X64-NEXT: kmovw %k0, %eax463; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax464; AVX512VL-X64-NEXT: retq465;466; AVX512VL-X86-LABEL: TEST_mm_mask_testn_epi64_mask:467; AVX512VL-X86: # %bb.0: # %entry468; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax469; AVX512VL-X86-NEXT: kmovw %eax, %k1470; AVX512VL-X86-NEXT: vptestnmq %xmm0, %xmm1, %k0 {%k1}471; AVX512VL-X86-NEXT: kmovw %k0, %eax472; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax473; AVX512VL-X86-NEXT: retl474;475; AVX512F-X64-LABEL: TEST_mm_mask_testn_epi64_mask:476; AVX512F-X64: # %bb.0: # %entry477; AVX512F-X64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1478; AVX512F-X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0479; AVX512F-X64-NEXT: kmovw %edi, %k1480; AVX512F-X64-NEXT: vptestnmq %zmm0, %zmm1, %k0 {%k1}481; AVX512F-X64-NEXT: kshiftlw $14, %k0, %k0482; AVX512F-X64-NEXT: kshiftrw $14, %k0, %k0483; AVX512F-X64-NEXT: kmovw %k0, %eax484; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax485; AVX512F-X64-NEXT: vzeroupper486; AVX512F-X64-NEXT: retq487;488; AVX512F-X86-LABEL: TEST_mm_mask_testn_epi64_mask:489; AVX512F-X86: # %bb.0: # %entry490; AVX512F-X86-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1491; AVX512F-X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0492; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax493; AVX512F-X86-NEXT: kmovw %eax, %k1494; AVX512F-X86-NEXT: vptestnmq %zmm0, %zmm1, %k0 {%k1}495; AVX512F-X86-NEXT: kshiftlw $14, %k0, %k0496; AVX512F-X86-NEXT: kshiftrw $14, %k0, %k0497; AVX512F-X86-NEXT: kmovw %k0, %eax498; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax499; AVX512F-X86-NEXT: vzeroupper500; AVX512F-X86-NEXT: retl501entry:502 %and.i.i = and <2 x i64> %__B, %__A503 %0 = icmp eq <2 x i64> %and.i.i, zeroinitializer504 %1 = bitcast i8 %__U to <8 x i1>505 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>506 %3 = and <2 x i1> %0, %2507 %4 = shufflevector <2 x i1> %3, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>508 %5 = bitcast <8 x i1> %4 to i8509 ret i8 %5510}511 512; Function Attrs: norecurse nounwind readnone513define zeroext i8 @TEST_mm_mask_testn_epi32_mask(i8 %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {514; AVX512VL-X64-LABEL: TEST_mm_mask_testn_epi32_mask:515; AVX512VL-X64: # %bb.0: # %entry516; AVX512VL-X64-NEXT: kmovw %edi, %k1517; AVX512VL-X64-NEXT: vptestnmd %xmm0, %xmm1, %k0 {%k1}518; AVX512VL-X64-NEXT: kmovw %k0, %eax519; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax520; AVX512VL-X64-NEXT: retq521;522; AVX512VL-X86-LABEL: TEST_mm_mask_testn_epi32_mask:523; AVX512VL-X86: # %bb.0: # %entry524; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax525; AVX512VL-X86-NEXT: kmovw %eax, %k1526; AVX512VL-X86-NEXT: vptestnmd %xmm0, %xmm1, %k0 {%k1}527; AVX512VL-X86-NEXT: kmovw %k0, %eax528; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax529; AVX512VL-X86-NEXT: retl530;531; AVX512F-X64-LABEL: TEST_mm_mask_testn_epi32_mask:532; AVX512F-X64: # %bb.0: # %entry533; AVX512F-X64-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1534; AVX512F-X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0535; AVX512F-X64-NEXT: kmovw %edi, %k1536; AVX512F-X64-NEXT: vptestnmd %zmm0, %zmm1, %k0 {%k1}537; AVX512F-X64-NEXT: kshiftlw $12, %k0, %k0538; AVX512F-X64-NEXT: kshiftrw $12, %k0, %k0539; AVX512F-X64-NEXT: kmovw %k0, %eax540; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax541; AVX512F-X64-NEXT: vzeroupper542; AVX512F-X64-NEXT: retq543;544; AVX512F-X86-LABEL: TEST_mm_mask_testn_epi32_mask:545; AVX512F-X86: # %bb.0: # %entry546; AVX512F-X86-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1547; AVX512F-X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0548; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax549; AVX512F-X86-NEXT: kmovw %eax, %k1550; AVX512F-X86-NEXT: vptestnmd %zmm0, %zmm1, %k0 {%k1}551; AVX512F-X86-NEXT: kshiftlw $12, %k0, %k0552; AVX512F-X86-NEXT: kshiftrw $12, %k0, %k0553; AVX512F-X86-NEXT: kmovw %k0, %eax554; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax555; AVX512F-X86-NEXT: vzeroupper556; AVX512F-X86-NEXT: retl557entry:558 %and.i.i = and <2 x i64> %__B, %__A559 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>560 %1 = icmp eq <4 x i32> %0, zeroinitializer561 %2 = bitcast i8 %__U to <8 x i1>562 %3 = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>563 %4 = and <4 x i1> %1, %3564 %5 = shufflevector <4 x i1> %4, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>565 %6 = bitcast <8 x i1> %5 to i8566 ret i8 %6567}568 569 570; Function Attrs: norecurse nounwind readnone571define zeroext i8 @TEST_mm256_mask_testn_epi64_mask(i8 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {572; AVX512VL-X64-LABEL: TEST_mm256_mask_testn_epi64_mask:573; AVX512VL-X64: # %bb.0: # %entry574; AVX512VL-X64-NEXT: kmovw %edi, %k1575; AVX512VL-X64-NEXT: vptestnmq %ymm0, %ymm1, %k0 {%k1}576; AVX512VL-X64-NEXT: kmovw %k0, %eax577; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax578; AVX512VL-X64-NEXT: vzeroupper579; AVX512VL-X64-NEXT: retq580;581; AVX512VL-X86-LABEL: TEST_mm256_mask_testn_epi64_mask:582; AVX512VL-X86: # %bb.0: # %entry583; AVX512VL-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax584; AVX512VL-X86-NEXT: kmovw %eax, %k1585; AVX512VL-X86-NEXT: vptestnmq %ymm0, %ymm1, %k0 {%k1}586; AVX512VL-X86-NEXT: kmovw %k0, %eax587; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax588; AVX512VL-X86-NEXT: vzeroupper589; AVX512VL-X86-NEXT: retl590;591; AVX512F-X64-LABEL: TEST_mm256_mask_testn_epi64_mask:592; AVX512F-X64: # %bb.0: # %entry593; AVX512F-X64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1594; AVX512F-X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0595; AVX512F-X64-NEXT: kmovw %edi, %k1596; AVX512F-X64-NEXT: vptestnmq %zmm0, %zmm1, %k0 {%k1}597; AVX512F-X64-NEXT: kshiftlw $12, %k0, %k0598; AVX512F-X64-NEXT: kshiftrw $12, %k0, %k0599; AVX512F-X64-NEXT: kmovw %k0, %eax600; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax601; AVX512F-X64-NEXT: vzeroupper602; AVX512F-X64-NEXT: retq603;604; AVX512F-X86-LABEL: TEST_mm256_mask_testn_epi64_mask:605; AVX512F-X86: # %bb.0: # %entry606; AVX512F-X86-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1607; AVX512F-X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0608; AVX512F-X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax609; AVX512F-X86-NEXT: kmovw %eax, %k1610; AVX512F-X86-NEXT: vptestnmq %zmm0, %zmm1, %k0 {%k1}611; AVX512F-X86-NEXT: kshiftlw $12, %k0, %k0612; AVX512F-X86-NEXT: kshiftrw $12, %k0, %k0613; AVX512F-X86-NEXT: kmovw %k0, %eax614; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax615; AVX512F-X86-NEXT: vzeroupper616; AVX512F-X86-NEXT: retl617entry:618 %and.i.i = and <4 x i64> %__B, %__A619 %0 = icmp eq <4 x i64> %and.i.i, zeroinitializer620 %1 = bitcast i8 %__U to <8 x i1>621 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>622 %3 = and <4 x i1> %0, %2623 %4 = shufflevector <4 x i1> %3, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>624 %5 = bitcast <8 x i1> %4 to i8625 ret i8 %5626}627 628; Function Attrs: norecurse nounwind readnone629define zeroext i8 @TEST_mm256_mask_testn_epi32_mask(i8 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {630; AVX512VL-X64-LABEL: TEST_mm256_mask_testn_epi32_mask:631; AVX512VL-X64: # %bb.0: # %entry632; AVX512VL-X64-NEXT: vptestnmd %ymm0, %ymm1, %k0633; AVX512VL-X64-NEXT: kmovw %k0, %eax634; AVX512VL-X64-NEXT: andb %dil, %al635; AVX512VL-X64-NEXT: # kill: def $al killed $al killed $eax636; AVX512VL-X64-NEXT: vzeroupper637; AVX512VL-X64-NEXT: retq638;639; AVX512VL-X86-LABEL: TEST_mm256_mask_testn_epi32_mask:640; AVX512VL-X86: # %bb.0: # %entry641; AVX512VL-X86-NEXT: vptestnmd %ymm0, %ymm1, %k0642; AVX512VL-X86-NEXT: kmovw %k0, %eax643; AVX512VL-X86-NEXT: andb {{[0-9]+}}(%esp), %al644; AVX512VL-X86-NEXT: # kill: def $al killed $al killed $eax645; AVX512VL-X86-NEXT: vzeroupper646; AVX512VL-X86-NEXT: retl647;648; AVX512F-X64-LABEL: TEST_mm256_mask_testn_epi32_mask:649; AVX512F-X64: # %bb.0: # %entry650; AVX512F-X64-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1651; AVX512F-X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0652; AVX512F-X64-NEXT: vptestnmd %zmm0, %zmm1, %k0653; AVX512F-X64-NEXT: kmovw %k0, %eax654; AVX512F-X64-NEXT: andb %dil, %al655; AVX512F-X64-NEXT: # kill: def $al killed $al killed $eax656; AVX512F-X64-NEXT: vzeroupper657; AVX512F-X64-NEXT: retq658;659; AVX512F-X86-LABEL: TEST_mm256_mask_testn_epi32_mask:660; AVX512F-X86: # %bb.0: # %entry661; AVX512F-X86-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1662; AVX512F-X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0663; AVX512F-X86-NEXT: vptestnmd %zmm0, %zmm1, %k0664; AVX512F-X86-NEXT: kmovw %k0, %eax665; AVX512F-X86-NEXT: andb {{[0-9]+}}(%esp), %al666; AVX512F-X86-NEXT: # kill: def $al killed $al killed $eax667; AVX512F-X86-NEXT: vzeroupper668; AVX512F-X86-NEXT: retl669entry:670 %and.i.i = and <4 x i64> %__B, %__A671 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>672 %1 = icmp eq <8 x i32> %0, zeroinitializer673 %2 = bitcast i8 %__U to <8 x i1>674 %3 = and <8 x i1> %1, %2675 %4 = bitcast <8 x i1> %3 to i8676 ret i8 %4677}678 679