From 44c0112f46adccdfa952d5fd7a8fd0af3baafe37 Mon Sep 17 00:00:00 2001 From: vries Date: Tue, 8 Dec 2015 14:17:42 +0000 Subject: [PATCH] Clear restrict in install_var_field 2015-12-08 Tom de Vries PR tree-optimization/68640 * omp-low.c (install_var_field): Clear the restrict qualifier on the var type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231411 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 7 +++++++ gcc/testsuite/gcc.dg/gomp/pr68640.c | 16 ++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/gomp/pr68640.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d45a2a7..94331ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-12-08 Tom de Vries + + PR tree-optimization/68640 + * omp-low.c (install_var_field): Clear the restrict qualifier on the var + type. + 2015-12-08 Kirill Yukhin * config/i386/sse.md (define_insn "_vec_dup_1"): Fix diff --git a/gcc/omp-low.c b/gcc/omp-low.c index d1d1e3c..5643480 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -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 index 0000000..f333db0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr68640.c @@ -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" } } */ -- 2.7.4