1  /* { dg-do compile { target { powerpc*-*-* } } } */
       2  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
       3  /* { dg-require-effective-target powerpc_p9vector_ok } */
       4  /* { dg-options "-mdejagnu-cpu=power9 -O3 -funroll-loops" } */
       5  
       6  /* derived from 20021120-1.c, compiled for -mcpu=power9.  */
       7  
       8  extern void abort (void);
       9  extern void exit (int);
      10  
      11  volatile double gd[32];
      12  volatile float gf[32];
      13  
      14  void
      15  foo (int n)
      16  {
      17    double d00, d10, d20, d30, d01, d11, d21, d31, d02, d12, d22, d32, d03, d13,
      18      d23, d33, d04, d14, d24, d34, d05, d15, d25, d35, d06, d16, d26, d36, d07,
      19      d17, d27, d37;
      20    float f00, f10, f20, f30, f01, f11, f21, f31, f02, f12, f22, f32, f03, f13,
      21      f23, f33, f04, f14, f24, f34, f05, f15, f25, f35, f06, f16, f26, f36, f07,
      22      f17, f27, f37;
      23    volatile double *pd;
      24    volatile float *pf;
      25    int i;
      26  
      27    pd = gd;
      28    d00 = *(pd++), d10 = *(pd++), d20 = *(pd++), d30 = *(pd++), d01 =
      29      *(pd++), d11 = *(pd++), d21 = *(pd++), d31 = *(pd++), d02 = *(pd++), d12 =
      30      *(pd++), d22 = *(pd++), d32 = *(pd++), d03 = *(pd++), d13 = *(pd++), d23 =
      31      *(pd++), d33 = *(pd++), d04 = *(pd++), d14 = *(pd++), d24 = *(pd++), d34 =
      32      *(pd++), d05 = *(pd++), d15 = *(pd++), d25 = *(pd++), d35 = *(pd++), d06 =
      33      *(pd++), d16 = *(pd++), d26 = *(pd++), d36 = *(pd++), d07 = *(pd++), d17 =
      34      *(pd++), d27 = *(pd++), d37 = *(pd++);
      35    for (i = 0; i < n; i++)
      36      {
      37        pf = gf;
      38        f00 = *(pf++), f10 = *(pf++), f20 = *(pf++), f30 = *(pf++), f01 =
      39  	*(pf++), f11 = *(pf++), f21 = *(pf++), f31 = *(pf++), f02 =
      40  	*(pf++), f12 = *(pf++), f22 = *(pf++), f32 = *(pf++), f03 =
      41  	*(pf++), f13 = *(pf++), f23 = *(pf++), f33 = *(pf++), f04 =
      42  	*(pf++), f14 = *(pf++), f24 = *(pf++), f34 = *(pf++), f05 =
      43  	*(pf++), f15 = *(pf++), f25 = *(pf++), f35 = *(pf++), f06 =
      44  	*(pf++), f16 = *(pf++), f26 = *(pf++), f36 = *(pf++), f07 =
      45  	*(pf++), f17 = *(pf++), f27 = *(pf++), f37 = *(pf++);
      46        pd = gd;
      47        d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
      48  	*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
      49  	*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
      50  	*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
      51  	*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
      52  	*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
      53  	*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
      54  	*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
      55        pd = gd;
      56        d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
      57  	*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
      58  	*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
      59  	*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
      60  	*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
      61  	*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
      62  	*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
      63  	*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
      64        pd = gd;
      65        d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
      66  	*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
      67  	*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
      68  	*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
      69  	*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
      70  	*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
      71  	*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
      72  	*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
      73        pf = gf;
      74        *(pf++) = f00, *(pf++) = f10, *(pf++) = f20, *(pf++) = f30, *(pf++) =
      75  	f01, *(pf++) = f11, *(pf++) = f21, *(pf++) = f31, *(pf++) =
      76  	f02, *(pf++) = f12, *(pf++) = f22, *(pf++) = f32, *(pf++) =
      77  	f03, *(pf++) = f13, *(pf++) = f23, *(pf++) = f33, *(pf++) =
      78  	f04, *(pf++) = f14, *(pf++) = f24, *(pf++) = f34, *(pf++) =
      79  	f05, *(pf++) = f15, *(pf++) = f25, *(pf++) = f35, *(pf++) =
      80  	f06, *(pf++) = f16, *(pf++) = f26, *(pf++) = f36, *(pf++) =
      81  	f07, *(pf++) = f17, *(pf++) = f27, *(pf++) = f37;
      82      }
      83    pd = gd;
      84    *(pd++) = d00, *(pd++) = d10, *(pd++) = d20, *(pd++) = d30, *(pd++) =
      85      d01, *(pd++) = d11, *(pd++) = d21, *(pd++) = d31, *(pd++) = d02, *(pd++) =
      86      d12, *(pd++) = d22, *(pd++) = d32, *(pd++) = d03, *(pd++) = d13, *(pd++) =
      87      d23, *(pd++) = d33, *(pd++) = d04, *(pd++) = d14, *(pd++) = d24, *(pd++) =
      88      d34, *(pd++) = d05, *(pd++) = d15, *(pd++) = d25, *(pd++) = d35, *(pd++) =
      89      d06, *(pd++) = d16, *(pd++) = d26, *(pd++) = d36, *(pd++) = d07, *(pd++) =
      90      d17, *(pd++) = d27, *(pd++) = d37;
      91  }
      92  
      93  int
      94  main ()
      95  {
      96    int i;
      97  
      98    for (i = 0; i < 32; i++)
      99      gd[i] = i, gf[i] = i;
     100    foo (1);
     101    for (i = 0; i < 32; i++)
     102      if (gd[i] != i * 4 || gf[i] != i)
     103        abort ();
     104    exit (0);
     105  }
     106  
     107  /* { dg-final { scan-assembler-not "stxsd \[0-9\]+,\[0-9\]+,\[0-9\]"  } } */