diff mbox

[committed,PR64672] Make fopenacc an LTO option

Message ID 54C26705.2050007@mentor.com
State New
Headers show

Commit Message

Tom de Vries Jan. 23, 2015, 3:21 p.m. UTC
Hi,

This patch fixes PR64672.

It marks fopenacc as LTO option, which enables openacc builtins in lto1.

Bootstrapped, reg-tested on x86_64 and committed.

Thanks,
- Tom
diff mbox

Patch

2015-01-22  Tom de Vries  <tom@codesourcery.com>

	PR libgomp/64672
	* lto-opts.c (lto_write_options): Output non-explicit conservative
	-fno-openacc.
	* lto-wrapper.c (merge_and_complain): Handle merging -fopenacc.
	(append_compiler_options): Pass -fopenacc through.

	* c.opt (fopenacc): Mark as LTO option.

	* lang.opt (fopenacc): Mark as LTO option.

	* testsuite/libgomp.oacc-c-c++-common/abort-5.c: New test.
---
 gcc/c-family/c.opt                                    |  2 +-
 gcc/fortran/lang.opt                                  |  2 +-
 gcc/lto-opts.c                                        |  4 ++++
 gcc/lto-wrapper.c                                     |  2 ++
 libgomp/testsuite/libgomp.oacc-c-c++-common/abort-5.c | 18 ++++++++++++++++++
 5 files changed, 26 insertions(+), 2 deletions(-)
 create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/abort-5.c

diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 4b92022..fd00407 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1284,7 +1284,7 @@  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)
+C ObjC C++ ObjC++ LTO Var(flag_openacc)
 Enable OpenACC
 
 fopenmp
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 0360f6c..d86376a 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -567,7 +567,7 @@  Fortran Var(flag_module_private)
 Set default accessibility of module entities to PRIVATE.
 
 fopenacc
-Fortran
+Fortran LTO
 ; Documented in C
 
 fopenmp
diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c
index d44dba0..279107f 100644
--- a/gcc/lto-opts.c
+++ b/gcc/lto-opts.c
@@ -169,6 +169,10 @@  lto_write_options (void)
   if (!global_options_set.x_flag_openmp
       && !global_options.x_flag_openmp)
     append_to_collect_gcc_options (&temporary_obstack, &first_p, "-fno-openmp");
+  if (!global_options_set.x_flag_openacc
+      && !global_options.x_flag_openacc)
+    append_to_collect_gcc_options (&temporary_obstack, &first_p,
+				   "-fno-openacc");
 
   /* Append options from target hook and store them to offload_lto section.  */
   if (lto_stream_offload_p)
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 2d0d451..e950771 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -272,6 +272,7 @@  merge_and_complain (struct cl_decoded_option **decoded_options,
 	case OPT_ftrapping_math:
 	case OPT_fwrapv:
 	case OPT_fopenmp:
+	case OPT_fopenacc:
 	  /* For selected options we can merge conservatively.  */
 	  for (j = 0; j < *decoded_options_count; ++j)
 	    if ((*decoded_options)[j].opt_index == foption->opt_index)
@@ -492,6 +493,7 @@  append_compiler_options (obstack *argv_obstack, struct cl_decoded_option *opts,
 	case OPT_ftrapping_math:
 	case OPT_fwrapv:
 	case OPT_fopenmp:
+	case OPT_fopenacc:
 	case OPT_ftrapv:
 	case OPT_fstrict_overflow:
 	case OPT_foffload_abi_:
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/abort-5.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/abort-5.c
new file mode 100644
index 0000000..314f04a
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/abort-5.c
@@ -0,0 +1,18 @@ 
+/* { dg-do run } */
+/* { dg-additional-options "-flto" { target lto } } */
+
+#include <stdlib.h>
+
+int
+main (int argc, char **argv)
+{
+
+#pragma acc parallel
+  {
+    if (argc != 1)
+      abort ();
+  }
+
+  return 0;
+}
+
-- 
1.9.1