Reverting merge from trunk
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / declare-simd-1.C
blobe9be161948e10812d438afc5371ff522fd382dd4
1 // Test parsing of #pragma omp declare simd
2 // { dg-do compile }
4 #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) \
5             linear (c : 4) simdlen (8) notinbranch
6 #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a \
7                                                                             : 4) simdlen (4) inbranch
8 int f1 (int a, int *b, int c);
10 #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
11 int f2 (int a, int *b, int c)
13   return a + *b + c;
16 #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
17 template <typename T>
18 T f3 (int a, int *b, T c);
20 template <>
21 int f3 (int, int *, int);
23 #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) notinbranch simdlen (4)
24 template <typename T>
25 int f4 (int a, int *b, T c)
27   return a + *b + c;
30 template <>
31 int f4 (int, int *, int);
33 template <typename T>
34 int f5 (int a, int *b, T c);
36 #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
37 template <>
38 int f5 (int a, int *b, int c);
40 template <int N>
41 int f6 (int a, int *b, int c);
43 #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) inbranch simdlen (4)
44 template <>
45 int f6<3> (int a, int *b, int c);
47 #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (long long)) linear (c : 4) simdlen (8)
48 __extension__
49 long long f7 (long long a, long long *b, long long c);
51 #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) notinbranch simdlen (8)
52 extern "C"
53 int f8 (int a, int *b, int c);
55 extern "C"
57   #pragma omp declare simd
58   int f9 (int a, int *b, int c);
61 namespace N1
63   namespace N2
64   {
65     #pragma omp declare simd simdlen (2) aligned (b : sizeof (long long) * 2)
66     __extension__ long long
67     f10 (long long *b)
68     {
69       return *b;
70     }
71   }
74 struct A
76   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
77   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
78   int f11 (int a, int *b, int c);
80   #pragma omp declare simd
81   template <int N>
82   int f12 (int a, int *b, int c);
84   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) notinbranch simdlen (8)
85   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4) inbranch
86   static int f13 (int a, int *b, int c);
88   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
89   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
90   int f14 (int a, int *b, int c) { return a + *b + c; }
92   #pragma omp declare simd
93   template <int N>
94   int f15 (int a, int *b, int c) { return a + *b + c; }
96   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
97   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
98   static int f16 (int a, int *b, int c) { return a + *b + c; }
101 template <>
102 int A::f12<2> (int, int *, int);
104 template <>
105 int A::f15<2> (int, int *, int);
107 template <typename T>
108 struct B
110   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8) notinbranch
111   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4) inbranch
112   int f17 (int a, int *b, int c);
114   #pragma omp declare simd
115   template <int N>
116   int f18 (int a, int *b, int c);
118   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
119   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
120   static int f19 (int a, int *b, int c);
122   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
123   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
124   int f20 (int a, int *b, int c) { return a + *b + c; }
126   #pragma omp declare simd
127   template <int N>
128   int f21 (int a, int *b, int c) { return a + *b + c; }
130   #pragma omp declare simd uniform (a) aligned (b : 8 * sizeof (int)) linear (c : 4) simdlen (8)
131   #pragma omp declare simd uniform (c) aligned (b : 4 * sizeof (int)) linear (a : 4) simdlen (4)
132   static int f22 (int a, int *b, int c) { return a + *b + c; }
134   template <int N>
135   int f23 (int, int *, int);
137   template <int N>
138   static int f24 (int, int *, int);
140   template <int N>
141   int f25 (int, int *, int);
143   template <int N>
144   static int f26 (int, int *, int);
147 B <int> b;
149 template <>
150 template <>
151 int B<int>::f18<0> (int, int *, int);
153 template <>
154 template <>
155 int B<int>::f21<9> (int, int *, int);
157 #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int)) uniform (a, c)
158 template <>
159 template <>
160 int B<int>::f23<7> (int a, int *b, int c);
162 #pragma omp declare simd simdlen (4) aligned (b : 8 * sizeof (int)) linear (a, c : 2)
163 template <>
164 template <>
165 int B<int>::f24<-1> (int a, int *b, int c);
167 #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int)) uniform (a, c)
168 template <>
169 template <>
170 int B<int>::f25<7> (int a, int *b, int c)
172   return a + *b + c;
175 #pragma omp declare simd simdlen (4) aligned (b : 8 * sizeof (int)) linear (a, c : 2)
176 template <>
177 template <>
178 int B<int>::f26<-1> (int a, int *b, int c)
180   return a + *b + c;
184 f27 (int x)
186   #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
187   extern int f28 (int a, int *b, int c);
188   {
189     x++;
190     #pragma omp declare simd simdlen (4) linear (c)
191     extern int f29 (int a, int *b, int c);
192   }
193   return x;
196 #pragma omp declare simd simdlen (16)
198 f30 (int x)
200   #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
201   extern int f31 (int a, int *b, int c);
202   return x;
205 template <int N>
206 struct C
208   #pragma omp declare simd simdlen (N) aligned (b : N * sizeof (int)) linear (c : N) notinbranch
209   int f32 (int a, int *b, int c);
212 C <2> c;
215 f33 (int x)
217   if (x)
218     #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
219     extern int f34 (int a, int *b, int c);
220   while (x < 10)
221     #pragma omp declare simd simdlen (8) aligned (b : 8 * sizeof (int))
222     extern int f35 (int a, int *b, int c);
223   return x;
226 #pragma omp declare simd simdlen (N)
227 template <int N>
228 int f36 (int);
230 struct D
232   int d;
233   #pragma omp declare simd simdlen (N) linear (a : sizeof (a) + sizeof (d) + sizeof (this) + sizeof (this->d))
234   template <int N>
235   int f37 (int a);
236   int e;
239 void
240 f38 (D &d)
242   d.f37 <12> (6);