3
2010-04-26 Jakub Jelinek <jakub@redhat.com>
6
* c-omp.c (c_finish_omp_for): Handle also EQ_EXPR.
10
2010-04-26 Jakub Jelinek <jakub@redhat.com>
13
* testsuite/libgomp.c/pr43893.c: New test.
14
* testsuite/libgomp.c++/pr43893.C: New test.
17
Index: libgomp/testsuite/libgomp.c++/pr43893.C
18
===================================================================
19
--- a/src/libgomp/testsuite/libgomp.c++/pr43893.C (revision 0)
20
+++ b/src/libgomp/testsuite/libgomp.c++/pr43893.C (revision 158746)
25
+extern "C" void abort ();
27
+template <typename T, T M, T N>
34
+#pragma omp parallel for reduction(+:c)
35
+ for (i = M; i < N; i++)
41
+template <typename T, T M, T N>
48
+#pragma omp parallel for reduction(+:c)
49
+ for (i = M; i <= N; i++)
55
+template <typename T, T M, T N>
62
+#pragma omp parallel for reduction(+:c)
63
+ for (i = M; i > N; i--)
69
+template <typename T, T M, T N>
76
+#pragma omp parallel for reduction(+:c)
77
+ for (i = M; i >= N; i--)
90
+#pragma omp parallel for reduction(+:c)
91
+ for (i = 0; i < 1; i++)
95
+ f1 <unsigned int, 0, 1> ();
97
+#pragma omp parallel for reduction(+:c)
98
+ for (i = 0; i <= 0; i++)
102
+ f2 <unsigned int, 0, 0> ();
104
+#pragma omp parallel for reduction(+:c)
105
+ for (j = - __INT_MAX__ - 1; j < - __INT_MAX__; j++)
109
+ f1 <int, (- __INT_MAX__ - 1), (- __INT_MAX__)> ();
111
+#pragma omp parallel for reduction(+:c)
112
+ for (j = - __INT_MAX__ - 1; j <= - __INT_MAX__ - 1; j++)
116
+ f2 <int, (- __INT_MAX__ - 1), (- __INT_MAX__ - 1)> ();
118
+#pragma omp parallel for reduction(+:c)
119
+ for (i = 2U * __INT_MAX__ + 1; i > 2U * __INT_MAX__; i--)
123
+ f3 <unsigned int, (2U * __INT_MAX__ + 1), (2U * __INT_MAX__)> ();
125
+#pragma omp parallel for reduction(+:c)
126
+ for (i = 2U * __INT_MAX__ + 1; i >= 2U * __INT_MAX__ + 1; i--)
130
+ f4 <unsigned int, (2U * __INT_MAX__ + 1), (2U * __INT_MAX__ + 1)> ();
132
+#pragma omp parallel for reduction(+:c)
133
+ for (j = __INT_MAX__; j > __INT_MAX__ - 1; j--)
137
+ f3 <int, __INT_MAX__, (__INT_MAX__ - 1)> ();
139
+#pragma omp parallel for reduction(+:c)
140
+ for (j = __INT_MAX__; j >= __INT_MAX__; j--)
144
+ f4 <int, __INT_MAX__, __INT_MAX__> ();
147
Index: libgomp/testsuite/libgomp.c/pr43893.c
148
===================================================================
149
--- a/src/libgomp/testsuite/libgomp.c/pr43893.c (revision 0)
150
+++ b/src/libgomp/testsuite/libgomp.c/pr43893.c (revision 158746)
155
+extern void abort (void);
164
+#pragma omp parallel for reduction(+:c)
165
+ for (i = 0; i < 1; i++)
170
+#pragma omp parallel for reduction(+:c)
171
+ for (i = 0; i <= 0; i++)
176
+#pragma omp parallel for reduction(+:c)
177
+ for (j = - __INT_MAX__ - 1; j < - __INT_MAX__; j++)
182
+#pragma omp parallel for reduction(+:c)
183
+ for (j = - __INT_MAX__ - 1; j <= - __INT_MAX__ - 1; j++)
188
+#pragma omp parallel for reduction(+:c)
189
+ for (i = 2U * __INT_MAX__ + 1; i > 2U * __INT_MAX__; i--)
194
+#pragma omp parallel for reduction(+:c)
195
+ for (i = 2U * __INT_MAX__ + 1; i >= 2U * __INT_MAX__ + 1; i--)
200
+#pragma omp parallel for reduction(+:c)
201
+ for (j = __INT_MAX__; j > __INT_MAX__ - 1; j--)
206
+#pragma omp parallel for reduction(+:c)
207
+ for (j = __INT_MAX__; j >= __INT_MAX__; j--)
214
===================================================================
215
--- a/src/gcc/c-omp.c (revision 158745)
216
+++ b/src/gcc/c-omp.c (revision 158746)
218
/* This file contains routines to construct GNU OpenMP constructs,
219
called from parsing in the C and C++ front ends.
221
- Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
222
+ Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
223
Contributed by Richard Henderson <rth@redhat.com>,
224
Diego Novillo <dnovillo@redhat.com>.
227
|| TREE_CODE (cond) == LE_EXPR
228
|| TREE_CODE (cond) == GT_EXPR
229
|| TREE_CODE (cond) == GE_EXPR
230
- || TREE_CODE (cond) == NE_EXPR)
231
+ || TREE_CODE (cond) == NE_EXPR
232
+ || TREE_CODE (cond) == EQ_EXPR)
234
tree op0 = TREE_OPERAND (cond, 0);
235
tree op1 = TREE_OPERAND (cond, 1);
236
@@ -346,18 +347,21 @@
240
- if (TREE_CODE (cond) == NE_EXPR)
241
+ if (TREE_CODE (cond) == NE_EXPR
242
+ || TREE_CODE (cond) == EQ_EXPR)
244
if (!INTEGRAL_TYPE_P (TREE_TYPE (decl)))
246
else if (operand_equal_p (TREE_OPERAND (cond, 1),
247
TYPE_MIN_VALUE (TREE_TYPE (decl)),
249
- TREE_SET_CODE (cond, GT_EXPR);
250
+ TREE_SET_CODE (cond, TREE_CODE (cond) == NE_EXPR
251
+ ? GT_EXPR : LE_EXPR);
252
else if (operand_equal_p (TREE_OPERAND (cond, 1),
253
TYPE_MAX_VALUE (TREE_TYPE (decl)),
255
- TREE_SET_CODE (cond, LT_EXPR);
256
+ TREE_SET_CODE (cond, TREE_CODE (cond) == NE_EXPR
257
+ ? LT_EXPR : GE_EXPR);