From 33ee4d7296548b42e4b2d5a8bbcb12a02960d300 Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 26 Nov 2013 20:38:10 +0000 Subject: [PATCH] PR middle-end/59152 * omp-low.c (expand_omp_for_static_chunk): Don't set loop->latch for the inner loop if collapse_bb is non-NULL. (expand_omp_simd): Use cont_bb rather than e->dest as latch. * c-c++-common/gomp/pr59152.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205410 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 ++++++ gcc/omp-low.c | 5 ++-- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/c-c++-common/gomp/pr59152.c | 40 +++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/gomp/pr59152.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3eade0df5f..b04f5397368 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-11-26 Jakub Jelinek + + PR middle-end/59152 + * omp-low.c (expand_omp_for_static_chunk): Don't set loop->latch + for the inner loop if collapse_bb is non-NULL. + (expand_omp_simd): Use cont_bb rather than e->dest as latch. + 2013-11-26 Bernd Edlinger Remove parameter keep_aligning from get_inner_reference. diff --git a/gcc/omp-low.c b/gcc/omp-low.c index df9cd25b401..7abe4567711 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -6491,7 +6491,8 @@ expand_omp_for_static_chunk (struct omp_region *region, { struct loop *loop = alloc_loop (); loop->header = body_bb; - loop->latch = cont_bb; + if (collapse_bb == NULL) + loop->latch = cont_bb; add_loop (loop, trip_loop); } } @@ -6771,7 +6772,7 @@ expand_omp_simd (struct omp_region *region, struct omp_for_data *fd) { struct loop *loop = alloc_loop (); loop->header = l1_bb; - loop->latch = e->dest; + loop->latch = cont_bb; add_loop (loop, l1_bb->loop_father); if (safelen == NULL_TREE) loop->safelen = INT_MAX; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e16308d1d93..26b50d11cac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-26 Jakub Jelinek + + PR middle-end/59152 + * c-c++-common/gomp/pr59152.c: New test. + 2013-11-26 Uros Bizjak * gcc.dg/gomp/openmp-simd-1.c: Cleanup original tree dump. diff --git a/gcc/testsuite/c-c++-common/gomp/pr59152.c b/gcc/testsuite/c-c++-common/gomp/pr59152.c new file mode 100644 index 00000000000..bcccb1be349 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr59152.c @@ -0,0 +1,40 @@ +/* PR middle-end/59152 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp -fipa-pure-const" } */ + +extern int b[]; +void +foo (void) +{ + unsigned long v1, v2, v3; + #pragma omp parallel for schedule(static, 32) collapse(3) + for (v1 = 0; v1 < 20; v1 += 2) + for (v2 = __LONG_MAX__; v2 > __LONG_MAX__ - 30; v2 -= 3) + for (v3 = 10; v3 > 0; v3--) + #pragma omp atomic + b[v3]++; +} + +void +bar (void) +{ + unsigned long v1, v2, v3; + #pragma omp parallel for schedule(static) collapse(3) + for (v1 = 0; v1 < 20; v1 += 2) + for (v2 = __LONG_MAX__; v2 > __LONG_MAX__ - 30; v2 -= 3) + for (v3 = 10; v3 > 0; v3--) + #pragma omp atomic + b[v3]++; +} + +void +baz (void) +{ + unsigned long v1, v2, v3; + #pragma omp parallel for schedule(runtime) collapse(3) + for (v1 = 0; v1 < 20; v1 += 2) + for (v2 = __LONG_MAX__; v2 > __LONG_MAX__ - 30; v2 -= 3) + for (v3 = 10; v3 > 0; v3--) + #pragma omp atomic + b[v3]++; +} -- 2.11.4.GIT