Home | History | Annotate | Download | only in X86
      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