From eae3d58955c5577cc105829a81882dca5b48455f Mon Sep 17 00:00:00 2001 From: cesar Date: Thu, 14 Apr 2016 13:44:17 +0000 Subject: [PATCH] PR middle-end/70643 gcc/ * omp-low.c (lower_oacc_reductions): Check for TREE_CONSTANT when building a mem ref for the incoming reduction variable. libgomp/ * testsuite/libgomp.oacc-fortran/pr70643.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234973 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 +++ gcc/omp-low.c | 2 +- libgomp/ChangeLog | 5 +++ libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 | 51 ++++++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19575f0fc79..ca2a9a74600 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-04-14 Cesar Philippidis + + PR middle-end/70643 + * omp-low.c (lower_oacc_reductions): Check for TREE_CONSTANT + when building a mem ref for the incoming reduction variable. + 2016-04-14 Richard Biener PR tree-optimization/70614 diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 7335abc6396..aa3721edc9d 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -5691,7 +5691,7 @@ lower_oacc_reductions (location_t loc, tree clauses, tree level, bool inner, v3 = build_simple_mem_ref (v3); outgoing = build_simple_mem_ref (outgoing); - if (TREE_CODE (incoming) != INTEGER_CST) + if (!TREE_CONSTANT (incoming)) incoming = build_simple_mem_ref (incoming); } else diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index d4411c0f557..89ee866ac4c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2016-04-14 Cesar Philippidis + + PR middle-end/70643 + * testsuite/libgomp.oacc-fortran/pr70643.f90: New test. + 2016-04-13 Cesar Philippidis PR testsuite/68242 diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 new file mode 100644 index 00000000000..7c2e5eef904 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90 @@ -0,0 +1,51 @@ +MODULE reduction_test + +CONTAINS + +SUBROUTINE reduction_kernel(x_min,x_max,y_min,y_max,arr,sum) + + IMPLICIT NONE + + INTEGER :: x_min,x_max,y_min,y_max + REAL(KIND=8), DIMENSION(x_min-2:x_max+2,y_min-2:y_max+2) :: arr + REAL(KIND=8) :: sum + + INTEGER :: j,k + +!$ACC DATA PRESENT(arr) COPY(sum) +!$ACC PARALLEL LOOP REDUCTION(+ : sum) + DO k=y_min,y_max + DO j=x_min,x_max + sum=sum+arr(j,k) + ENDDO + ENDDO +!$ACC END PARALLEL LOOP +!$ACC END DATA +END SUBROUTINE reduction_kernel + +END MODULE reduction_test + +program main + use reduction_test + + integer :: x_min,x_max,y_min,y_max + real(kind=8), dimension(1:10,1:10) :: arr + real(kind=8) :: sum + + x_min = 1 + x_max = 2 + y_min = 1 + y_max = 2 + + arr(:,:) = 1.0 + + sum = 0.0 + + !$acc data copy(arr) + + call reduction_kernel(x_min,x_max,y_min,y_max,arr,sum) + + !$acc end data + + if (sum .ne. 4.0) call abort +end program -- 2.11.4.GIT