annotate gcc/testsuite/g++.target/aarch64/sve/catch_3.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* { dg-do run { target aarch64_sve_hw } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 /* { dg-options "-O3 -fopenmp-simd -fno-omit-frame-pointer" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 /* Invoke X (P##n) for n in [0, 7]. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 #define REPEAT8(X, P) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 X (P##0) X (P##1) X (P##2) X (P##3) X (P##4) X (P##5) X (P##6) X (P##7)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 /* Invoke X (n) for all octal n in [0, 39]. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define REPEAT40(X) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 REPEAT8 (X, 0) REPEAT8 (X, 1) REPEAT8 (X, 2) REPEAT8 (X, 3) REPEAT8 (X, 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 volatile int testi, sink;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 /* Take 2 stack arguments and throw to f3. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 void __attribute__ ((weak))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 f1 (int x[40][100], int *y, int z1, int z2, int z3, int z4,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 int z5, int z6, int z7, int z8)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 /* A wild write to x and y. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 sink = z1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 sink = z2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 sink = z3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 sink = z4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 sink = z5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 sink = z6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 sink = z7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 sink = z8;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 asm volatile ("" ::: "memory");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 if (y[testi] == x[testi][testi])
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 throw 100;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 /* Expect vector work to be done, with spilling of vector registers. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 void __attribute__ ((weak))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 f2 (int x[40][100], int *y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 /* Try to force some spilling. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 #define DECLARE(N) int y##N = y[N];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 REPEAT40 (DECLARE);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 for (int j = 0; j < 20; ++j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 f1 (x, y, 1, 2, 3, 4, 5, 6, 7, 8);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 #pragma omp simd
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 for (int i = 0; i < 100; ++i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 #define INC(N) x[N][i] += y##N;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 REPEAT40 (INC);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 /* Catch an exception thrown from f1, via f2. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 void __attribute__ ((weak))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 f3 (int x[40][100], int *y, int *z)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 volatile int extra = 111;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 try
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 f2 (x, y);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 catch (int val)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 *z = val + extra;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 static int x[40][100];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 static int y[40];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 static int z;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 main (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 f3 (x, y, &z);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 if (z != 211)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 }