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=+avx512bw,+avx512vl | FileCheck %s
      3 
      4 ; Function Attrs: norecurse nounwind readnone
      5 define 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
     12 entry:
     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
     21 define 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
     29 entry:
     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
     40 define 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
     47 entry:
     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
     56 define 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
     64 entry:
     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
     75 define 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
     82 entry:
     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
     91 define 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
     99 entry:
    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
    110 define 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
    117 entry:
    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
    126 define 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
    134 entry:
    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
    145 define 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
    152 entry:
    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
    161 define 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
    169 entry:
    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
    180 define 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
    188 entry:
    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
    197 define 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
    206 entry:
    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
    217 define 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
    224 entry:
    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
    233 define 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
    241 entry:
    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
    252 define 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
    260 entry:
    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
    269 define 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
    278 entry:
    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