From: Thomas Schwinge <tho...@codesourcery.com> gcc/c-family/ * c.opt (fopenacc): New option. gcc/fortran/ * lang.opt (fopenacc): New option. * invoke.texi (-fopenacc): Document it. * gfortran.h (gfc_option_t): New member. * options.c (gfc_init_options, gfc_handle_option): Handle it. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_fopenacc): New procedure. gcc/ * doc/invoke.texi (-fopenacc): Document it. * doc/sourcebuild.texi (fopenacc): Document it. gcc/testsuite/ * c-c++-common/cpp/openacc-define-1.c: New file. * c-c++-common/cpp/openacc-define-2.c: Likewise. * c-c++-common/cpp/openacc-define-3.c: Likewise. * gfortran.dg/openacc-define-1.f90: Likewise. * gfortran.dg/openacc-define-2.f90: Likewise. * gfortran.dg/openacc-define-3.f90: Likewise. --- gcc/c-family/c.opt | 4 ++++ gcc/doc/invoke.texi | 11 ++++++++++- gcc/doc/sourcebuild.texi | 3 +++ gcc/fortran/gfortran.h | 1 + gcc/fortran/invoke.texi | 7 ++++++- gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 5 +++++ gcc/testsuite/c-c++-common/cpp/openacc-define-1.c | 2 ++ gcc/testsuite/c-c++-common/cpp/openacc-define-2.c | 3 +++ gcc/testsuite/c-c++-common/cpp/openacc-define-3.c | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-1.f90 | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-2.f90 | 3 +++ gcc/testsuite/gfortran.dg/openacc-define-3.f90 | 3 +++ gcc/testsuite/lib/target-supports.exp | 9 +++++++++ 14 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-1.c create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-2.c create mode 100644 gcc/testsuite/c-c++-common/cpp/openacc-define-3.c create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-1.f90 create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-2.f90 create mode 100644 gcc/testsuite/gfortran.dg/openacc-define-3.f90
diff --git gcc/c-family/c.opt gcc/c-family/c.opt index b862eb9..d86d79b 100644 --- gcc/c-family/c.opt +++ gcc/c-family/c.opt @@ -1065,6 +1065,10 @@ fobjc-std=objc1 ObjC ObjC++ Var(flag_objc1_only) Conform to the Objective-C 1.0 language as implemented in GCC 4.0 +fopenacc +C ObjC C++ ObjC++ Var(flag_openacc) +Enable OpenACC + fopenmp C ObjC C++ ObjC++ Var(flag_openmp) Enable OpenMP (implies -frecursive in Fortran) diff --git gcc/doc/invoke.texi gcc/doc/invoke.texi index e84bca3..e393139 100644 --- gcc/doc/invoke.texi +++ gcc/doc/invoke.texi @@ -168,7 +168,8 @@ in the following sections. @gccoptlist{-ansi -std=@var{standard} -fgnu89-inline @gol -aux-info @var{filename} -fallow-parameterless-variadic-functions @gol -fno-asm -fno-builtin -fno-builtin-@var{function} @gol --fhosted -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol +-fhosted -ffreestanding -fopenacc -fopenmp -fms-extensions @gol +-fplan9-extensions @gol -trigraphs -traditional -traditional-cpp @gol -fallow-single-precision -fcond-mismatch -flax-vector-conversions @gol -fsigned-bitfields -fsigned-char @gol @@ -1831,6 +1832,14 @@ This is equivalent to @option{-fno-hosted}. @xref{Standards,,Language Standards Supported by GCC}, for details of freestanding and hosted environments. +@item -fopenacc +@opindex fopenacc +@cindex OpenACC accelerator programming +Enable handling of OpenACC. +When @option{-fopenacc} is specified, the +compiler generates accelerated code according to the OpenACC Application +Programming Interface v2.0 @w{@uref{http://www.openacc.org/}}. + @item -fopenmp @opindex fopenmp @cindex OpenMP parallel diff --git gcc/doc/sourcebuild.texi gcc/doc/sourcebuild.texi index 1a70916..8b0031c 100644 --- gcc/doc/sourcebuild.texi +++ gcc/doc/sourcebuild.texi @@ -1787,6 +1787,9 @@ Target supports Graphite optimizations. @item fixed_point Target supports fixed-point extension to C. +@item fopenacc +Target supports OpenACC via @option{-fopenacc}. + @item fopenmp Target supports OpenMP via @option{-fopenmp}. diff --git gcc/fortran/gfortran.h gcc/fortran/gfortran.h index b28edd8..5089691 100644 --- gcc/fortran/gfortran.h +++ gcc/fortran/gfortran.h @@ -2285,6 +2285,7 @@ typedef struct int blas_matmul_limit; int flag_cray_pointer; int flag_d_lines; + int gfc_flag_openacc; int gfc_flag_openmp; int flag_sign_zero; int flag_stack_arrays; diff --git gcc/fortran/invoke.texi gcc/fortran/invoke.texi index eb678d1..46fca59 100644 --- gcc/fortran/invoke.texi +++ gcc/fortran/invoke.texi @@ -120,7 +120,7 @@ by type. Explanations are in the following sections. -ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol -ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol -fmax-identifier-length -fmodule-private -fno-fixed-form -fno-range-check @gol --fopenmp -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 @gol +-fopenacc -fopenmp -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 @gol -freal-8-real-10 -freal-8-real-16 -freal-8-real-4 -std=@var{std} } @@ -336,6 +336,11 @@ representation of the translated Fortran code, produced by Enable the Cray pointer extension, which provides C-like pointer functionality. +@item -fopenacc +@opindex @code{fopenacc} +@cindex OpenACC +Enable the OpenACC extensions. + @item -fopenmp @opindex @code{fopenmp} @cindex OpenMP diff --git gcc/fortran/lang.opt gcc/fortran/lang.opt index 4f79934..201159b 100644 --- gcc/fortran/lang.opt +++ gcc/fortran/lang.opt @@ -513,6 +513,10 @@ fmodule-private Fortran Set default accessibility of module entities to PRIVATE. +fopenacc +Fortran +; Documented in C + fopenmp Fortran ; Documented in C diff --git gcc/fortran/options.c gcc/fortran/options.c index 6e4e7c1..2298bba 100644 --- gcc/fortran/options.c +++ gcc/fortran/options.c @@ -146,6 +146,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.blas_matmul_limit = 30; gfc_option.flag_cray_pointer = 0; gfc_option.flag_d_lines = -1; + gfc_option.gfc_flag_openacc = 0; gfc_option.gfc_flag_openmp = 0; gfc_option.flag_sign_zero = 1; gfc_option.flag_recursive = 0; @@ -832,6 +833,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.source_form = FORM_FREE; break; + case OPT_fopenacc: + gfc_option.gfc_flag_openacc = value; + break; + case OPT_fopenmp: gfc_option.gfc_flag_openmp = value; break; diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-1.c gcc/testsuite/c-c++-common/cpp/openacc-define-1.c new file mode 100644 index 0000000..feaf778 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-1.c @@ -0,0 +1,2 @@ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-2.c gcc/testsuite/c-c++-common/cpp/openacc-define-2.c new file mode 100644 index 0000000..a2f3e28 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-2.c @@ -0,0 +1,3 @@ +/* { dg-options "-fno-openacc" } */ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/c-c++-common/cpp/openacc-define-3.c gcc/testsuite/c-c++-common/cpp/openacc-define-3.c new file mode 100644 index 0000000..ce270c3 --- /dev/null +++ gcc/testsuite/c-c++-common/cpp/openacc-define-3.c @@ -0,0 +1,3 @@ +/* { dg-options "-fopenacc" } */ +/* { dg-do preprocess } */ +/* { dg-require-effective-target fopenacc } */ diff --git gcc/testsuite/gfortran.dg/openacc-define-1.f90 gcc/testsuite/gfortran.dg/openacc-define-1.f90 new file mode 100644 index 0000000..b961468 --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-1.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/gfortran.dg/openacc-define-2.f90 gcc/testsuite/gfortran.dg/openacc-define-2.f90 new file mode 100644 index 0000000..49b714d --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-2.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp -fno-openacc" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/gfortran.dg/openacc-define-3.f90 gcc/testsuite/gfortran.dg/openacc-define-3.f90 new file mode 100644 index 0000000..8018d5c --- /dev/null +++ gcc/testsuite/gfortran.dg/openacc-define-3.f90 @@ -0,0 +1,3 @@ +! { dg-options "-cpp -fopenacc" } +! { dg-do preprocess } +! { dg-require-effective-target fopenacc } diff --git gcc/testsuite/lib/target-supports.exp gcc/testsuite/lib/target-supports.exp index 5ca0b76..b611708 100644 --- gcc/testsuite/lib/target-supports.exp +++ gcc/testsuite/lib/target-supports.exp @@ -718,6 +718,15 @@ proc check_effective_target_fgraphite {} { } "-O1 -fgraphite"] } +# Return 1 if compilation with -fopenacc is error-free for trivial +# code, 0 otherwise. + +proc check_effective_target_fopenacc {} { + return [check_no_compiler_messages fopenacc object { + void foo (void) { } + } "-fopenacc"] +} + # Return 1 if compilation with -fopenmp is error-free for trivial # code, 0 otherwise. -- 1.8.1.1