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