1  /* PR target/103750 */
       2  /* { dg-do compile }  */
       3  /* { dg-options "-O2 -mavx512f -mavx512vl -mavx512bw" } */
       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 __m128* ps128;
      13  extern __m256* ps256;
      14  extern __m512* ps512;
      15  
      16  extern __m128d* pd128;
      17  extern __m256d* pd256;
      18  extern __m512d* pd512;
      19  
      20  unsigned char
      21  foo ()
      22  {
      23    __mmask8 mask1 = _mm_cmpeq_epu32_mask (pi128[0], pi128[1]);
      24    __mmask8 mask2 = _mm_cmpeq_epu32_mask (pi128[2], pi128[3]);
      25    return _kortestz_mask16_u8 (mask1, mask2);
      26  }
      27  
      28  unsigned char
      29  foo1 ()
      30  {
      31    __mmask8 mask1 = _mm_cmpeq_epu32_mask (pi128[0], pi128[1]);
      32    __mmask8 mask2 = _mm_cmpeq_epu32_mask (pi128[2], pi128[3]);
      33    return _kortestz_mask32_u8 (mask1, mask2);
      34  }
      35  
      36  unsigned char
      37  foo2 ()
      38  {
      39    __mmask8 mask1 = _mm_cmpeq_epu32_mask (pi128[0], pi128[1]);
      40    __mmask8 mask2 = _mm_cmpeq_epu32_mask (pi128[2], pi128[3]);
      41    return _kortestz_mask64_u8 (mask1, mask2);
      42  }
      43  
      44  unsigned char
      45  foo3 ()
      46  {
      47    __mmask8 mask1 = _mm256_cmpeq_epu32_mask (pi256[0], pi256[1]);
      48    __mmask8 mask2 = _mm256_cmpeq_epu32_mask (pi256[2], pi256[3]);
      49    return _kortestz_mask16_u8 (mask1, mask2);
      50  }
      51  
      52  unsigned char
      53  foo4 ()
      54  {
      55    __mmask8 mask1 = _mm256_cmpeq_epu32_mask (pi256[0], pi256[1]);
      56    __mmask8 mask2 = _mm256_cmpeq_epu32_mask (pi256[2], pi256[3]);
      57    return _kortestz_mask32_u8 (mask1, mask2);
      58  }
      59  
      60  unsigned char
      61  foo5 ()
      62  {
      63    __mmask8 mask1 = _mm256_cmpeq_epu32_mask (pi256[0], pi256[1]);
      64    __mmask8 mask2 = _mm256_cmpeq_epu32_mask (pi256[2], pi256[3]);
      65    return _kortestz_mask64_u8 (mask1, mask2);
      66  }
      67  
      68  unsigned char
      69  foo6 ()
      70  {
      71    __mmask16 mask1 = _mm512_cmpeq_epu32_mask (pi512[0], pi512[1]);
      72    __mmask16 mask2 = _mm512_cmpeq_epu32_mask (pi512[2], pi512[3]);
      73    return _kortestz_mask32_u8 (mask1, mask2);
      74  }
      75  
      76  unsigned char
      77  foo7 ()
      78  {
      79    __mmask16 mask1 = _mm512_cmpeq_epu32_mask (pi512[0], pi512[1]);
      80    __mmask16 mask2 = _mm512_cmpeq_epu32_mask (pi512[2], pi512[3]);
      81    return _kortestz_mask64_u8 (mask1, mask2);
      82  }
      83  
      84  unsigned char
      85  foo8 ()
      86  {
      87    __mmask8 mask1 = _mm_cmpeq_epu64_mask (pi128[0], pi128[1]);
      88    __mmask8 mask2 = _mm_cmpeq_epu64_mask (pi128[2], pi128[3]);
      89    return _kortestz_mask16_u8 (mask1, mask2);
      90  }
      91  
      92  unsigned char
      93  foo9 ()
      94  {
      95    __mmask8 mask1 = _mm_cmpeq_epu64_mask (pi128[0], pi128[1]);
      96    __mmask8 mask2 = _mm_cmpeq_epu64_mask (pi128[2], pi128[3]);
      97    return _kortestz_mask32_u8 (mask1, mask2);
      98  }
      99  
     100  unsigned char
     101  foo10 ()
     102  {
     103    __mmask8 mask1 = _mm_cmpeq_epu64_mask (pi128[0], pi128[1]);
     104    __mmask8 mask2 = _mm_cmpeq_epu64_mask (pi128[2], pi128[3]);
     105    return _kortestz_mask64_u8 (mask1, mask2);
     106  }
     107  
     108  unsigned char
     109  foo11 ()
     110  {
     111    __mmask8 mask1 = _mm256_cmpeq_epu64_mask (pi256[0], pi256[1]);
     112    __mmask8 mask2 = _mm256_cmpeq_epu64_mask (pi256[2], pi256[3]);
     113    return _kortestz_mask16_u8 (mask1, mask2);
     114  }
     115  
     116  unsigned char
     117  foo12 ()
     118  {
     119    __mmask8 mask1 = _mm256_cmpeq_epu64_mask (pi256[0], pi256[1]);
     120    __mmask8 mask2 = _mm256_cmpeq_epu64_mask (pi256[2], pi256[3]);
     121    return _kortestz_mask32_u8 (mask1, mask2);
     122  }
     123  
     124  unsigned char
     125  foo13 ()
     126  {
     127    __mmask8 mask1 = _mm256_cmpeq_epu64_mask (pi256[0], pi256[1]);
     128    __mmask8 mask2 = _mm256_cmpeq_epu64_mask (pi256[2], pi256[3]);
     129    return _kortestz_mask64_u8 (mask1, mask2);
     130  }
     131  
     132  unsigned char
     133  foo14 ()
     134  {
     135    __mmask8 mask1 = _mm512_cmpeq_epu64_mask (pi512[0], pi512[1]);
     136    __mmask8 mask2 = _mm512_cmpeq_epu64_mask (pi512[2], pi512[3]);
     137    return _kortestz_mask16_u8 (mask1, mask2);
     138  }
     139  
     140  unsigned char
     141  foo15 ()
     142  {
     143    __mmask8 mask1 = _mm512_cmpeq_epu64_mask (pi512[0], pi512[1]);
     144    __mmask8 mask2 = _mm512_cmpeq_epu64_mask (pi512[2], pi512[3]);
     145    return _kortestz_mask32_u8 (mask1, mask2);
     146  }
     147  
     148  unsigned char
     149  foo16 ()
     150  {
     151    __mmask8 mask1 = _mm512_cmpeq_epu64_mask (pi512[0], pi512[1]);
     152    __mmask8 mask2 = _mm512_cmpeq_epu64_mask (pi512[2], pi512[3]);
     153    return _kortestz_mask64_u8 (mask1, mask2);
     154  }
     155  
     156  unsigned char
     157  sign_foo ()
     158  {
     159    __mmask8 mask1 = _mm_cmpeq_epi32_mask (pi128[0], pi128[1]);
     160    __mmask8 mask2 = _mm_cmpeq_epi32_mask (pi128[2], pi128[3]);
     161    return _kortestz_mask16_u8 (mask1, mask2);
     162  }
     163  
     164  unsigned char
     165  sign_foo1 ()
     166  {
     167    __mmask8 mask1 = _mm_cmpeq_epi32_mask (pi128[0], pi128[1]);
     168    __mmask8 mask2 = _mm_cmpeq_epi32_mask (pi128[2], pi128[3]);
     169    return _kortestz_mask32_u8 (mask1, mask2);
     170  }
     171  
     172  unsigned char
     173  sign_foo2 ()
     174  {
     175    __mmask8 mask1 = _mm_cmpeq_epi32_mask (pi128[0], pi128[1]);
     176    __mmask8 mask2 = _mm_cmpeq_epi32_mask (pi128[2], pi128[3]);
     177    return _kortestz_mask64_u8 (mask1, mask2);
     178  }
     179  
     180  unsigned char
     181  sign_foo3 ()
     182  {
     183    __mmask8 mask1 = _mm256_cmpeq_epi32_mask (pi256[0], pi256[1]);
     184    __mmask8 mask2 = _mm256_cmpeq_epi32_mask (pi256[2], pi256[3]);
     185    return _kortestz_mask16_u8 (mask1, mask2);
     186  }
     187  
     188  unsigned char
     189  sign_foo4 ()
     190  {
     191    __mmask8 mask1 = _mm256_cmpeq_epi32_mask (pi256[0], pi256[1]);
     192    __mmask8 mask2 = _mm256_cmpeq_epi32_mask (pi256[2], pi256[3]);
     193    return _kortestz_mask32_u8 (mask1, mask2);
     194  }
     195  
     196  unsigned char
     197  sign_foo5 ()
     198  {
     199    __mmask8 mask1 = _mm256_cmpeq_epi32_mask (pi256[0], pi256[1]);
     200    __mmask8 mask2 = _mm256_cmpeq_epi32_mask (pi256[2], pi256[3]);
     201    return _kortestz_mask64_u8 (mask1, mask2);
     202  }
     203  
     204  unsigned char
     205  sign_foo6 ()
     206  {
     207    __mmask16 mask1 = _mm512_cmpeq_epi32_mask (pi512[0], pi512[1]);
     208    __mmask16 mask2 = _mm512_cmpeq_epi32_mask (pi512[2], pi512[3]);
     209    return _kortestz_mask32_u8 (mask1, mask2);
     210  }
     211  
     212  unsigned char
     213  sign_foo7 ()
     214  {
     215    __mmask16 mask1 = _mm512_cmpeq_epi32_mask (pi512[0], pi512[1]);
     216    __mmask16 mask2 = _mm512_cmpeq_epi32_mask (pi512[2], pi512[3]);
     217    return _kortestz_mask64_u8 (mask1, mask2);
     218  }
     219  
     220  unsigned char
     221  sign_foo8 ()
     222  {
     223    __mmask8 mask1 = _mm_cmpeq_epi64_mask (pi128[0], pi128[1]);
     224    __mmask8 mask2 = _mm_cmpeq_epi64_mask (pi128[2], pi128[3]);
     225    return _kortestz_mask16_u8 (mask1, mask2);
     226  }
     227  
     228  unsigned char
     229  sign_foo9 ()
     230  {
     231    __mmask8 mask1 = _mm_cmpeq_epi64_mask (pi128[0], pi128[1]);
     232    __mmask8 mask2 = _mm_cmpeq_epi64_mask (pi128[2], pi128[3]);
     233    return _kortestz_mask32_u8 (mask1, mask2);
     234  }
     235  
     236  unsigned char
     237  sign_foo10 ()
     238  {
     239    __mmask8 mask1 = _mm_cmpeq_epi64_mask (pi128[0], pi128[1]);
     240    __mmask8 mask2 = _mm_cmpeq_epi64_mask (pi128[2], pi128[3]);
     241    return _kortestz_mask64_u8 (mask1, mask2);
     242  }
     243  
     244  unsigned char
     245  sign_foo11 ()
     246  {
     247    __mmask8 mask1 = _mm256_cmpeq_epi64_mask (pi256[0], pi256[1]);
     248    __mmask8 mask2 = _mm256_cmpeq_epi64_mask (pi256[2], pi256[3]);
     249    return _kortestz_mask16_u8 (mask1, mask2);
     250  }
     251  
     252  unsigned char
     253  sign_foo12 ()
     254  {
     255    __mmask8 mask1 = _mm256_cmpeq_epi64_mask (pi256[0], pi256[1]);
     256    __mmask8 mask2 = _mm256_cmpeq_epi64_mask (pi256[2], pi256[3]);
     257    return _kortestz_mask32_u8 (mask1, mask2);
     258  }
     259  
     260  unsigned char
     261  sign_foo13 ()
     262  {
     263    __mmask8 mask1 = _mm256_cmpeq_epi64_mask (pi256[0], pi256[1]);
     264    __mmask8 mask2 = _mm256_cmpeq_epi64_mask (pi256[2], pi256[3]);
     265    return _kortestz_mask64_u8 (mask1, mask2);
     266  }
     267  
     268  unsigned char
     269  sign_foo14 ()
     270  {
     271    __mmask8 mask1 = _mm512_cmpeq_epi64_mask (pi512[0], pi512[1]);
     272    __mmask8 mask2 = _mm512_cmpeq_epi64_mask (pi512[2], pi512[3]);
     273    return _kortestz_mask16_u8 (mask1, mask2);
     274  }
     275  
     276  unsigned char
     277  sign_foo15 ()
     278  {
     279    __mmask8 mask1 = _mm512_cmpeq_epi64_mask (pi512[0], pi512[1]);
     280    __mmask8 mask2 = _mm512_cmpeq_epi64_mask (pi512[2], pi512[3]);
     281    return _kortestz_mask32_u8 (mask1, mask2);
     282  }
     283  
     284  unsigned char
     285  sign_foo16 ()
     286  {
     287    __mmask8 mask1 = _mm512_cmpeq_epi64_mask (pi512[0], pi512[1]);
     288    __mmask8 mask2 = _mm512_cmpeq_epi64_mask (pi512[2], pi512[3]);
     289    return _kortestz_mask64_u8 (mask1, mask2);
     290  }
     291  
     292  unsigned char
     293  float_foo ()
     294  {
     295    __mmask8 mask1 = _mm_cmp_ps_mask (ps128[0], ps128[1], 1);
     296    __mmask8 mask2 = _mm_cmp_ps_mask (ps128[2], ps128[3], 1);
     297    return _kortestz_mask16_u8 (mask1, mask2);
     298  }
     299  
     300  unsigned char
     301  float_foo1 ()
     302  {
     303    __mmask8 mask1 = _mm_cmp_ps_mask (ps128[0], ps128[1], 1);
     304    __mmask8 mask2 = _mm_cmp_ps_mask (ps128[2], ps128[3], 1);
     305    return _kortestz_mask32_u8 (mask1, mask2);
     306  }
     307  
     308  unsigned char
     309  float_foo2 ()
     310  {
     311    __mmask8 mask1 = _mm_cmp_ps_mask (ps128[0], ps128[1], 1);
     312    __mmask8 mask2 = _mm_cmp_ps_mask (ps128[2], ps128[3], 1);
     313    return _kortestz_mask64_u8 (mask1, mask2);
     314  }
     315  
     316  unsigned char
     317  float_foo3 ()
     318  {
     319    __mmask8 mask1 = _mm256_cmp_ps_mask (ps256[0], ps256[1], 1);
     320    __mmask8 mask2 = _mm256_cmp_ps_mask (ps256[2], ps256[3], 1);
     321    return _kortestz_mask16_u8 (mask1, mask2);
     322  }
     323  
     324  unsigned char
     325  float_foo4 ()
     326  {
     327    __mmask8 mask1 = _mm256_cmp_ps_mask (ps256[0], ps256[1], 1);
     328    __mmask8 mask2 = _mm256_cmp_ps_mask (ps256[2], ps256[3], 1);
     329    return _kortestz_mask32_u8 (mask1, mask2);
     330  }
     331  
     332  unsigned char
     333  float_foo5 ()
     334  {
     335    __mmask8 mask1 = _mm256_cmp_ps_mask (ps256[0], ps256[1], 1);
     336    __mmask8 mask2 = _mm256_cmp_ps_mask (ps256[2], ps256[3], 1);
     337    return _kortestz_mask64_u8 (mask1, mask2);
     338  }
     339  
     340  unsigned char
     341  float_foo6 ()
     342  {
     343    __mmask16 mask1 = _mm512_cmp_ps_mask (ps512[0], ps512[1], 1);
     344    __mmask16 mask2 = _mm512_cmp_ps_mask (ps512[2], ps512[3], 1);
     345    return _kortestz_mask32_u8 (mask1, mask2);
     346  }
     347  
     348  unsigned char
     349  float_foo7 ()
     350  {
     351    __mmask16 mask1 = _mm512_cmp_ps_mask (ps512[0], ps512[1], 1);
     352    __mmask16 mask2 = _mm512_cmp_ps_mask (ps512[2], ps512[3], 1);
     353    return _kortestz_mask64_u8 (mask1, mask2);
     354  }
     355  
     356  unsigned char
     357  float_foo8 ()
     358  {
     359    __mmask8 mask1 = _mm_cmp_pd_mask (pd128[0], pd128[1], 1);
     360    __mmask8 mask2 = _mm_cmp_pd_mask (pd128[2], pd128[3], 1);
     361    return _kortestz_mask16_u8 (mask1, mask2);
     362  }
     363  
     364  unsigned char
     365  float_foo9 ()
     366  {
     367    __mmask8 mask1 = _mm_cmp_pd_mask (pd128[0], pd128[1], 1);
     368    __mmask8 mask2 = _mm_cmp_pd_mask (pd128[2], pd128[3], 1);
     369    return _kortestz_mask32_u8 (mask1, mask2);
     370  }
     371  
     372  unsigned char
     373  float_foo10 ()
     374  {
     375    __mmask8 mask1 = _mm_cmp_pd_mask (pd128[0], pd128[1], 1);
     376    __mmask8 mask2 = _mm_cmp_pd_mask (pd128[2], pd128[3], 1);
     377    return _kortestz_mask64_u8 (mask1, mask2);
     378  }
     379  
     380  unsigned char
     381  float_foo11 ()
     382  {
     383    __mmask8 mask1 = _mm256_cmp_pd_mask (pd256[0], pd256[1], 1);
     384    __mmask8 mask2 = _mm256_cmp_pd_mask (pd256[2], pd256[3], 1);
     385    return _kortestz_mask16_u8 (mask1, mask2);
     386  }
     387  
     388  unsigned char
     389  float_foo12 ()
     390  {
     391    __mmask8 mask1 = _mm256_cmp_pd_mask (pd256[0], pd256[1], 1);
     392    __mmask8 mask2 = _mm256_cmp_pd_mask (pd256[2], pd256[3], 1);
     393    return _kortestz_mask32_u8 (mask1, mask2);
     394  }
     395  
     396  unsigned char
     397  float_foo13 ()
     398  {
     399    __mmask8 mask1 = _mm256_cmp_pd_mask (pd256[0], pd256[1], 1);
     400    __mmask8 mask2 = _mm256_cmp_pd_mask (pd256[2], pd256[3], 1);
     401    return _kortestz_mask64_u8 (mask1, mask2);
     402  }
     403  
     404  unsigned char
     405  float_foo14 ()
     406  {
     407    __mmask8 mask1 = _mm512_cmp_pd_mask (pd512[0], pd512[1], 1);
     408    __mmask8 mask2 = _mm512_cmp_pd_mask (pd512[2], pd512[3], 1);
     409    return _kortestz_mask16_u8 (mask1, mask2);
     410  }
     411  
     412  unsigned char
     413  float_foo15 ()
     414  {
     415    __mmask8 mask1 = _mm512_cmp_pd_mask (pd512[0], pd512[1], 1);
     416    __mmask8 mask2 = _mm512_cmp_pd_mask (pd512[2], pd512[3], 1);
     417    return _kortestz_mask32_u8 (mask1, mask2);
     418  }
     419  
     420  unsigned char
     421  float_foo16 ()
     422  {
     423    __mmask8 mask1 = _mm512_cmp_pd_mask (pd512[0], pd512[1], 1);
     424    __mmask8 mask2 = _mm512_cmp_pd_mask (pd512[2], pd512[3], 1);
     425    return _kortestz_mask64_u8 (mask1, mask2);
     426  }