[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