Clear restrict in install_var_field
authorTom de Vries <tom@codesourcery.com>
Tue, 8 Dec 2015 14:17:42 +0000 (14:17 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 8 Dec 2015 14:17:42 +0000 (14:17 +0000)
2015-12-08  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/68640
* omp-low.c (install_var_field): Clear the restrict qualifier on the var
type.

From-SVN: r231411

gcc/ChangeLog
gcc/omp-low.c
gcc/testsuite/gcc.dg/gomp/pr68640.c [new file with mode: 0644]

index d45a2a70f3242f73303c1ef9b4aafdacefe70c64..94331edf3aa76fd1895b45764d9341629967999c 100644 (file)
@@ -1,3 +1,9 @@
+2015-12-08  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/68640
+       * omp-low.c (install_var_field): Clear the restrict qualifier on the var
+       type.
+
 2015-12-08  Kirill Yukhin  <kirill.yukhin@intel.com>
 
        * config/i386/sse.md (define_insn "<avx512>_vec_dup<mode>_1"): Fix
index d1d1e3cd67aafbb3ecf6ce2d75a32ec2217e444b..56434805cfeed878f30dd736167e1b771ab30422 100644 (file)
@@ -1389,6 +1389,13 @@ install_var_field (tree var, bool by_ref, int mask, omp_context *ctx,
              || !is_gimple_omp_oacc (ctx->stmt));
 
   type = TREE_TYPE (var);
+  /* Prevent redeclaring the var in the split-off function with a restrict
+     pointer type.  Note that we only clear type itself, restrict qualifiers in
+     the pointed-to type will be ignored by points-to analysis.  */
+  if (POINTER_TYPE_P (type)
+      && TYPE_RESTRICT (type))
+    type = build_qualified_type (type, TYPE_QUALS (type) & ~TYPE_QUAL_RESTRICT);
+
   if (mask & 4)
     {
       gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
diff --git a/gcc/testsuite/gcc.dg/gomp/pr68640.c b/gcc/testsuite/gcc.dg/gomp/pr68640.c
new file mode 100644 (file)
index 0000000..f333db0
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp -fdump-tree-ealias-all" } */
+
+#define N 1024
+
+int
+foo (int *__restrict__ ap)
+{
+  int *bp = ap;
+#pragma omp parallel for
+  for (unsigned int idx = 0; idx < N; idx++)
+    ap[idx] = bp[idx];
+}
+
+/* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */