[AArch64] Fix SVE testsuite failures for ILP32 (PR 83846)
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / var_stride_1.h
blob43b098ff41349bdbd06ef38b33d9e5ec2ff9aae8
1 extern void abort (void) __attribute__ ((noreturn));
3 #define MARGIN 6
5 void __attribute__ ((weak, optimize ("no-tree-vectorize")))
6 test (int n, int m, int offset)
8 int abs_n = (n < 0 ? -n : n);
9 int abs_m = (m < 0 ? -m : m);
10 int max_i = (abs_n > abs_m ? abs_n : abs_m);
11 int abs_offset = (offset < 0 ? -offset : offset);
12 int size = MARGIN * 2 + max_i * SIZE + abs_offset;
13 TYPE *array = (TYPE *) __builtin_alloca (size * sizeof (TYPE));
14 for (int i = 0; i < size; ++i)
15 array[i] = i;
16 int base_x = offset < 0 ? MARGIN - offset : MARGIN;
17 int base_y = offset < 0 ? MARGIN : MARGIN + offset;
18 int start_x = n < 0 ? base_x - n * (SIZE - 1) : base_x;
19 int start_y = m < 0 ? base_y - m * (SIZE - 1) : base_y;
20 f (&array[start_x], &array[start_y], n, m);
21 int j = 0;
22 int start = (n < 0 ? size - 1 : 0);
23 int end = (n < 0 ? -1 : size);
24 int inc = (n < 0 ? -1 : 1);
25 for (int i = start; i != end; i += inc)
27 if (j == SIZE || i != start_x + j * n)
29 if (array[i] != i)
30 abort ();
32 else if (n == 0)
34 TYPE sum = i;
35 for (; j < SIZE; j++)
37 int next_y = start_y + j * m;
38 if (n >= 0 ? next_y < i : next_y > i)
39 sum += array[next_y];
40 else if (next_y == i)
41 sum += sum;
42 else
43 sum += next_y;
45 if (array[i] != sum)
46 abort ();
48 else
50 int next_y = start_y + j * m;
51 TYPE base = i;
52 if (n >= 0 ? next_y < i : next_y > i)
53 base += array[next_y];
54 else
55 base += next_y;
56 if (array[i] != base)
57 abort ();
58 j += 1;