1  /* PR target/103750 */
       2  /* { dg-do compile }  */
       3  /* { dg-options "-O2 -mavx512dq -mavx512bw -mavx512vl" } */
       4  /* { dg-final { scan-assembler-not "kmov" { xfail ia32 } } } */
       5  /* xfail need to be fixed.  */
       6  
       7  #include <immintrin.h>
       8  extern __m128i* pi128;
       9  extern __m256i* pi256;
      10  extern __m512i* pi512;
      11  
      12  extern char a, b;
      13  void
      14  foo ()
      15  {
      16    __mmask16 mask1 = _mm_cmpeq_epu8_mask (pi128[0], pi128[1]);
      17    __mmask16 mask2 = _mm_cmpeq_epu8_mask (pi128[2], pi128[3]);
      18    a = _kortestz_mask32_u8 (mask1, mask2);
      19    b = _kortestz_mask16_u8 (mask1, mask2);
      20  }
      21  
      22  void
      23  foo1 ()
      24  {
      25    __mmask16 mask1 = _mm_cmpeq_epu8_mask (pi128[0], pi128[1]);
      26    __mmask16 mask2 = _mm_cmpeq_epu8_mask (pi128[2], pi128[3]);
      27    a = _kortestz_mask64_u8 (mask1, mask2);
      28    b = _kortestz_mask16_u8 (mask1, mask2);
      29  }
      30  
      31  void
      32  foo2 ()
      33  {
      34    __mmask32 mask1 = _mm256_cmpeq_epu8_mask (pi256[0], pi256[1]);
      35    __mmask32 mask2 = _mm256_cmpeq_epu8_mask (pi256[2], pi256[3]);
      36    a = _kortestz_mask64_u8 (mask1, mask2);
      37    b = _kortestz_mask32_u8 (mask1, mask2);
      38  }
      39  
      40  void
      41  foo3 ()
      42  {
      43    __mmask8 mask1 = _mm_cmpeq_epu16_mask (pi128[0], pi128[1]);
      44    __mmask8 mask2 = _mm_cmpeq_epu16_mask (pi128[1], pi128[2]);
      45    a = _kortestz_mask16_u8 (mask1, mask2);
      46    b = _kortestz_mask8_u8 (mask1, mask2);
      47  }
      48  
      49  void
      50  foo4 ()
      51  {
      52    __mmask8 mask1 = _mm_cmpeq_epu16_mask (pi128[0], pi128[1]);
      53    __mmask8 mask2 = _mm_cmpeq_epu16_mask (pi128[1], pi128[2]);
      54    a = _kortestz_mask32_u8 (mask1, mask2);
      55    b = _kortestz_mask8_u8 (mask1, mask2);
      56  }
      57  
      58  void
      59  foo5 ()
      60  {
      61    __mmask8 mask1 = _mm_cmpeq_epu16_mask (pi128[0], pi128[1]);
      62    __mmask8 mask2 = _mm_cmpeq_epu16_mask (pi128[1], pi128[2]);
      63    a = _kortestz_mask64_u8 (mask1, mask2);
      64    b = _kortestz_mask8_u8 (mask1, mask2);
      65  }
      66  
      67  void
      68  foo6 ()
      69  {
      70    __mmask16 mask1 = _mm256_cmpeq_epu16_mask (pi256[0], pi256[1]);
      71    __mmask16 mask2 = _mm256_cmpeq_epu16_mask (pi256[2], pi256[3]);
      72    a = _kortestz_mask32_u8 (mask1, mask2);
      73    b = _kortestz_mask16_u8 (mask1, mask2);
      74  }
      75  
      76  void
      77  foo7 ()
      78  {
      79    __mmask16 mask1 = _mm256_cmpeq_epu16_mask (pi256[0], pi256[1]);
      80    __mmask16 mask2 = _mm256_cmpeq_epu16_mask (pi256[2], pi256[3]);
      81    a = _kortestz_mask64_u8 (mask1, mask2);
      82    b = _kortestz_mask16_u8 (mask1, mask2);
      83  }
      84  
      85  void
      86  foo8 ()
      87  {
      88    __mmask32 mask1 = _mm512_cmpeq_epu16_mask (pi512[0], pi512[1]);
      89    __mmask32 mask2 = _mm512_cmpeq_epu16_mask (pi512[2], pi512[3]);
      90    a = _kortestz_mask64_u8 (mask1, mask2);
      91    b = _kortestz_mask32_u8 (mask1, mask2);
      92  }
      93  
      94  void
      95  sign_foo ()
      96  {
      97    __mmask16 mask1 = _mm_cmpeq_epi8_mask (pi128[0], pi128[1]);
      98    __mmask16 mask2 = _mm_cmpeq_epi8_mask (pi128[2], pi128[3]);
      99    a = _kortestz_mask32_u8 (mask1, mask2);
     100    b = _kortestz_mask16_u8 (mask1, mask2);
     101  }
     102  
     103  void
     104  sign_foo1 ()
     105  {
     106    __mmask16 mask1 = _mm_cmpeq_epi8_mask (pi128[0], pi128[1]);
     107    __mmask16 mask2 = _mm_cmpeq_epi8_mask (pi128[2], pi128[3]);
     108    a = _kortestz_mask64_u8 (mask1, mask2);
     109    b = _kortestz_mask16_u8 (mask1, mask2);
     110  }
     111  
     112  void
     113  sign_foo2 ()
     114  {
     115    __mmask32 mask1 = _mm256_cmpeq_epi8_mask (pi256[0], pi256[1]);
     116    __mmask32 mask2 = _mm256_cmpeq_epi8_mask (pi256[2], pi256[3]);
     117    a = _kortestz_mask64_u8 (mask1, mask2);
     118    b = _kortestz_mask32_u8 (mask1, mask2);
     119  }
     120  
     121  void
     122  sign_foo3 ()
     123  {
     124    __mmask8 mask1 = _mm_cmpeq_epi16_mask (pi128[0], pi128[1]);
     125    __mmask8 mask2 = _mm_cmpeq_epi16_mask (pi128[1], pi128[2]);
     126    a = _kortestz_mask16_u8 (mask1, mask2);
     127    b = _kortestz_mask8_u8 (mask1, mask2);
     128  }
     129  
     130  void
     131  sign_foo4 ()
     132  {
     133    __mmask8 mask1 = _mm_cmpeq_epi16_mask (pi128[0], pi128[1]);
     134    __mmask8 mask2 = _mm_cmpeq_epi16_mask (pi128[1], pi128[2]);
     135    a = _kortestz_mask32_u8 (mask1, mask2);
     136    b = _kortestz_mask8_u8 (mask1, mask2);
     137  }
     138  
     139  void
     140  sign_foo5 ()
     141  {
     142    __mmask8 mask1 = _mm_cmpeq_epi16_mask (pi128[0], pi128[1]);
     143    __mmask8 mask2 = _mm_cmpeq_epi16_mask (pi128[1], pi128[2]);
     144    a = _kortestz_mask64_u8 (mask1, mask2);
     145    b = _kortestz_mask8_u8 (mask1, mask2);
     146  }
     147  
     148  void
     149  sign_foo6 ()
     150  {
     151    __mmask16 mask1 = _mm256_cmpeq_epi16_mask (pi256[0], pi256[1]);
     152    __mmask16 mask2 = _mm256_cmpeq_epi16_mask (pi256[2], pi256[3]);
     153    a = _kortestz_mask32_u8 (mask1, mask2);
     154    b = _kortestz_mask16_u8 (mask1, mask2);
     155  }
     156  
     157  void
     158  sign_foo7 ()
     159  {
     160    __mmask16 mask1 = _mm256_cmpeq_epi16_mask (pi256[0], pi256[1]);
     161    __mmask16 mask2 = _mm256_cmpeq_epi16_mask (pi256[2], pi256[3]);
     162    a = _kortestz_mask64_u8 (mask1, mask2);
     163    b = _kortestz_mask16_u8 (mask1, mask2);
     164  }
     165  
     166  void
     167  sign_foo8 ()
     168  {
     169    __mmask32 mask1 = _mm512_cmpeq_epi16_mask (pi512[0], pi512[1]);
     170    __mmask32 mask2 = _mm512_cmpeq_epi16_mask (pi512[2], pi512[3]);
     171    a = _kortestz_mask64_u8 (mask1, mask2);
     172    b = _kortestz_mask32_u8 (mask1, mask2);
     173  }