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