(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512dq-pr85918-2.c
       1  /* PR target/85918 */
       2  /* { dg-do run } */
       3  /* { dg-require-effective-target avx512dq } */
       4  /* { dg-require-effective-target avx512vl } */
       5  /* { dg-options "-O3 -mavx512dq -mavx512vl -mprefer-vector-width=512 -fno-vect-cost-model" } */
       6  
       7  #define AVX512DQ
       8  #define AVX512VL
       9  #define DO_TEST avx512dqvl_test
      10  
      11  static void avx512dqvl_test (void);
      12  
      13  #include "avx512-check.h"
      14  
      15  #define N 16
      16  
      17  long long ll[N] __attribute__((aligned (64)));
      18  unsigned long long ull[N] __attribute__((aligned (64)));
      19  float f[N] __attribute__((aligned (64)));
      20  double d[N] __attribute__((aligned (64)));
      21  
      22  __attribute__((noipa)) void
      23  ll2d1 (void)
      24  {
      25    int i;
      26  
      27    for (i = 0; i < 4; i++)
      28      d[i] = ll[i];
      29  }
      30  
      31  __attribute__((noipa)) void
      32  ull2d1 (void)
      33  {
      34    int i;
      35  
      36    for (i = 0; i < 4; i++)
      37      d[i] = ull[i];
      38  }
      39  
      40  __attribute__((noipa)) void
      41  d2ll1 (void)
      42  {
      43    int i;
      44  
      45    for (i = 0; i < 4; i++)
      46      ll[i] = d[i];
      47  }
      48  
      49  __attribute__((noipa)) void
      50  d2ull1 (void)
      51  {
      52    int i;
      53  
      54    for (i = 0; i < 4; i++)
      55      ull[i] = d[i];
      56  }
      57  
      58  __attribute__((noipa)) void
      59  ll2f1 (void)
      60  {
      61    int i;
      62  
      63    for (i = 0; i < 4; i++)
      64      f[i] = ll[i];
      65  }
      66  
      67  __attribute__((noipa)) void
      68  ull2f1 (void)
      69  {
      70    int i;
      71  
      72    for (i = 0; i < 4; i++)
      73      f[i] = ull[i];
      74  }
      75  
      76  __attribute__((noipa)) void
      77  f2ll1 (void)
      78  {
      79    int i;
      80  
      81    for (i = 0; i < 4; i++)
      82      ll[i] = f[i];
      83  }
      84  
      85  __attribute__((noipa)) void
      86  f2ull1 (void)
      87  {
      88    int i;
      89  
      90    for (i = 0; i < 4; i++)
      91      ull[i] = f[i];
      92  }
      93  
      94  __attribute__((noipa)) void
      95  ll2d2 (void)
      96  {
      97    int i;
      98  
      99    for (i = 0; i < 8; i++)
     100      d[i] = ll[i];
     101  }
     102  
     103  __attribute__((noipa)) void
     104  ull2d2 (void)
     105  {
     106    int i;
     107  
     108    for (i = 0; i < 8; i++)
     109      d[i] = ull[i];
     110  }
     111  
     112  __attribute__((noipa)) void
     113  d2ll2 (void)
     114  {
     115    int i;
     116  
     117    for (i = 0; i < 8; i++)
     118      ll[i] = d[i];
     119  }
     120  
     121  __attribute__((noipa)) void
     122  d2ull2 (void)
     123  {
     124    int i;
     125  
     126    for (i = 0; i < 8; i++)
     127      ull[i] = d[i];
     128  }
     129  
     130  __attribute__((noipa)) void
     131  ll2f2 (void)
     132  {
     133    int i;
     134  
     135    for (i = 0; i < 8; i++)
     136      f[i] = ll[i];
     137  }
     138  
     139  __attribute__((noipa)) void
     140  ull2f2 (void)
     141  {
     142    int i;
     143  
     144    for (i = 0; i < 8; i++)
     145      f[i] = ull[i];
     146  }
     147  
     148  __attribute__((noipa)) void
     149  f2ll2 (void)
     150  {
     151    int i;
     152  
     153    for (i = 0; i < 8; i++)
     154      ll[i] = f[i];
     155  }
     156  
     157  __attribute__((noipa)) void
     158  f2ull2 (void)
     159  {
     160    int i;
     161  
     162    for (i = 0; i < 8; i++)
     163      ull[i] = f[i];
     164  }
     165  
     166  __attribute__((noipa)) void
     167  ll2d3 (void)
     168  {
     169    int i;
     170  
     171    for (i = 0; i < 16; i++)
     172      d[i] = ll[i];
     173  }
     174  
     175  __attribute__((noipa)) void
     176  ull2d3 (void)
     177  {
     178    int i;
     179  
     180    for (i = 0; i < 16; i++)
     181      d[i] = ull[i];
     182  }
     183  
     184  __attribute__((noipa)) void
     185  d2ll3 (void)
     186  {
     187    int i;
     188  
     189    for (i = 0; i < 16; i++)
     190      ll[i] = d[i];
     191  }
     192  
     193  __attribute__((noipa)) void
     194  d2ull3 (void)
     195  {
     196    int i;
     197  
     198    for (i = 0; i < 16; i++)
     199      ull[i] = d[i];
     200  }
     201  
     202  __attribute__((noipa)) void
     203  ll2f3 (void)
     204  {
     205    int i;
     206  
     207    for (i = 0; i < 16; i++)
     208      f[i] = ll[i];
     209  }
     210  
     211  __attribute__((noipa)) void
     212  ull2f3 (void)
     213  {
     214    int i;
     215  
     216    for (i = 0; i < 16; i++)
     217      f[i] = ull[i];
     218  }
     219  
     220  __attribute__((noipa)) void
     221  f2ll3 (void)
     222  {
     223    int i;
     224  
     225    for (i = 0; i < 16; i++)
     226      ll[i] = f[i];
     227  }
     228  
     229  __attribute__((noipa)) void
     230  f2ull3 (void)
     231  {
     232    int i;
     233  
     234    for (i = 0; i < 16; i++)
     235      ull[i] = f[i];
     236  }
     237  
     238  unsigned long long ullt[] = {
     239    13835058055282163712ULL, 9223653511831486464ULL, 9218868437227405312ULL,
     240    1ULL, 9305281255077576704ULL, 1191936ULL, 18446462598732840960ULL, 0ULL,
     241    9223372036854775808ULL, 4611686018427387904ULL, 2305843009213693952ULL,
     242    9ULL, 9223653511831486464ULL, 0ULL, 65536ULL, 131071ULL
     243  };
     244  float uft[] = {
     245    13835058055282163712.0f, 9223653511831486464.0f, 9218868437227405312.0f,
     246    1.0f, 9305281255077576704.0f, 1191936.0f, 18446462598732840960.0f, 0.0f,
     247    9223372036854775808.0f, 4611686018427387904.0f, 2305843009213693952.0f,
     248    9.0f, 9223653511831486464.0f, 0.0f, 65536.0f, 131071.0f
     249  };
     250  long long llt[] = {
     251    9223090561878065152LL, -9223372036854775807LL - 1, -9223090561878065152LL,
     252    -4LL, -8074672656898588672LL, 8074672656898588672LL, 29LL, -15LL,
     253    7574773098260463616LL, -7579276697887834112LL, -8615667562136469504LL,
     254    148LL, -255LL, 9151595917793558528LL, -9218868437227405312LL, 9LL
     255  };
     256  float ft[] = {
     257    9223090561878065152.0f, -9223372036854775808.0f, -9223090561878065152.0f,
     258    -4.0f, -8074672656898588672.0f, 8074672656898588672.0f, 29.0f, -15.0f,
     259    7574773098260463616.0f, -7579276697887834112.0f, -8615667562136469504.0f,
     260    148.0f, -255.0f, 9151595917793558528.0f, -9218868437227405312.0f, 9.0f
     261  };
     262  
     263  static void
     264  avx512dqvl_test (void)
     265  {
     266    int i;
     267    for (i = 0; i < 4; i++)
     268      {
     269        ll[i] = llt[i];
     270        ull[i] = ullt[i];
     271      }
     272    ll2d1 ();
     273    for (i = 0; i < 4; i++)
     274      if (d[i] != ft[i])
     275        abort ();
     276    ull2d1 ();
     277    for (i = 0; i < 4; i++)
     278      if (d[i] != uft[i])
     279        abort ();
     280      else
     281        d[i] = ft[i + 4];
     282    d2ll1 ();
     283    for (i = 0; i < 4; i++)
     284      if (ll[i] != llt[i + 4])
     285        abort ();
     286      else
     287        d[i] = uft[i + 4];
     288    d2ull1 ();
     289    for (i = 0; i < 4; i++)
     290      if (ull[i] != ullt[i + 4])
     291        abort ();
     292      else
     293        {
     294          ll[i] = llt[i + 8];
     295  	ull[i] = ullt[i + 8];
     296        }
     297    ll2f1 ();
     298    for (i = 0; i < 4; i++)
     299      if (f[i] != ft[i + 8])
     300        abort ();
     301    ull2f1 ();
     302    for (i = 0; i < 4; i++)
     303      if (f[i] != uft[i + 8])
     304        abort ();
     305      else
     306        f[i] = ft[i + 12];
     307    f2ll1 ();
     308    for (i = 0; i < 4; i++)
     309      if (ll[i] != llt[i + 12])
     310        abort ();
     311      else
     312        f[i] = uft[i + 12];
     313    f2ull1 ();
     314    for (i = 0; i < 4; i++)
     315      if (ull[i] != ullt[i + 12])
     316        abort ();
     317    for (i = 0; i < 8; i++)
     318      {
     319        ll[i] = llt[i];
     320        ull[i] = ullt[i];
     321      }
     322    ll2d2 ();
     323    for (i = 0; i < 8; i++)
     324      if (d[i] != ft[i])
     325        abort ();
     326    ull2d2 ();
     327    for (i = 0; i < 8; i++)
     328      if (d[i] != uft[i])
     329        abort ();
     330      else
     331        {
     332          d[i] = ft[i];
     333          ll[i] = 1234567LL;
     334          ull[i] = 7654321ULL;
     335        }
     336    d2ll2 ();
     337    for (i = 0; i < 8; i++)
     338      if (ll[i] != llt[i])
     339        abort ();
     340      else
     341        d[i] = uft[i];
     342    d2ull2 ();
     343    for (i = 0; i < 8; i++)
     344      if (ull[i] != ullt[i])
     345        abort ();
     346      else
     347        {
     348          ll[i] = llt[i + 8];
     349  	ull[i] = ullt[i + 8];
     350        }
     351    ll2f2 ();
     352    for (i = 0; i < 8; i++)
     353      if (f[i] != ft[i + 8])
     354        abort ();
     355    ull2f2 ();
     356    for (i = 0; i < 8; i++)
     357      if (f[i] != uft[i + 8])
     358        abort ();
     359      else
     360        {
     361  	f[i] = ft[i + 8];
     362  	ll[i] = 1234567LL;
     363  	ull[i] = 7654321ULL;
     364        }
     365    f2ll2 ();
     366    for (i = 0; i < 8; i++)
     367      if (ll[i] != llt[i + 8])
     368        abort ();
     369      else
     370        f[i] = uft[i + 8];
     371    f2ull2 ();
     372    for (i = 0; i < 8; i++)
     373      if (ull[i] != ullt[i + 8])
     374        abort ();
     375    for (i = 0; i < 16; i++)
     376      {
     377        ll[i] = llt[i];
     378        ull[i] = ullt[i];
     379      }
     380    ll2d3 ();
     381    for (i = 0; i < 16; i++)
     382      if (d[i] != ft[i])
     383        abort ();
     384    ull2d3 ();
     385    for (i = 0; i < 16; i++)
     386      if (d[i] != uft[i])
     387        abort ();
     388      else
     389        {
     390          d[i] = ft[i];
     391          ll[i] = 1234567LL;
     392          ull[i] = 7654321ULL;
     393        }
     394    d2ll3 ();
     395    for (i = 0; i < 16; i++)
     396      if (ll[i] != llt[i])
     397        abort ();
     398      else
     399        d[i] = uft[i];
     400    d2ull3 ();
     401    for (i = 0; i < 16; i++)
     402      if (ull[i] != ullt[i])
     403        abort ();
     404      else
     405        {
     406          ll[i] = llt[i];
     407  	ull[i] = ullt[i];
     408  	f[i] = 3.0f;
     409  	d[i] = 4.0;
     410        }
     411    ll2f3 ();
     412    for (i = 0; i < 16; i++)
     413      if (f[i] != ft[i])
     414        abort ();
     415    ull2f3 ();
     416    for (i = 0; i < 16; i++)
     417      if (f[i] != uft[i])
     418        abort ();
     419      else
     420        {
     421  	f[i] = ft[i];
     422  	ll[i] = 1234567LL;
     423  	ull[i] = 7654321ULL;
     424        }
     425    f2ll3 ();
     426    for (i = 0; i < 16; i++)
     427      if (ll[i] != llt[i])
     428        abort ();
     429      else
     430        f[i] = uft[i];
     431    f2ull3 ();
     432    for (i = 0; i < 16; i++)
     433      if (ull[i] != ullt[i])
     434        abort ();
     435  }