(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vshift-5.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O3" } */
       3  
       4  extern void abort (void);
       5  long long a[16];
       6  
       7  __attribute__((noinline, noclone)) void
       8  f1 (void)
       9  {
      10    long long a0, a1, a2, a3;
      11    a0 = a[0];
      12    a1 = a[1];
      13    a2 = a[2];
      14    a3 = a[3];
      15    a0 = a0 << 2;
      16    a1 = a1 << 3;
      17    a2 = a2 << 4;
      18    a3 = a3 << 5;
      19    a[0] = a0;
      20    a[1] = a1;
      21    a[2] = a2;
      22    a[3] = a3;
      23  }
      24  
      25  __attribute__((noinline, noclone)) void
      26  f2 (void)
      27  {
      28    long long a0, a1, a2, a3;
      29    a0 = a[0];
      30    a1 = a[1];
      31    a2 = a[2];
      32    a3 = a[3];
      33    a0 = a0 << 2;
      34    a1 = a1 << 2;
      35    a2 = a2 << 2;
      36    a3 = a3 << 2;
      37    a[0] = a0;
      38    a[1] = a1;
      39    a[2] = a2;
      40    a[3] = a3;
      41  }
      42  
      43  __attribute__((noinline, noclone)) void
      44  f2a (int x)
      45  {
      46    long long a0, a1, a2, a3;
      47    a0 = a[0];
      48    a1 = a[1];
      49    a2 = a[2];
      50    a3 = a[3];
      51    a0 = a0 << x;
      52    a1 = a1 << 2;
      53    a2 = a2 << 2;
      54    a3 = a3 << 2;
      55    a[0] = a0;
      56    a[1] = a1;
      57    a[2] = a2;
      58    a[3] = a3;
      59  }
      60  
      61  __attribute__((noinline, noclone)) void
      62  f2b (int x)
      63  {
      64    long long a0, a1, a2, a3;
      65    a0 = a[0];
      66    a1 = a[1];
      67    a2 = a[2];
      68    a3 = a[3];
      69    a0 = a0 << 2;
      70    a1 = a1 << 2;
      71    a2 = a2 << x;
      72    a3 = a3 << 2;
      73    a[0] = a0;
      74    a[1] = a1;
      75    a[2] = a2;
      76    a[3] = a3;
      77  }
      78  
      79  __attribute__((noinline, noclone)) void
      80  f3 (int x)
      81  {
      82    long long a0, a1, a2, a3;
      83    a0 = a[0];
      84    a1 = a[1];
      85    a2 = a[2];
      86    a3 = a[3];
      87    a0 = a0 << x;
      88    a1 = a1 << x;
      89    a2 = a2 << x;
      90    a3 = a3 << x;
      91    a[0] = a0;
      92    a[1] = a1;
      93    a[2] = a2;
      94    a[3] = a3;
      95  }
      96  
      97  int
      98  main ()
      99  {
     100    a[0] = 4LL;
     101    a[1] = 3LL;
     102    a[2] = 2LL;
     103    a[3] = 1LL;
     104    f1 ();
     105    if (a[0] != (4LL << 2) || a[1] != (3LL << 3)
     106        || a[2] != (2LL << 4) || a[3] != (1LL << 5))
     107      abort ();
     108    f2 ();
     109    if (a[0] != (4LL << 4) || a[1] != (3LL << 5)
     110        || a[2] != (2LL << 6) || a[3] != (1LL << 7))
     111      abort ();
     112    f3 (3);
     113    if (a[0] != (4LL << 7) || a[1] != (3LL << 8)
     114        || a[2] != (2LL << 9) || a[3] != (1LL << 10))
     115      abort ();
     116    f2a (3);
     117    if (a[0] != (4LL << 10) || a[1] != (3LL << 10)
     118        || a[2] != (2LL << 11) || a[3] != (1LL << 12))
     119      abort ();
     120    f2b (3);
     121    if (a[0] != (4LL << 12) || a[1] != (3LL << 12)
     122        || a[2] != (2LL << 14) || a[3] != (1LL << 14))
     123      abort ();
     124    return 0;
     125  }