aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2016-04-27 12:22:47 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2016-04-27 12:22:47 +0000
commitebe504eee5181b43494bcd06d2f0683ba5f1eb8c (patch)
treeecba6cd8eecff4fc6fc23c8cc9811cefe91f2d0d
parenta71343b470ff996f6e0029542acb8b52c8d3918f (diff)
Backported from mainline
2016-04-19 Jakub Jelinek <jakub@redhat.com> PR middle-end/70680 * gimplify.c (gimplify_omp_for): Call omp_notice_variable for implicitly linear or lastprivate iterator on the outer context. * testsuite/libgomp.c/pr70680-1.c: New test. * testsuite/libgomp.c/pr70680-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@235489 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/gimplify.c10
-rw-r--r--libgomp/ChangeLog9
-rw-r--r--libgomp/testsuite/libgomp.c/pr70680-1.c75
-rw-r--r--libgomp/testsuite/libgomp.c/pr70680-2.c79
5 files changed, 180 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c13b22092d3..fd14b2bddcf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2016-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2016-04-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70680
+ * gimplify.c (gimplify_omp_for): Call omp_notice_variable for
+ implicitly linear or lastprivate iterator on the outer context.
+
2016-04-27 Kirill Yukhin <kirill.yukhin@intel.com>
PR target/70728
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 99c9760f85f..e223e592af5 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -8785,7 +8785,10 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
decl, false))
;
else if (outer->region_type != ORT_COMBINED_PARALLEL)
- outer = NULL;
+ {
+ omp_notice_variable (outer, decl, true);
+ outer = NULL;
+ }
if (outer)
{
n = splay_tree_lookup (outer->variables,
@@ -8868,7 +8871,10 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
decl, false))
;
else if (outer->region_type != ORT_COMBINED_PARALLEL)
- outer = NULL;
+ {
+ omp_notice_variable (outer, decl, true);
+ outer = NULL;
+ }
if (outer)
{
n = splay_tree_lookup (outer->variables,
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 4d42e36e4cf..0db2667a508 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,12 @@
+2016-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2016-04-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70680
+ * testsuite/libgomp.c/pr70680-1.c: New test.
+ * testsuite/libgomp.c/pr70680-2.c: New test.
+
2016-04-27 Release Manager
* GCC 6.1.0 released.
diff --git a/libgomp/testsuite/libgomp.c/pr70680-1.c b/libgomp/testsuite/libgomp.c/pr70680-1.c
new file mode 100644
index 00000000000..389fdd37291
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr70680-1.c
@@ -0,0 +1,75 @@
+/* PR middle-end/70680 */
+
+int v;
+
+void
+f1 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd
+ for (i = 0; i < 100; i++)
+ ;
+ v = i;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd
+ for (i = 0; i < 100; i++)
+ ;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd linear(i: 1)
+ for (i = 0; i < 100; i++)
+ ;
+ v = i;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f4 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd linear(i: 1)
+ for (i = 0; i < 100; i++)
+ ;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 ();
+ if (v++ != 100)
+ __builtin_abort ();
+ f2 ();
+ f3 ();
+ if (v++ != 100)
+ __builtin_abort ();
+ f4 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr70680-2.c b/libgomp/testsuite/libgomp.c/pr70680-2.c
new file mode 100644
index 00000000000..0aada78f0c5
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr70680-2.c
@@ -0,0 +1,79 @@
+/* PR middle-end/70680 */
+
+int v;
+
+void
+f1 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ v = i + j;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2) lastprivate (i, j)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ v = i + j;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f4 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2) lastprivate (i, j)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 ();
+ if (v++ != 20)
+ __builtin_abort ();
+ f2 ();
+ f3 ();
+ if (v++ != 20)
+ __builtin_abort ();
+ f4 ();
+ return 0;
+}