aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2015-10-27 17:54:52 +0100
committerThomas Schwinge <tschwinge@gcc.gnu.org>2015-10-27 17:54:52 +0100
commit33497fd242760dcd0db7f69596a0aec21c735b35 (patch)
tree42870bcd2643f2dd30e91b84a0dbf6619385a2c5 /gcc
parentd34b48146ac2f07e78825c3e99da2e2e588f3c3d (diff)
downloadgcc-33497fd242760dcd0db7f69596a0aec21c735b35.zip
gcc-33497fd242760dcd0db7f69596a0aec21c735b35.tar.gz
gcc-33497fd242760dcd0db7f69596a0aec21c735b35.tar.bz2
[PR fortran/63865] OpenACC cache directive: match Fortran support with C/C++
gcc/fortran/ PR fortran/63865 * openmp.c (resolve_oacc_cache): Remove function. (gfc_match_oacc_cache): Enable array sections. (resolve_omp_clauses, gfc_resolve_oacc_directive): Change accordingly. * trans-openmp.c (gfc_trans_omp_clauses): Likewise. gcc/testsuite/ PR fortran/63865 * gfortran.dg/goacc/coarray.f95: Expect the OpenACC cache directive to work. * gfortran.dg/goacc/loop-1.f95: Likewise. * gfortran.dg/goacc/cache-1.f95: Likewise, and extend testing. * gfortran.dg/goacc/cray.f95: Likewise. * gfortran.dg/goacc/parameter.f95: Likewise. Co-Authored-By: James Norris <jnorris@codesourcery.com> From-SVN: r229448
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog10
-rw-r--r--gcc/fortran/openmp.c16
-rw-r--r--gcc/fortran/trans-openmp.c22
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/cache-1.f959
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/coarray.f953
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/cray.f954
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/loop-1.f951
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/parameter.f953
9 files changed, 52 insertions, 27 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 37956ce..02564ce 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,13 @@
+2015-10-27 Thomas Schwinge <thomas@codesourcery.com>
+ James Norris <jnorris@codesourcery.com>
+
+ PR fortran/63865
+ * openmp.c (resolve_oacc_cache): Remove function.
+ (gfc_match_oacc_cache): Enable array sections.
+ (resolve_omp_clauses, gfc_resolve_oacc_directive): Change
+ accordingly.
+ * trans-openmp.c (gfc_trans_omp_clauses): Likewise.
+
2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68108
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 3c12d8e..6c78c97 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -1387,7 +1387,8 @@ gfc_match_oacc_cache (void)
{
gfc_omp_clauses *c = gfc_get_omp_clauses ();
match m = gfc_match_omp_variable_list (" (",
- &c->lists[OMP_LIST_CACHE], true);
+ &c->lists[OMP_LIST_CACHE], true,
+ NULL, NULL, true);
if (m != MATCH_YES)
{
gfc_free_omp_clauses(c);
@@ -3107,6 +3108,7 @@ resolve_omp_clauses (gfc_code *code, locus *where,
case OMP_LIST_MAP:
case OMP_LIST_TO:
case OMP_LIST_FROM:
+ case OMP_LIST_CACHE:
for (; n != NULL; n = n->next)
{
if (n->expr)
@@ -3380,7 +3382,6 @@ resolve_omp_clauses (gfc_code *code, locus *where,
n->sym->name, name, where);
/* FALLTHRU */
case OMP_LIST_DEVICE_RESIDENT:
- case OMP_LIST_CACHE:
check_symbol_not_pointer (n->sym, *where, name);
check_array_not_assumed (n->sym, *where, name);
break;
@@ -4597,13 +4598,6 @@ resolve_oacc_loop (gfc_code *code)
}
-static void
-resolve_oacc_cache (gfc_code *code ATTRIBUTE_UNUSED)
-{
- sorry ("Sorry, !$ACC cache unimplemented yet");
-}
-
-
void
gfc_resolve_oacc_declare (gfc_namespace *ns)
{
@@ -4657,6 +4651,7 @@ gfc_resolve_oacc_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED)
case EXEC_OACC_ENTER_DATA:
case EXEC_OACC_EXIT_DATA:
case EXEC_OACC_WAIT:
+ case EXEC_OACC_CACHE:
resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL,
true);
break;
@@ -4665,9 +4660,6 @@ gfc_resolve_oacc_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED)
case EXEC_OACC_LOOP:
resolve_oacc_loop (code);
break;
- case EXEC_OACC_CACHE:
- resolve_oacc_cache (code);
- break;
default:
break;
}
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index def8afb..3be9f51 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -1778,9 +1778,6 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
case OMP_LIST_DEVICE_RESIDENT:
clause_code = OMP_CLAUSE_DEVICE_RESIDENT;
goto add_clause;
- case OMP_LIST_CACHE:
- clause_code = OMP_CLAUSE__CACHE_;
- goto add_clause;
add_clause:
omp_clauses
@@ -2159,14 +2156,27 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
break;
case OMP_LIST_TO:
case OMP_LIST_FROM:
+ case OMP_LIST_CACHE:
for (; n != NULL; n = n->next)
{
if (!n->sym->attr.referenced)
continue;
- tree node = build_omp_clause (input_location,
- list == OMP_LIST_TO
- ? OMP_CLAUSE_TO : OMP_CLAUSE_FROM);
+ switch (list)
+ {
+ case OMP_LIST_TO:
+ clause_code = OMP_CLAUSE_TO;
+ break;
+ case OMP_LIST_FROM:
+ clause_code = OMP_CLAUSE_FROM;
+ break;
+ case OMP_LIST_CACHE:
+ clause_code = OMP_CLAUSE__CACHE_;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ tree node = build_omp_clause (input_location, clause_code);
if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
{
tree decl = gfc_get_symbol_decl (n->sym);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ab53bc1..1185917 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2015-10-27 Thomas Schwinge <thomas@codesourcery.com>
+ James Norris <jnorris@codesourcery.com>
+
+ PR fortran/63865
+ * gfortran.dg/goacc/coarray.f95: Expect the OpenACC cache
+ directive to work.
+ * gfortran.dg/goacc/loop-1.f95: Likewise.
+ * gfortran.dg/goacc/cache-1.f95: Likewise, and extend testing.
+ * gfortran.dg/goacc/cray.f95: Likewise.
+ * gfortran.dg/goacc/parameter.f95: Likewise.
+
2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68108
diff --git a/gcc/testsuite/gfortran.dg/goacc/cache-1.f95 b/gcc/testsuite/gfortran.dg/goacc/cache-1.f95
index 746cf02..2aa9e05 100644
--- a/gcc/testsuite/gfortran.dg/goacc/cache-1.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/cache-1.f95
@@ -3,10 +3,15 @@
program test
implicit none
- integer :: i, d(10)
+ integer :: i, d(10), e(5,13)
do concurrent (i=1:5)
!$acc cache (d)
+ !$acc cache (d(1:3))
+ !$acc cache (d(i:i+2))
+
+ !$acc cache (e)
+ !$acc cache (e(1:3,2:4))
+ !$acc cache (e(i:i+2,i+1:i+3))
enddo
end
-! { dg-prune-output "unimplemented" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/coarray.f95 b/gcc/testsuite/gfortran.dg/goacc/coarray.f95
index 4f1224e..130ffc3 100644
--- a/gcc/testsuite/gfortran.dg/goacc/coarray.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/coarray.f95
@@ -9,6 +9,7 @@ contains
implicit none
integer :: i
integer, codimension[*] :: a
+ ! { dg-excess-errors "sorry, unimplemented: directive not yet implemented" }
!$acc declare device_resident (a)
!$acc data copy (a)
!$acc end data
@@ -16,6 +17,7 @@ contains
!$acc end data
!$acc parallel private (a)
!$acc end parallel
+ ! { dg-excess-errors "sorry, unimplemented: directive not yet implemented" }
!$acc host_data use_device (a)
!$acc end host_data
!$acc parallel loop reduction(+:a)
@@ -32,4 +34,3 @@ contains
!$acc update self (a)
end subroutine oacc1
end module test
-! { dg-prune-output "ACC cache unimplemented" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/cray.f95 b/gcc/testsuite/gfortran.dg/goacc/cray.f95
index 52789fe..a35ab0d 100644
--- a/gcc/testsuite/gfortran.dg/goacc/cray.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/cray.f95
@@ -24,8 +24,7 @@ contains
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
- ! Subarrays are not implemented yet
- !$acc cache (pointee) ! TODO: This must fail, as in openacc-1_0-branch
+ !$acc cache (pointee) ! { dg-error "Cray pointee" }
enddo
!$acc end parallel loop
!$acc update device (pointee) ! { dg-error "Cray pointee" }
@@ -53,4 +52,3 @@ contains
!$acc update self (ptr)
end subroutine oacc1
end module test
-! { dg-prune-output "ACC cache unimplemented" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-1.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
index e1b2dfd..817039f 100644
--- a/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/loop-1.f95
@@ -168,4 +168,3 @@ subroutine test1
end subroutine test1
end module test
! { dg-prune-output "Deleted" }
-! { dg-prune-output "ACC cache unimplemented" }
diff --git a/gcc/testsuite/gfortran.dg/goacc/parameter.f95 b/gcc/testsuite/gfortran.dg/goacc/parameter.f95
index 454924a..8427461 100644
--- a/gcc/testsuite/gfortran.dg/goacc/parameter.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/parameter.f95
@@ -21,7 +21,7 @@ contains
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
- !$acc cache (a) ! TODO: This must fail, as in openacc-1_0-branch
+ !$acc cache (a) ! { dg-error "not a variable" }
enddo
!$acc end parallel loop
!$acc update device (a) ! { dg-error "not a variable" }
@@ -29,4 +29,3 @@ contains
!$acc update self (a) ! { dg-error "not a variable" }
end subroutine oacc1
end module test
-! { dg-prune-output "ACC cache unimplemented" }