1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefix=AVX512BWVL 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512BW 4 5; Function Attrs: norecurse nounwind readnone 6define zeroext i16 @TEST_mm_test_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 7; AVX512BWVL-LABEL: TEST_mm_test_epi8_mask: 8; AVX512BWVL: # %bb.0: # %entry 9; AVX512BWVL-NEXT: vptestmb %xmm0, %xmm1, %k0 10; AVX512BWVL-NEXT: kmovd %k0, %eax 11; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 12; AVX512BWVL-NEXT: retq 13; 14; AVX512BW-LABEL: TEST_mm_test_epi8_mask: 15; AVX512BW: # %bb.0: # %entry 16; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 17; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 18; AVX512BW-NEXT: vptestmb %zmm0, %zmm1, %k0 19; AVX512BW-NEXT: kmovd %k0, %eax 20; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 21; AVX512BW-NEXT: vzeroupper 22; AVX512BW-NEXT: retq 23entry: 24 %and.i.i = and <2 x i64> %__B, %__A 25 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 26 %1 = icmp ne <16 x i8> %0, zeroinitializer 27 %2 = bitcast <16 x i1> %1 to i16 28 ret i16 %2 29} 30 31; Function Attrs: norecurse nounwind readnone 32define zeroext i16 @TEST_mm_mask_test_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 33; AVX512BWVL-LABEL: TEST_mm_mask_test_epi8_mask: 34; AVX512BWVL: # %bb.0: # %entry 35; AVX512BWVL-NEXT: vptestmb %xmm0, %xmm1, %k0 36; AVX512BWVL-NEXT: kmovd %k0, %eax 37; AVX512BWVL-NEXT: andl %edi, %eax 38; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 39; AVX512BWVL-NEXT: retq 40; 41; AVX512BW-LABEL: TEST_mm_mask_test_epi8_mask: 42; AVX512BW: # %bb.0: # %entry 43; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 44; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 45; AVX512BW-NEXT: vptestmb %zmm0, %zmm1, %k0 46; AVX512BW-NEXT: kmovd %k0, %eax 47; AVX512BW-NEXT: andl %edi, %eax 48; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 49; AVX512BW-NEXT: vzeroupper 50; AVX512BW-NEXT: retq 51entry: 52 %and.i.i = and <2 x i64> %__B, %__A 53 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 54 %1 = icmp ne <16 x i8> %0, zeroinitializer 55 %2 = bitcast i16 %__U to <16 x i1> 56 %3 = and <16 x i1> %1, %2 57 %4 = bitcast <16 x i1> %3 to i16 58 ret i16 %4 59} 60 61; Function Attrs: norecurse nounwind readnone 62define zeroext i8 @TEST_mm_test_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 63; AVX512BWVL-LABEL: TEST_mm_test_epi16_mask: 64; AVX512BWVL: # %bb.0: # %entry 65; AVX512BWVL-NEXT: vptestmw %xmm0, %xmm1, %k0 66; AVX512BWVL-NEXT: kmovd %k0, %eax 67; AVX512BWVL-NEXT: # kill: def $al killed $al killed $eax 68; AVX512BWVL-NEXT: retq 69; 70; AVX512BW-LABEL: TEST_mm_test_epi16_mask: 71; AVX512BW: # %bb.0: # %entry 72; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 73; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 74; AVX512BW-NEXT: vptestmw %zmm0, %zmm1, %k0 75; AVX512BW-NEXT: kmovd %k0, %eax 76; AVX512BW-NEXT: # kill: def $al killed $al killed $eax 77; AVX512BW-NEXT: vzeroupper 78; AVX512BW-NEXT: retq 79entry: 80 %and.i.i = and <2 x i64> %__B, %__A 81 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 82 %1 = icmp ne <8 x i16> %0, zeroinitializer 83 %2 = bitcast <8 x i1> %1 to i8 84 ret i8 %2 85} 86 87; Function Attrs: norecurse nounwind readnone 88define zeroext i8 @TEST_mm_mask_test_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 89; AVX512BWVL-LABEL: TEST_mm_mask_test_epi16_mask: 90; AVX512BWVL: # %bb.0: # %entry 91; AVX512BWVL-NEXT: vptestmw %xmm0, %xmm1, %k0 92; AVX512BWVL-NEXT: kmovd %k0, %eax 93; AVX512BWVL-NEXT: andb %dil, %al 94; AVX512BWVL-NEXT: # kill: def $al killed $al killed $eax 95; AVX512BWVL-NEXT: retq 96; 97; AVX512BW-LABEL: TEST_mm_mask_test_epi16_mask: 98; AVX512BW: # %bb.0: # %entry 99; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 100; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 101; AVX512BW-NEXT: vptestmw %zmm0, %zmm1, %k0 102; AVX512BW-NEXT: kmovd %k0, %eax 103; AVX512BW-NEXT: andb %dil, %al 104; AVX512BW-NEXT: # kill: def $al killed $al killed $eax 105; AVX512BW-NEXT: vzeroupper 106; AVX512BW-NEXT: retq 107entry: 108 %and.i.i = and <2 x i64> %__B, %__A 109 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 110 %1 = icmp ne <8 x i16> %0, zeroinitializer 111 %2 = bitcast i8 %__U to <8 x i1> 112 %3 = and <8 x i1> %1, %2 113 %4 = bitcast <8 x i1> %3 to i8 114 ret i8 %4 115} 116 117; Function Attrs: norecurse nounwind readnone 118define zeroext i16 @TEST_mm_testn_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 119; AVX512BWVL-LABEL: TEST_mm_testn_epi8_mask: 120; AVX512BWVL: # %bb.0: # %entry 121; AVX512BWVL-NEXT: vptestnmb %xmm0, %xmm1, %k0 122; AVX512BWVL-NEXT: kmovd %k0, %eax 123; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 124; AVX512BWVL-NEXT: retq 125; 126; AVX512BW-LABEL: TEST_mm_testn_epi8_mask: 127; AVX512BW: # %bb.0: # %entry 128; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 129; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 130; AVX512BW-NEXT: vptestnmb %zmm0, %zmm1, %k0 131; AVX512BW-NEXT: kmovd %k0, %eax 132; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 133; AVX512BW-NEXT: vzeroupper 134; AVX512BW-NEXT: retq 135entry: 136 %and.i.i = and <2 x i64> %__B, %__A 137 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 138 %1 = icmp eq <16 x i8> %0, zeroinitializer 139 %2 = bitcast <16 x i1> %1 to i16 140 ret i16 %2 141} 142 143; Function Attrs: norecurse nounwind readnone 144define zeroext i16 @TEST_mm_mask_testn_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 145; AVX512BWVL-LABEL: TEST_mm_mask_testn_epi8_mask: 146; AVX512BWVL: # %bb.0: # %entry 147; AVX512BWVL-NEXT: vptestnmb %xmm0, %xmm1, %k0 148; AVX512BWVL-NEXT: kmovd %k0, %eax 149; AVX512BWVL-NEXT: andl %edi, %eax 150; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 151; AVX512BWVL-NEXT: retq 152; 153; AVX512BW-LABEL: TEST_mm_mask_testn_epi8_mask: 154; AVX512BW: # %bb.0: # %entry 155; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 156; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 157; AVX512BW-NEXT: vptestnmb %zmm0, %zmm1, %k0 158; AVX512BW-NEXT: kmovd %k0, %eax 159; AVX512BW-NEXT: andl %edi, %eax 160; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 161; AVX512BW-NEXT: vzeroupper 162; AVX512BW-NEXT: retq 163entry: 164 %and.i.i = and <2 x i64> %__B, %__A 165 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 166 %1 = icmp eq <16 x i8> %0, zeroinitializer 167 %2 = bitcast i16 %__U to <16 x i1> 168 %3 = and <16 x i1> %1, %2 169 %4 = bitcast <16 x i1> %3 to i16 170 ret i16 %4 171} 172 173; Function Attrs: norecurse nounwind readnone 174define zeroext i8 @TEST_mm_testn_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 175; AVX512BWVL-LABEL: TEST_mm_testn_epi16_mask: 176; AVX512BWVL: # %bb.0: # %entry 177; AVX512BWVL-NEXT: vptestnmw %xmm0, %xmm1, %k0 178; AVX512BWVL-NEXT: kmovd %k0, %eax 179; AVX512BWVL-NEXT: # kill: def $al killed $al killed $eax 180; AVX512BWVL-NEXT: retq 181; 182; AVX512BW-LABEL: TEST_mm_testn_epi16_mask: 183; AVX512BW: # %bb.0: # %entry 184; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 185; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 186; AVX512BW-NEXT: vptestnmw %zmm0, %zmm1, %k0 187; AVX512BW-NEXT: kmovd %k0, %eax 188; AVX512BW-NEXT: # kill: def $al killed $al killed $eax 189; AVX512BW-NEXT: vzeroupper 190; AVX512BW-NEXT: retq 191entry: 192 %and.i.i = and <2 x i64> %__B, %__A 193 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 194 %1 = icmp eq <8 x i16> %0, zeroinitializer 195 %2 = bitcast <8 x i1> %1 to i8 196 ret i8 %2 197} 198 199; Function Attrs: norecurse nounwind readnone 200define zeroext i8 @TEST_mm_mask_testn_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 201; AVX512BWVL-LABEL: TEST_mm_mask_testn_epi16_mask: 202; AVX512BWVL: # %bb.0: # %entry 203; AVX512BWVL-NEXT: vptestnmw %xmm0, %xmm1, %k0 204; AVX512BWVL-NEXT: kmovd %k0, %eax 205; AVX512BWVL-NEXT: andb %dil, %al 206; AVX512BWVL-NEXT: # kill: def $al killed $al killed $eax 207; AVX512BWVL-NEXT: retq 208; 209; AVX512BW-LABEL: TEST_mm_mask_testn_epi16_mask: 210; AVX512BW: # %bb.0: # %entry 211; AVX512BW-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1 212; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 213; AVX512BW-NEXT: vptestnmw %zmm0, %zmm1, %k0 214; AVX512BW-NEXT: kmovd %k0, %eax 215; AVX512BW-NEXT: andb %dil, %al 216; AVX512BW-NEXT: # kill: def $al killed $al killed $eax 217; AVX512BW-NEXT: vzeroupper 218; AVX512BW-NEXT: retq 219entry: 220 %and.i.i = and <2 x i64> %__B, %__A 221 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 222 %1 = icmp eq <8 x i16> %0, zeroinitializer 223 %2 = bitcast i8 %__U to <8 x i1> 224 %3 = and <8 x i1> %1, %2 225 %4 = bitcast <8 x i1> %3 to i8 226 ret i8 %4 227} 228 229; Function Attrs: norecurse nounwind readnone 230define i32 @TEST_mm256_test_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 231; AVX512BWVL-LABEL: TEST_mm256_test_epi8_mask: 232; AVX512BWVL: # %bb.0: # %entry 233; AVX512BWVL-NEXT: vptestmb %ymm0, %ymm1, %k0 234; AVX512BWVL-NEXT: kmovd %k0, %eax 235; AVX512BWVL-NEXT: vzeroupper 236; AVX512BWVL-NEXT: retq 237; 238; AVX512BW-LABEL: TEST_mm256_test_epi8_mask: 239; AVX512BW: # %bb.0: # %entry 240; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 241; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 242; AVX512BW-NEXT: vptestmb %zmm0, %zmm1, %k0 243; AVX512BW-NEXT: kmovd %k0, %eax 244; AVX512BW-NEXT: vzeroupper 245; AVX512BW-NEXT: retq 246entry: 247 %and.i.i = and <4 x i64> %__B, %__A 248 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 249 %1 = icmp ne <32 x i8> %0, zeroinitializer 250 %2 = bitcast <32 x i1> %1 to i32 251 ret i32 %2 252} 253 254; Function Attrs: norecurse nounwind readnone 255define i32 @TEST_mm256_mask_test_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 256; AVX512BWVL-LABEL: TEST_mm256_mask_test_epi8_mask: 257; AVX512BWVL: # %bb.0: # %entry 258; AVX512BWVL-NEXT: vptestmb %ymm0, %ymm1, %k0 259; AVX512BWVL-NEXT: kmovd %k0, %eax 260; AVX512BWVL-NEXT: andl %edi, %eax 261; AVX512BWVL-NEXT: vzeroupper 262; AVX512BWVL-NEXT: retq 263; 264; AVX512BW-LABEL: TEST_mm256_mask_test_epi8_mask: 265; AVX512BW: # %bb.0: # %entry 266; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 267; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 268; AVX512BW-NEXT: vptestmb %zmm0, %zmm1, %k0 269; AVX512BW-NEXT: kmovd %k0, %eax 270; AVX512BW-NEXT: andl %edi, %eax 271; AVX512BW-NEXT: vzeroupper 272; AVX512BW-NEXT: retq 273entry: 274 %and.i.i = and <4 x i64> %__B, %__A 275 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 276 %1 = icmp ne <32 x i8> %0, zeroinitializer 277 %2 = bitcast i32 %__U to <32 x i1> 278 %3 = and <32 x i1> %1, %2 279 %4 = bitcast <32 x i1> %3 to i32 280 ret i32 %4 281} 282 283; Function Attrs: norecurse nounwind readnone 284define zeroext i16 @TEST_mm256_test_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 285; AVX512BWVL-LABEL: TEST_mm256_test_epi16_mask: 286; AVX512BWVL: # %bb.0: # %entry 287; AVX512BWVL-NEXT: vptestmw %ymm0, %ymm1, %k0 288; AVX512BWVL-NEXT: kmovd %k0, %eax 289; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 290; AVX512BWVL-NEXT: vzeroupper 291; AVX512BWVL-NEXT: retq 292; 293; AVX512BW-LABEL: TEST_mm256_test_epi16_mask: 294; AVX512BW: # %bb.0: # %entry 295; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 296; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 297; AVX512BW-NEXT: vptestmw %zmm0, %zmm1, %k0 298; AVX512BW-NEXT: kmovd %k0, %eax 299; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 300; AVX512BW-NEXT: vzeroupper 301; AVX512BW-NEXT: retq 302entry: 303 %and.i.i = and <4 x i64> %__B, %__A 304 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 305 %1 = icmp ne <16 x i16> %0, zeroinitializer 306 %2 = bitcast <16 x i1> %1 to i16 307 ret i16 %2 308} 309 310; Function Attrs: norecurse nounwind readnone 311define zeroext i16 @TEST_mm256_mask_test_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 312; AVX512BWVL-LABEL: TEST_mm256_mask_test_epi16_mask: 313; AVX512BWVL: # %bb.0: # %entry 314; AVX512BWVL-NEXT: vptestmw %ymm0, %ymm1, %k0 315; AVX512BWVL-NEXT: kmovd %k0, %eax 316; AVX512BWVL-NEXT: andl %edi, %eax 317; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 318; AVX512BWVL-NEXT: vzeroupper 319; AVX512BWVL-NEXT: retq 320; 321; AVX512BW-LABEL: TEST_mm256_mask_test_epi16_mask: 322; AVX512BW: # %bb.0: # %entry 323; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 324; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 325; AVX512BW-NEXT: vptestmw %zmm0, %zmm1, %k0 326; AVX512BW-NEXT: kmovd %k0, %eax 327; AVX512BW-NEXT: andl %edi, %eax 328; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 329; AVX512BW-NEXT: vzeroupper 330; AVX512BW-NEXT: retq 331entry: 332 %and.i.i = and <4 x i64> %__B, %__A 333 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 334 %1 = icmp ne <16 x i16> %0, zeroinitializer 335 %2 = bitcast i16 %__U to <16 x i1> 336 %3 = and <16 x i1> %1, %2 337 %4 = bitcast <16 x i1> %3 to i16 338 ret i16 %4 339} 340 341; Function Attrs: norecurse nounwind readnone 342define i32 @TEST_mm256_testn_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 343; AVX512BWVL-LABEL: TEST_mm256_testn_epi8_mask: 344; AVX512BWVL: # %bb.0: # %entry 345; AVX512BWVL-NEXT: vptestnmb %ymm0, %ymm1, %k0 346; AVX512BWVL-NEXT: kmovd %k0, %eax 347; AVX512BWVL-NEXT: vzeroupper 348; AVX512BWVL-NEXT: retq 349; 350; AVX512BW-LABEL: TEST_mm256_testn_epi8_mask: 351; AVX512BW: # %bb.0: # %entry 352; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 353; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 354; AVX512BW-NEXT: vptestnmb %zmm0, %zmm1, %k0 355; AVX512BW-NEXT: kmovd %k0, %eax 356; AVX512BW-NEXT: vzeroupper 357; AVX512BW-NEXT: retq 358entry: 359 %and.i.i = and <4 x i64> %__B, %__A 360 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 361 %1 = icmp eq <32 x i8> %0, zeroinitializer 362 %2 = bitcast <32 x i1> %1 to i32 363 ret i32 %2 364} 365 366; Function Attrs: norecurse nounwind readnone 367define i32 @TEST_mm256_mask_testn_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 368; AVX512BWVL-LABEL: TEST_mm256_mask_testn_epi8_mask: 369; AVX512BWVL: # %bb.0: # %entry 370; AVX512BWVL-NEXT: vptestnmb %ymm0, %ymm1, %k0 371; AVX512BWVL-NEXT: kmovd %k0, %eax 372; AVX512BWVL-NEXT: andl %edi, %eax 373; AVX512BWVL-NEXT: vzeroupper 374; AVX512BWVL-NEXT: retq 375; 376; AVX512BW-LABEL: TEST_mm256_mask_testn_epi8_mask: 377; AVX512BW: # %bb.0: # %entry 378; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 379; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 380; AVX512BW-NEXT: vptestnmb %zmm0, %zmm1, %k0 381; AVX512BW-NEXT: kmovd %k0, %eax 382; AVX512BW-NEXT: andl %edi, %eax 383; AVX512BW-NEXT: vzeroupper 384; AVX512BW-NEXT: retq 385entry: 386 %and.i.i = and <4 x i64> %__B, %__A 387 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 388 %1 = icmp eq <32 x i8> %0, zeroinitializer 389 %2 = bitcast i32 %__U to <32 x i1> 390 %3 = and <32 x i1> %1, %2 391 %4 = bitcast <32 x i1> %3 to i32 392 ret i32 %4 393} 394 395; Function Attrs: norecurse nounwind readnone 396define zeroext i16 @TEST_mm256_testn_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 397; AVX512BWVL-LABEL: TEST_mm256_testn_epi16_mask: 398; AVX512BWVL: # %bb.0: # %entry 399; AVX512BWVL-NEXT: vptestnmw %ymm0, %ymm1, %k0 400; AVX512BWVL-NEXT: kmovd %k0, %eax 401; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 402; AVX512BWVL-NEXT: vzeroupper 403; AVX512BWVL-NEXT: retq 404; 405; AVX512BW-LABEL: TEST_mm256_testn_epi16_mask: 406; AVX512BW: # %bb.0: # %entry 407; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 408; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 409; AVX512BW-NEXT: vptestnmw %zmm0, %zmm1, %k0 410; AVX512BW-NEXT: kmovd %k0, %eax 411; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 412; AVX512BW-NEXT: vzeroupper 413; AVX512BW-NEXT: retq 414entry: 415 %and.i.i = and <4 x i64> %__B, %__A 416 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 417 %1 = icmp eq <16 x i16> %0, zeroinitializer 418 %2 = bitcast <16 x i1> %1 to i16 419 ret i16 %2 420} 421 422; Function Attrs: norecurse nounwind readnone 423define zeroext i16 @TEST_mm256_mask_testn_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 424; AVX512BWVL-LABEL: TEST_mm256_mask_testn_epi16_mask: 425; AVX512BWVL: # %bb.0: # %entry 426; AVX512BWVL-NEXT: vptestnmw %ymm0, %ymm1, %k0 427; AVX512BWVL-NEXT: kmovd %k0, %eax 428; AVX512BWVL-NEXT: andl %edi, %eax 429; AVX512BWVL-NEXT: # kill: def $ax killed $ax killed $eax 430; AVX512BWVL-NEXT: vzeroupper 431; AVX512BWVL-NEXT: retq 432; 433; AVX512BW-LABEL: TEST_mm256_mask_testn_epi16_mask: 434; AVX512BW: # %bb.0: # %entry 435; AVX512BW-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1 436; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 437; AVX512BW-NEXT: vptestnmw %zmm0, %zmm1, %k0 438; AVX512BW-NEXT: kmovd %k0, %eax 439; AVX512BW-NEXT: andl %edi, %eax 440; AVX512BW-NEXT: # kill: def $ax killed $ax killed $eax 441; AVX512BW-NEXT: vzeroupper 442; AVX512BW-NEXT: retq 443entry: 444 %and.i.i = and <4 x i64> %__B, %__A 445 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 446 %1 = icmp eq <16 x i16> %0, zeroinitializer 447 %2 = bitcast i16 %__U to <16 x i1> 448 %3 = and <16 x i1> %1, %2 449 %4 = bitcast <16 x i1> %3 to i16 450 ret i16 %4 451} 452 453 454