mirror of git://gcc.gnu.org/git/gcc.git
[PR c/71381] C/C++ OpenACC cache directive rejects valid syntax
gcc/c/ PR c/71381 * c-parser.c (c_parser_omp_variable_list) <OMP_CLAUSE__CACHE_>: Loosen checking. gcc/cp/ PR c/71381 * parser.c (cp_parser_omp_var_list_no_open) <OMP_CLAUSE__CACHE_>: Loosen checking. gcc/fortran/ PR c/71381 * openmp.c (gfc_match_oacc_cache): Add comment. gcc/testsuite/ PR c/71381 * c-c++-common/goacc/cache-1.c: Update. Move invalid usage tests to... * c-c++-common/goacc/cache-2.c: ... this new file. * gfortran.dg/goacc/cache-1.f95: Move invalid usage tests to... * gfortran.dg/goacc/cache-2.f95: ... this new file. * gfortran.dg/goacc/coarray.f95: Update OpenACC cache directive usage. * gfortran.dg/goacc/cray.f95: Likewise. * gfortran.dg/goacc/loop-1.f95: Likewise. libgomp/ PR c/71381 * testsuite/libgomp.oacc-c-c++-common/cache-1.c: #include "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c". * testsuite/libgomp.oacc-fortran/cache-1.f95: New file. gcc/ * omp-low.c (scan_sharing_clauses): Don't expect OMP_CLAUSE__CACHE_. From-SVN: r237290
This commit is contained in:
parent
22d222d240
commit
4b1ffdb16c
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
* omp-low.c (scan_sharing_clauses): Don't expect
|
||||||
|
OMP_CLAUSE__CACHE_.
|
||||||
|
|
||||||
2016-06-10 Alan Hayward <alan.hayward@arm.com>
|
2016-06-10 Alan Hayward <alan.hayward@arm.com>
|
||||||
|
|
||||||
PR tree-optimization/71407
|
PR tree-optimization/71407
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
PR c/71381
|
||||||
|
* c-parser.c (c_parser_omp_variable_list) <OMP_CLAUSE__CACHE_>:
|
||||||
|
Loosen checking.
|
||||||
|
|
||||||
2016-06-08 Martin Sebor <msebor@redhat.com>
|
2016-06-08 Martin Sebor <msebor@redhat.com>
|
||||||
Jakub Jelinek <jakub@redhat.com>
|
Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10613,6 +10613,8 @@ c_parser_omp_variable_list (c_parser *parser,
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case OMP_CLAUSE__CACHE_:
|
case OMP_CLAUSE__CACHE_:
|
||||||
|
/* The OpenACC cache directive explicitly only allows "array
|
||||||
|
elements or subarrays". */
|
||||||
if (c_parser_peek_token (parser)->type != CPP_OPEN_SQUARE)
|
if (c_parser_peek_token (parser)->type != CPP_OPEN_SQUARE)
|
||||||
{
|
{
|
||||||
c_parser_error (parser, "expected %<[%>");
|
c_parser_error (parser, "expected %<[%>");
|
||||||
|
|
@ -10678,25 +10680,6 @@ c_parser_omp_variable_list (c_parser *parser,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kind == OMP_CLAUSE__CACHE_)
|
|
||||||
{
|
|
||||||
if (TREE_CODE (low_bound) != INTEGER_CST
|
|
||||||
&& !TREE_READONLY (low_bound))
|
|
||||||
{
|
|
||||||
error_at (clause_loc,
|
|
||||||
"%qD is not a constant", low_bound);
|
|
||||||
t = error_mark_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TREE_CODE (length) != INTEGER_CST
|
|
||||||
&& !TREE_READONLY (length))
|
|
||||||
{
|
|
||||||
error_at (clause_loc,
|
|
||||||
"%qD is not a constant", length);
|
|
||||||
t = error_mark_node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
t = tree_cons (low_bound, length, t);
|
t = tree_cons (low_bound, length, t);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
PR c/71381
|
||||||
|
* parser.c (cp_parser_omp_var_list_no_open) <OMP_CLAUSE__CACHE_>:
|
||||||
|
Loosen checking.
|
||||||
|
|
||||||
2016-06-09 Paolo Carlini <paolo.carlini@oracle.com>
|
2016-06-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/71465
|
PR c++/71465
|
||||||
|
|
|
||||||
|
|
@ -29984,6 +29984,8 @@ cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case OMP_CLAUSE__CACHE_:
|
case OMP_CLAUSE__CACHE_:
|
||||||
|
/* The OpenACC cache directive explicitly only allows "array
|
||||||
|
elements or subarrays". */
|
||||||
if (cp_lexer_peek_token (parser->lexer)->type != CPP_OPEN_SQUARE)
|
if (cp_lexer_peek_token (parser->lexer)->type != CPP_OPEN_SQUARE)
|
||||||
{
|
{
|
||||||
error_at (token->location, "expected %<[%>");
|
error_at (token->location, "expected %<[%>");
|
||||||
|
|
@ -30035,25 +30037,6 @@ cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
|
||||||
RT_CLOSE_SQUARE))
|
RT_CLOSE_SQUARE))
|
||||||
goto skip_comma;
|
goto skip_comma;
|
||||||
|
|
||||||
if (kind == OMP_CLAUSE__CACHE_)
|
|
||||||
{
|
|
||||||
if (TREE_CODE (low_bound) != INTEGER_CST
|
|
||||||
&& !TREE_READONLY (low_bound))
|
|
||||||
{
|
|
||||||
error_at (token->location,
|
|
||||||
"%qD is not a constant", low_bound);
|
|
||||||
decl = error_mark_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TREE_CODE (length) != INTEGER_CST
|
|
||||||
&& !TREE_READONLY (length))
|
|
||||||
{
|
|
||||||
error_at (token->location,
|
|
||||||
"%qD is not a constant", length);
|
|
||||||
decl = error_mark_node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
decl = tree_cons (low_bound, length, decl);
|
decl = tree_cons (low_bound, length, decl);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
PR c/71381
|
||||||
|
* openmp.c (gfc_match_oacc_cache): Add comment.
|
||||||
|
|
||||||
2016-06-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
2016-06-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/71404
|
PR fortran/71404
|
||||||
|
|
|
||||||
|
|
@ -1688,6 +1688,10 @@ match
|
||||||
gfc_match_oacc_cache (void)
|
gfc_match_oacc_cache (void)
|
||||||
{
|
{
|
||||||
gfc_omp_clauses *c = gfc_get_omp_clauses ();
|
gfc_omp_clauses *c = gfc_get_omp_clauses ();
|
||||||
|
/* The OpenACC cache directive explicitly only allows "array elements or
|
||||||
|
subarrays", which we're currently not checking here. Either check this
|
||||||
|
after the call of gfc_match_omp_variable_list, or add something like a
|
||||||
|
only_sections variant next to its allow_sections parameter. */
|
||||||
match m = gfc_match_omp_variable_list (" (",
|
match m = gfc_match_omp_variable_list (" (",
|
||||||
&c->lists[OMP_LIST_CACHE], true,
|
&c->lists[OMP_LIST_CACHE], true,
|
||||||
NULL, NULL, true);
|
NULL, NULL, true);
|
||||||
|
|
|
||||||
|
|
@ -2201,9 +2201,6 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OMP_CLAUSE__CACHE_:
|
case OMP_CLAUSE__CACHE_:
|
||||||
sorry ("Clause not supported yet");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
gcc_unreachable ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
@ -2368,9 +2365,6 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OMP_CLAUSE__CACHE_:
|
case OMP_CLAUSE__CACHE_:
|
||||||
sorry ("Clause not supported yet");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
gcc_unreachable ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,16 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
PR c/71381
|
||||||
|
* c-c++-common/goacc/cache-1.c: Update. Move invalid usage tests
|
||||||
|
to...
|
||||||
|
* c-c++-common/goacc/cache-2.c: ... this new file.
|
||||||
|
* gfortran.dg/goacc/cache-1.f95: Move invalid usage tests to...
|
||||||
|
* gfortran.dg/goacc/cache-2.f95: ... this new file.
|
||||||
|
* gfortran.dg/goacc/coarray.f95: Update OpenACC cache directive
|
||||||
|
usage.
|
||||||
|
* gfortran.dg/goacc/cray.f95: Likewise.
|
||||||
|
* gfortran.dg/goacc/loop-1.f95: Likewise.
|
||||||
|
|
||||||
2016-06-10 Alan Hayward <alan.hayward@arm.com>
|
2016-06-10 Alan Hayward <alan.hayward@arm.com>
|
||||||
|
|
||||||
PR tree-optimization/71407
|
PR tree-optimization/71407
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
/* OpenACC cache directive: valid usage. */
|
||||||
|
/* For execution testing, this file is "#include"d from
|
||||||
|
libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c. */
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|
@ -21,57 +25,31 @@ main (int argc, char **argv)
|
||||||
int n = 1;
|
int n = 1;
|
||||||
const int len = n;
|
const int len = n;
|
||||||
|
|
||||||
#pragma acc cache /* { dg-error "expected '\\\(' before end of line" } */
|
/* Have at it, GCC! */
|
||||||
|
|
||||||
#pragma acc cache a[0:N] /* { dg-error "expected '\\\(' before 'a'" } */
|
|
||||||
/* { dg-bogus "expected end of line before 'a'" "" { xfail c++ } 26 } */
|
|
||||||
|
|
||||||
#pragma acc cache (a) /* { dg-error "expected '\\\['" } */
|
|
||||||
|
|
||||||
#pragma acc cache ( /* { dg-error "expected (identifier|unqualified-id) before end of line" } */
|
|
||||||
|
|
||||||
#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */
|
|
||||||
|
|
||||||
#pragma acc cache (,) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" "" { xfail c } } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N]) copyin (a[0:N]) /* { dg-error "expected end of line before 'copyin'" } */
|
|
||||||
|
|
||||||
#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N] b[0:N]) /* { dg-error "expected '\\\)' before 'b'" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N] b[0:N}) /* { dg-error "expected '\\\)' before 'b'" } */
|
|
||||||
/* { dg-bogus "expected end of line before '\\\}' token" "" { xfail c++ } 47 } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[ii]) /* { dg-error "'ii' is not a constant" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[idx:n]) /* { dg-error "'n' is not a constant" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N]) ( /* { dg-error "expected end of line before '\\(' token" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N]) ii /* { dg-error "expected end of line before 'ii'" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N] ii) /* { dg-error "expected '\\)' before 'ii'" } */
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N])
|
#pragma acc cache (a[0:N])
|
||||||
|
|
||||||
#pragma acc cache (a[0:N], a[0:N])
|
#pragma acc cache (a[0:N], a[0:N])
|
||||||
|
|
||||||
#pragma acc cache (a[0:N], b[0:N])
|
#pragma acc cache (a[0:N], b[0:N])
|
||||||
|
|
||||||
#pragma acc cache (a[0])
|
#pragma acc cache (a[0])
|
||||||
|
|
||||||
#pragma acc cache (a[0], a[1], b[0:N])
|
#pragma acc cache (a[0], a[1], b[0:N])
|
||||||
|
#pragma acc cache (a[i - 5])
|
||||||
|
#pragma acc cache (a[i + 5:len])
|
||||||
|
#pragma acc cache (a[i + 5:len - 1])
|
||||||
|
#pragma acc cache (b[i])
|
||||||
|
#pragma acc cache (b[i:len])
|
||||||
|
#pragma acc cache (a[ii])
|
||||||
|
#pragma acc cache (a[ii:len])
|
||||||
|
#pragma acc cache (b[ii - 1])
|
||||||
|
#pragma acc cache (b[ii - 1:len])
|
||||||
|
#pragma acc cache (b[i - ii + 1])
|
||||||
|
#pragma acc cache (b[i + ii - 1:len])
|
||||||
|
#pragma acc cache (b[i * ii - 1:len + 1])
|
||||||
|
#pragma acc cache (a[idx + 2])
|
||||||
|
#pragma acc cache (a[idx:len + 2])
|
||||||
#pragma acc cache (a[idx])
|
#pragma acc cache (a[idx])
|
||||||
|
|
||||||
#pragma acc cache (a[idx:len])
|
#pragma acc cache (a[idx:len])
|
||||||
|
#pragma acc cache (a[idx + 2:len])
|
||||||
|
#pragma acc cache (a[idx + 2 + i:len])
|
||||||
|
#pragma acc cache (a[idx + 2 + i + ii:len])
|
||||||
|
|
||||||
b[ii] = a[ii];
|
b[ii] = a[ii];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* OpenACC cache directive: invalid usage. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
#define N 2
|
||||||
|
int a[N], b[N];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < N; i++)
|
||||||
|
{
|
||||||
|
a[i] = 3;
|
||||||
|
b[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
for (ii = 0; ii < N; ii++)
|
||||||
|
{
|
||||||
|
const int idx = ii;
|
||||||
|
int n = 1;
|
||||||
|
const int len = n;
|
||||||
|
|
||||||
|
#pragma acc cache /* { dg-error "expected '\\\(' before end of line" } */
|
||||||
|
#pragma acc cache a[0:N] /* { dg-error "expected '\\\(' before 'a'" } */
|
||||||
|
/* { dg-bogus "expected end of line before 'a'" "" { xfail c++ } 27 } */
|
||||||
|
#pragma acc cache (a) /* { dg-error "expected '\\\['" } */
|
||||||
|
#pragma acc cache ( /* { dg-error "expected (identifier|unqualified-id) before end of line" } */
|
||||||
|
#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */
|
||||||
|
#pragma acc cache (,) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" } */
|
||||||
|
#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */
|
||||||
|
#pragma acc cache (a[0:N],) /* { dg-error "expected (identifier|unqualified-id) before '(,|\\\))' token" "" { xfail c } } */
|
||||||
|
#pragma acc cache (a[0:N]) copyin (a[0:N]) /* { dg-error "expected end of line before 'copyin'" } */
|
||||||
|
#pragma acc cache () /* { dg-error "expected (identifier|unqualified-id) before '\\\)' token" } */
|
||||||
|
#pragma acc cache (a[0:N] b[0:N]) /* { dg-error "expected '\\\)' before 'b'" } */
|
||||||
|
#pragma acc cache (a[0:N] b[0:N}) /* { dg-error "expected '\\\)' before 'b'" } */
|
||||||
|
/* { dg-bogus "expected end of line before '\\\}' token" "" { xfail c++ } 38 } */
|
||||||
|
#pragma acc cache (a[0:N] /* { dg-error "expected '\\\)' before end of line" } */
|
||||||
|
#pragma acc cache (a[0:N]) ( /* { dg-error "expected end of line before '\\(' token" } */
|
||||||
|
#pragma acc cache (a[0:N]) ii /* { dg-error "expected end of line before 'ii'" } */
|
||||||
|
#pragma acc cache (a[0:N] ii) /* { dg-error "expected '\\)' before 'ii'" } */
|
||||||
|
|
||||||
|
b[ii] = a[ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < N; i++)
|
||||||
|
{
|
||||||
|
if (a[i] != b[i])
|
||||||
|
__builtin_abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
! { dg-do compile }
|
! OpenACC cache directive: valid usage.
|
||||||
|
! For execution testing, this file is "#include"d from
|
||||||
|
! libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95.
|
||||||
! { dg-additional-options "-std=f2008" }
|
! { dg-additional-options "-std=f2008" }
|
||||||
|
|
||||||
program test
|
program test
|
||||||
|
|
@ -6,11 +8,8 @@ program test
|
||||||
integer :: i, d(10), e(5,13)
|
integer :: i, d(10), e(5,13)
|
||||||
|
|
||||||
do concurrent (i=1:5)
|
do concurrent (i=1:5)
|
||||||
!$acc cache (d)
|
|
||||||
!$acc cache (d(1:3))
|
!$acc cache (d(1:3))
|
||||||
!$acc cache (d(i:i+2))
|
!$acc cache (d(i:i+2))
|
||||||
|
|
||||||
!$acc cache (e)
|
|
||||||
!$acc cache (e(1:3,2:4))
|
!$acc cache (e(1:3,2:4))
|
||||||
!$acc cache (e(i:i+2,i+1:i+3))
|
!$acc cache (e(i:i+2,i+1:i+3))
|
||||||
enddo
|
enddo
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
! OpenACC cache directive: invalid usage.
|
||||||
|
! { dg-additional-options "-std=f2008" }
|
||||||
|
|
||||||
|
program test
|
||||||
|
implicit none
|
||||||
|
integer :: i, d(10), e(5,13)
|
||||||
|
|
||||||
|
do concurrent (i=1:5)
|
||||||
|
!$acc cache (d) ! { dg-error "" "TODO" { xfail *-*-* } }
|
||||||
|
!$acc cache (e) ! { dg-error "" "TODO" { xfail *-*-* } }
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
@ -24,7 +24,7 @@ contains
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do i = 1,5
|
do i = 1,5
|
||||||
!$acc cache (a)
|
!$acc cache (a) ! { dg-error "" "TODO" { xfail *-*-* } }
|
||||||
enddo
|
enddo
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update device (a)
|
!$acc update device (a)
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,8 @@ contains
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc parallel loop
|
!$acc parallel loop
|
||||||
do i = 1,5
|
do i = 1,5
|
||||||
!$acc cache (ptr) ! TODO: This must fail, as in openacc-1_0-branch
|
!TODO: This must fail, as in openacc-1_0-branch.
|
||||||
|
!$acc cache (ptr) ! { dg-error "" "TODO" { xfail *-*-* } }
|
||||||
enddo
|
enddo
|
||||||
!$acc end parallel loop
|
!$acc end parallel loop
|
||||||
!$acc update device (ptr)
|
!$acc update device (ptr)
|
||||||
|
|
|
||||||
|
|
@ -158,15 +158,16 @@ subroutine test1
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
!$acc cache (a) ! { dg-error "inside of loop" }
|
!$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" }
|
||||||
|
|
||||||
do i = 1,10
|
do i = 1,10
|
||||||
!$acc cache(a)
|
!$acc cache(a(i:i+1))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do i = 1,10
|
do i = 1,10
|
||||||
|
!$acc cache(a(i:i+1))
|
||||||
a(i) = i
|
a(i) = i
|
||||||
!$acc cache(a)
|
!$acc cache(a(i+2:i+2+1))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine test1
|
end subroutine test1
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
PR c/71381
|
||||||
|
* testsuite/libgomp.oacc-c-c++-common/cache-1.c: #include
|
||||||
|
"../../../gcc/testsuite/c-c++-common/goacc/cache-1.c".
|
||||||
|
* testsuite/libgomp.oacc-fortran/cache-1.f95: New file.
|
||||||
|
|
||||||
2016-06-03 Chung-Lin Tang <cltang@codesourcery.com>
|
2016-06-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
* testsuite/libgomp.oacc-fortran/reduction-8.f90: New testcase.
|
* testsuite/libgomp.oacc-fortran/reduction-8.f90: New testcase.
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,3 @@
|
||||||
int
|
/* OpenACC cache directive. */
|
||||||
main (int argc, char **argv)
|
|
||||||
{
|
|
||||||
#define N 2
|
|
||||||
int a[N], b[N];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
#include "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c"
|
||||||
{
|
|
||||||
a[i] = 3;
|
|
||||||
b[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
|
|
||||||
{
|
|
||||||
int ii;
|
|
||||||
|
|
||||||
for (ii = 0; ii < N; ii++)
|
|
||||||
{
|
|
||||||
const int idx = ii;
|
|
||||||
int n = 1;
|
|
||||||
const int len = n;
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N])
|
|
||||||
|
|
||||||
#pragma acc cache (a[0:N], b[0:N])
|
|
||||||
|
|
||||||
#pragma acc cache (a[0])
|
|
||||||
|
|
||||||
#pragma acc cache (a[0], a[1], b[0:N])
|
|
||||||
|
|
||||||
#pragma acc cache (a[idx])
|
|
||||||
|
|
||||||
#pragma acc cache (a[idx:len])
|
|
||||||
|
|
||||||
b[ii] = a[ii];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
if (a[i] != b[i])
|
|
||||||
__builtin_abort ();
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
! OpenACC cache directive.
|
||||||
|
! { dg-do run }
|
||||||
|
! { dg-additional-options "-std=f2008" }
|
||||||
|
! { dg-additional-options "-cpp" }
|
||||||
|
|
||||||
|
#include "../../../gcc/testsuite/gfortran.dg/goacc/cache-1.f95"
|
||||||
Loading…
Reference in New Issue