re PR middle-end/70643 (broken openacc reduction inside a fortran module)
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. From-SVN: r234973
This commit is contained in:
parent
e21401b6b1
commit
e387fc6494
4 changed files with 63 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-04-14 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
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 <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/70614
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-04-14 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
PR middle-end/70643
|
||||
* testsuite/libgomp.oacc-fortran/pr70643.f90: New test.
|
||||
|
||||
2016-04-13 Cesar Philippidis <cesar@codesourcery.com>
|
||||
|
||||
PR testsuite/68242
|
||||
|
|
51
libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
Normal file
51
libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
Normal file
|
@ -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
|
Loading…
Add table
Reference in a new issue