[gomp4 3/9] OpenACC: Recognize -fopenacc.
thomas@codesourcery.com
thomas@codesourcery.com
Wed Nov 6 19:47:00 GMT 2013
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
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
More information about the Gcc-patches
mailing list