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 3 4; Function Attrs: norecurse nounwind readnone 5define zeroext i16 @TEST_mm_test_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 6; CHECK-LABEL: TEST_mm_test_epi8_mask: 7; CHECK: # %bb.0: # %entry 8; CHECK-NEXT: vptestmb %xmm0, %xmm1, %k0 9; CHECK-NEXT: kmovd %k0, %eax 10; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 11; CHECK-NEXT: retq 12entry: 13 %and.i.i = and <2 x i64> %__B, %__A 14 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 15 %1 = icmp ne <16 x i8> %0, zeroinitializer 16 %2 = bitcast <16 x i1> %1 to i16 17 ret i16 %2 18} 19 20; Function Attrs: norecurse nounwind readnone 21define zeroext i16 @TEST_mm_mask_test_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 22; CHECK-LABEL: TEST_mm_mask_test_epi8_mask: 23; CHECK: # %bb.0: # %entry 24; CHECK-NEXT: vptestmb %xmm0, %xmm1, %k0 25; CHECK-NEXT: kmovd %k0, %eax 26; CHECK-NEXT: andl %edi, %eax 27; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 28; CHECK-NEXT: retq 29entry: 30 %and.i.i = and <2 x i64> %__B, %__A 31 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 32 %1 = icmp ne <16 x i8> %0, zeroinitializer 33 %2 = bitcast i16 %__U to <16 x i1> 34 %3 = and <16 x i1> %1, %2 35 %4 = bitcast <16 x i1> %3 to i16 36 ret i16 %4 37} 38 39; Function Attrs: norecurse nounwind readnone 40define zeroext i8 @TEST_mm_test_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 41; CHECK-LABEL: TEST_mm_test_epi16_mask: 42; CHECK: # %bb.0: # %entry 43; CHECK-NEXT: vptestmw %xmm0, %xmm1, %k0 44; CHECK-NEXT: kmovd %k0, %eax 45; CHECK-NEXT: # kill: def $al killed $al killed $eax 46; CHECK-NEXT: retq 47entry: 48 %and.i.i = and <2 x i64> %__B, %__A 49 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 50 %1 = icmp ne <8 x i16> %0, zeroinitializer 51 %2 = bitcast <8 x i1> %1 to i8 52 ret i8 %2 53} 54 55; Function Attrs: norecurse nounwind readnone 56define zeroext i8 @TEST_mm_mask_test_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 57; CHECK-LABEL: TEST_mm_mask_test_epi16_mask: 58; CHECK: # %bb.0: # %entry 59; CHECK-NEXT: vptestmw %xmm0, %xmm1, %k0 60; CHECK-NEXT: kmovd %k0, %eax 61; CHECK-NEXT: andb %dil, %al 62; CHECK-NEXT: # kill: def $al killed $al killed $eax 63; CHECK-NEXT: retq 64entry: 65 %and.i.i = and <2 x i64> %__B, %__A 66 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 67 %1 = icmp ne <8 x i16> %0, zeroinitializer 68 %2 = bitcast i8 %__U to <8 x i1> 69 %3 = and <8 x i1> %1, %2 70 %4 = bitcast <8 x i1> %3 to i8 71 ret i8 %4 72} 73 74; Function Attrs: norecurse nounwind readnone 75define zeroext i16 @TEST_mm_testn_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 76; CHECK-LABEL: TEST_mm_testn_epi8_mask: 77; CHECK: # %bb.0: # %entry 78; CHECK-NEXT: vptestnmb %xmm0, %xmm1, %k0 79; CHECK-NEXT: kmovd %k0, %eax 80; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 81; CHECK-NEXT: retq 82entry: 83 %and.i.i = and <2 x i64> %__B, %__A 84 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 85 %1 = icmp eq <16 x i8> %0, zeroinitializer 86 %2 = bitcast <16 x i1> %1 to i16 87 ret i16 %2 88} 89 90; Function Attrs: norecurse nounwind readnone 91define zeroext i16 @TEST_mm_mask_testn_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 92; CHECK-LABEL: TEST_mm_mask_testn_epi8_mask: 93; CHECK: # %bb.0: # %entry 94; CHECK-NEXT: vptestnmb %xmm0, %xmm1, %k0 95; CHECK-NEXT: kmovd %k0, %eax 96; CHECK-NEXT: andl %edi, %eax 97; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 98; CHECK-NEXT: retq 99entry: 100 %and.i.i = and <2 x i64> %__B, %__A 101 %0 = bitcast <2 x i64> %and.i.i to <16 x i8> 102 %1 = icmp eq <16 x i8> %0, zeroinitializer 103 %2 = bitcast i16 %__U to <16 x i1> 104 %3 = and <16 x i1> %1, %2 105 %4 = bitcast <16 x i1> %3 to i16 106 ret i16 %4 107} 108 109; Function Attrs: norecurse nounwind readnone 110define zeroext i8 @TEST_mm_testn_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 111; CHECK-LABEL: TEST_mm_testn_epi16_mask: 112; CHECK: # %bb.0: # %entry 113; CHECK-NEXT: vptestnmw %xmm0, %xmm1, %k0 114; CHECK-NEXT: kmovd %k0, %eax 115; CHECK-NEXT: # kill: def $al killed $al killed $eax 116; CHECK-NEXT: retq 117entry: 118 %and.i.i = and <2 x i64> %__B, %__A 119 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 120 %1 = icmp eq <8 x i16> %0, zeroinitializer 121 %2 = bitcast <8 x i1> %1 to i8 122 ret i8 %2 123} 124 125; Function Attrs: norecurse nounwind readnone 126define zeroext i8 @TEST_mm_mask_testn_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 { 127; CHECK-LABEL: TEST_mm_mask_testn_epi16_mask: 128; CHECK: # %bb.0: # %entry 129; CHECK-NEXT: vptestnmw %xmm0, %xmm1, %k0 130; CHECK-NEXT: kmovd %k0, %eax 131; CHECK-NEXT: andb %dil, %al 132; CHECK-NEXT: # kill: def $al killed $al killed $eax 133; CHECK-NEXT: retq 134entry: 135 %and.i.i = and <2 x i64> %__B, %__A 136 %0 = bitcast <2 x i64> %and.i.i to <8 x i16> 137 %1 = icmp eq <8 x i16> %0, zeroinitializer 138 %2 = bitcast i8 %__U to <8 x i1> 139 %3 = and <8 x i1> %1, %2 140 %4 = bitcast <8 x i1> %3 to i8 141 ret i8 %4 142} 143 144; Function Attrs: norecurse nounwind readnone 145define i32 @TEST_mm256_test_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 146; CHECK-LABEL: TEST_mm256_test_epi8_mask: 147; CHECK: # %bb.0: # %entry 148; CHECK-NEXT: vptestmb %ymm0, %ymm1, %k0 149; CHECK-NEXT: kmovd %k0, %eax 150; CHECK-NEXT: vzeroupper 151; CHECK-NEXT: retq 152entry: 153 %and.i.i = and <4 x i64> %__B, %__A 154 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 155 %1 = icmp ne <32 x i8> %0, zeroinitializer 156 %2 = bitcast <32 x i1> %1 to i32 157 ret i32 %2 158} 159 160; Function Attrs: norecurse nounwind readnone 161define i32 @TEST_mm256_mask_test_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 162; CHECK-LABEL: TEST_mm256_mask_test_epi8_mask: 163; CHECK: # %bb.0: # %entry 164; CHECK-NEXT: vptestmb %ymm0, %ymm1, %k0 165; CHECK-NEXT: kmovd %k0, %eax 166; CHECK-NEXT: andl %edi, %eax 167; CHECK-NEXT: vzeroupper 168; CHECK-NEXT: retq 169entry: 170 %and.i.i = and <4 x i64> %__B, %__A 171 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 172 %1 = icmp ne <32 x i8> %0, zeroinitializer 173 %2 = bitcast i32 %__U to <32 x i1> 174 %3 = and <32 x i1> %1, %2 175 %4 = bitcast <32 x i1> %3 to i32 176 ret i32 %4 177} 178 179; Function Attrs: norecurse nounwind readnone 180define zeroext i16 @TEST_mm256_test_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 181; CHECK-LABEL: TEST_mm256_test_epi16_mask: 182; CHECK: # %bb.0: # %entry 183; CHECK-NEXT: vptestmw %ymm0, %ymm1, %k0 184; CHECK-NEXT: kmovd %k0, %eax 185; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 186; CHECK-NEXT: vzeroupper 187; CHECK-NEXT: retq 188entry: 189 %and.i.i = and <4 x i64> %__B, %__A 190 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 191 %1 = icmp ne <16 x i16> %0, zeroinitializer 192 %2 = bitcast <16 x i1> %1 to i16 193 ret i16 %2 194} 195 196; Function Attrs: norecurse nounwind readnone 197define zeroext i16 @TEST_mm256_mask_test_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 198; CHECK-LABEL: TEST_mm256_mask_test_epi16_mask: 199; CHECK: # %bb.0: # %entry 200; CHECK-NEXT: vptestmw %ymm0, %ymm1, %k0 201; CHECK-NEXT: kmovd %k0, %eax 202; CHECK-NEXT: andl %edi, %eax 203; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 204; CHECK-NEXT: vzeroupper 205; CHECK-NEXT: retq 206entry: 207 %and.i.i = and <4 x i64> %__B, %__A 208 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 209 %1 = icmp ne <16 x i16> %0, zeroinitializer 210 %2 = bitcast i16 %__U to <16 x i1> 211 %3 = and <16 x i1> %1, %2 212 %4 = bitcast <16 x i1> %3 to i16 213 ret i16 %4 214} 215 216; Function Attrs: norecurse nounwind readnone 217define i32 @TEST_mm256_testn_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 218; CHECK-LABEL: TEST_mm256_testn_epi8_mask: 219; CHECK: # %bb.0: # %entry 220; CHECK-NEXT: vptestnmb %ymm0, %ymm1, %k0 221; CHECK-NEXT: kmovd %k0, %eax 222; CHECK-NEXT: vzeroupper 223; CHECK-NEXT: retq 224entry: 225 %and.i.i = and <4 x i64> %__B, %__A 226 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 227 %1 = icmp eq <32 x i8> %0, zeroinitializer 228 %2 = bitcast <32 x i1> %1 to i32 229 ret i32 %2 230} 231 232; Function Attrs: norecurse nounwind readnone 233define i32 @TEST_mm256_mask_testn_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 234; CHECK-LABEL: TEST_mm256_mask_testn_epi8_mask: 235; CHECK: # %bb.0: # %entry 236; CHECK-NEXT: vptestnmb %ymm0, %ymm1, %k0 237; CHECK-NEXT: kmovd %k0, %eax 238; CHECK-NEXT: andl %edi, %eax 239; CHECK-NEXT: vzeroupper 240; CHECK-NEXT: retq 241entry: 242 %and.i.i = and <4 x i64> %__B, %__A 243 %0 = bitcast <4 x i64> %and.i.i to <32 x i8> 244 %1 = icmp eq <32 x i8> %0, zeroinitializer 245 %2 = bitcast i32 %__U to <32 x i1> 246 %3 = and <32 x i1> %1, %2 247 %4 = bitcast <32 x i1> %3 to i32 248 ret i32 %4 249} 250 251; Function Attrs: norecurse nounwind readnone 252define zeroext i16 @TEST_mm256_testn_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 253; CHECK-LABEL: TEST_mm256_testn_epi16_mask: 254; CHECK: # %bb.0: # %entry 255; CHECK-NEXT: vptestnmw %ymm0, %ymm1, %k0 256; CHECK-NEXT: kmovd %k0, %eax 257; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 258; CHECK-NEXT: vzeroupper 259; CHECK-NEXT: retq 260entry: 261 %and.i.i = and <4 x i64> %__B, %__A 262 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 263 %1 = icmp eq <16 x i16> %0, zeroinitializer 264 %2 = bitcast <16 x i1> %1 to i16 265 ret i16 %2 266} 267 268; Function Attrs: norecurse nounwind readnone 269define zeroext i16 @TEST_mm256_mask_testn_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 { 270; CHECK-LABEL: TEST_mm256_mask_testn_epi16_mask: 271; CHECK: # %bb.0: # %entry 272; CHECK-NEXT: vptestnmw %ymm0, %ymm1, %k0 273; CHECK-NEXT: kmovd %k0, %eax 274; CHECK-NEXT: andl %edi, %eax 275; CHECK-NEXT: # kill: def $ax killed $ax killed $eax 276; CHECK-NEXT: vzeroupper 277; CHECK-NEXT: retq 278entry: 279 %and.i.i = and <4 x i64> %__B, %__A 280 %0 = bitcast <4 x i64> %and.i.i to <16 x i16> 281 %1 = icmp eq <16 x i16> %0, zeroinitializer 282 %2 = bitcast i16 %__U to <16 x i1> 283 %3 = and <16 x i1> %1, %2 284 %4 = bitcast <16 x i1> %3 to i16 285 ret i16 %4 286} 287 288 289