@@ -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)
@@ -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
@@ -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}.
@@ -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;
@@ -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
@@ -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
@@ -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;
new file mode 100644
@@ -0,0 +1,2 @@
+/* { dg-do preprocess } */
+/* { dg-require-effective-target fopenacc } */
new file mode 100644
@@ -0,0 +1,3 @@
+/* { dg-options "-fno-openacc" } */
+/* { dg-do preprocess } */
+/* { dg-require-effective-target fopenacc } */
new file mode 100644
@@ -0,0 +1,3 @@
+/* { dg-options "-fopenacc" } */
+/* { dg-do preprocess } */
+/* { dg-require-effective-target fopenacc } */
new file mode 100644
@@ -0,0 +1,3 @@
+! { dg-options "-cpp" }
+! { dg-do preprocess }
+! { dg-require-effective-target fopenacc }
new file mode 100644
@@ -0,0 +1,3 @@
+! { dg-options "-cpp -fno-openacc" }
+! { dg-do preprocess }
+! { dg-require-effective-target fopenacc }
new file mode 100644
@@ -0,0 +1,3 @@
+! { dg-options "-cpp -fopenacc" }
+! { dg-do preprocess }
+! { dg-require-effective-target fopenacc }
@@ -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.
From: Thomas Schwinge <thomas@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