111
|
1 /* Test invalid calls to routines. */
|
145
|
2 /* See also variant 'routine-3-extern.c', moving the callees 'extern'. */
|
111
|
3
|
|
4 #pragma acc routine gang
|
|
5 int
|
|
6 gang () /* { dg-message "declared here" "3" } */
|
|
7 {
|
|
8 #pragma acc loop gang worker vector
|
|
9 for (int i = 0; i < 10; i++)
|
|
10 {
|
|
11 }
|
|
12
|
|
13 return 1;
|
|
14 }
|
|
15
|
|
16 #pragma acc routine worker
|
|
17 int
|
|
18 worker () /* { dg-message "declared here" "2" } */
|
|
19 {
|
|
20 #pragma acc loop worker vector
|
|
21 for (int i = 0; i < 10; i++)
|
|
22 {
|
|
23 }
|
|
24
|
|
25 return 1;
|
|
26 }
|
|
27
|
|
28 #pragma acc routine vector
|
|
29 int
|
|
30 vector () /* { dg-message "declared here" } */
|
|
31 {
|
|
32 #pragma acc loop vector
|
|
33 for (int i = 0; i < 10; i++)
|
|
34 {
|
|
35 }
|
|
36
|
|
37 return 1;
|
|
38 }
|
|
39
|
|
40 #pragma acc routine seq
|
|
41 int
|
|
42 seq ()
|
|
43 {
|
|
44 return 1;
|
|
45 }
|
|
46
|
|
47 int
|
|
48 main ()
|
|
49 {
|
|
50 int red = 0;
|
|
51 #pragma acc parallel copy (red)
|
|
52 {
|
|
53 /* Independent/seq loop tests. */
|
|
54 #pragma acc loop reduction (+:red) // { dg-warning "insufficient partitioning" }
|
|
55 for (int i = 0; i < 10; i++)
|
|
56 red += gang ();
|
|
57
|
|
58 #pragma acc loop reduction (+:red)
|
|
59 for (int i = 0; i < 10; i++)
|
|
60 red += worker ();
|
|
61
|
|
62 #pragma acc loop reduction (+:red)
|
|
63 for (int i = 0; i < 10; i++)
|
|
64 red += vector ();
|
|
65
|
|
66 /* Gang routine tests. */
|
|
67 #pragma acc loop gang reduction (+:red) /* { dg-message "containing loop" } */
|
|
68 for (int i = 0; i < 10; i++)
|
|
69 red += gang (); // { dg-error "routine call uses same" }
|
|
70
|
|
71 #pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */
|
|
72 for (int i = 0; i < 10; i++)
|
|
73 red += gang (); // { dg-error "routine call uses same" }
|
|
74
|
|
75 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
|
|
76 for (int i = 0; i < 10; i++)
|
|
77 red += gang (); // { dg-error "routine call uses same" }
|
|
78
|
|
79 /* Worker routine tests. */
|
|
80 #pragma acc loop gang reduction (+:red)
|
|
81 for (int i = 0; i < 10; i++)
|
|
82 red += worker ();
|
|
83
|
|
84 #pragma acc loop worker reduction (+:red) /* { dg-message "containing loop" } */
|
|
85 for (int i = 0; i < 10; i++)
|
|
86 red += worker (); // { dg-error "routine call uses same" }
|
|
87
|
|
88 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
|
|
89 for (int i = 0; i < 10; i++)
|
|
90 red += worker (); // { dg-error "routine call uses same" }
|
|
91
|
|
92 /* Vector routine tests. */
|
|
93 #pragma acc loop gang reduction (+:red)
|
|
94 for (int i = 0; i < 10; i++)
|
|
95 red += vector ();
|
|
96
|
|
97 #pragma acc loop worker reduction (+:red)
|
|
98 for (int i = 0; i < 10; i++)
|
|
99 red += vector ();
|
|
100
|
|
101 #pragma acc loop vector reduction (+:red) /* { dg-message "containing loop" } */
|
|
102 for (int i = 0; i < 10; i++)
|
|
103 red += vector (); // { dg-error "routine call uses same" }
|
|
104
|
|
105 /* Seq routine tests. */
|
|
106 #pragma acc loop gang reduction (+:red)
|
|
107 for (int i = 0; i < 10; i++)
|
|
108 red += seq ();
|
|
109
|
|
110 #pragma acc loop worker reduction (+:red)
|
|
111 for (int i = 0; i < 10; i++)
|
|
112 red += seq ();
|
|
113
|
|
114 #pragma acc loop vector reduction (+:red)
|
|
115 for (int i = 0; i < 10; i++)
|
|
116 red += seq ();
|
|
117 }
|
|
118
|
|
119 return 0;
|
|
120 }
|