1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O2 -ftree-vectorize --save-temps" } */
       3  
       4  #include "struct_vect_7.c"
       5  
       6  #define N 93
       7  
       8  TYPE a[N], b[N], c[N], d[N], e[N * 4];
       9  
      10  void __attribute__ ((noinline, noclone))
      11  init_array (TYPE *array, int n, TYPE base, TYPE step)
      12  {
      13    for (int i = 0; i < n; ++i)
      14      array[i] = base + step * i;
      15  }
      16  
      17  void __attribute__ ((noinline, noclone))
      18  check_array (TYPE *array, int n, TYPE base, TYPE step)
      19  {
      20    for (int i = 0; i < n; ++i)
      21      if (array[i] != (TYPE) (base + step * i))
      22        __builtin_abort ();
      23  }
      24  
      25  int __attribute__ ((optimize (1)))
      26  main (void)
      27  {
      28    init_array (e, 2 * N, 11, 5);
      29    f2 (a, b, e, N);
      30    check_array (a, N, 11, 10);
      31    check_array (b, N, 16, 10);
      32  
      33    init_array (e, 3 * N, 7, 6);
      34    f3 (a, b, c, e, N);
      35    check_array (a, N, 7, 18);
      36    check_array (b, N, 13, 18);
      37    check_array (c, N, 19, 18);
      38  
      39    init_array (e, 4 * N, 4, 11);
      40    f4 (a, b, c, d, e, N);
      41    check_array (a, N, 4, 44);
      42    check_array (b, N, 15, 44);
      43    check_array (c, N, 26, 44);
      44    check_array (d, N, 37, 44);
      45  
      46    init_array (a, N, 2, 8);
      47    init_array (b, N, 6, 8);
      48    g2 (a, b, e, N);
      49    check_array (e, 2 * N, 2, 4);
      50  
      51    init_array (a, N, 4, 15);
      52    init_array (b, N, 9, 15);
      53    init_array (c, N, 14, 15);
      54    g3 (a, b, c, e, N);
      55    check_array (e, 3 * N, 4, 5);
      56  
      57    init_array (a, N, 14, 36);
      58    init_array (b, N, 23, 36);
      59    init_array (c, N, 32, 36);
      60    init_array (d, N, 41, 36);
      61    g4 (a, b, c, d, e, N);
      62    check_array (e, 4 * N, 14, 9);
      63  
      64    return 0;
      65  }