This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gomp4] Add -foffload-abi support for PPC


Hi,

The attached patch adds the -foffload-abi option support for PPC.
Only support for the 64-bit ABI has been added.

Committed after regtesting with x86_64 and powerpc64le.

Thanks!
Jim


diff --git a/gcc/ChangeLog.gomp b/gcc/ChangeLog.gomp
index a65e652..40326cf 100644
--- a/gcc/ChangeLog.gomp
+++ b/gcc/ChangeLog.gomp
@@ -1,3 +1,11 @@
+2015-10-06 James Norris  <jnorris@codesourcery.com>
+
+	* common.opt (OFFLOAD_ABI_PPC64): New enum.
+	* config/nvptx/mkoffload.c (compile_native): Handle new enum.
+	(main): Handle new option.
+	* config/rs6000/rs6000.c (rs6000_offload_options): New hook.
+	* gcc/coretypes.h (OFFLOAD_ABI_PPC64): New enum.
+
 2015-10-05  Thomas Schwinge  <thomas@codesourcery.com>
 
 	* config/nvptx/mkoffload.c (main): Don't explicitly pass "-lgomp"
diff --git a/gcc/common.opt b/gcc/common.opt
index 290b6b3..c366667 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1730,6 +1730,9 @@ Enum(offload_abi) String(ilp32) Value(OFFLOAD_ABI_ILP32)
 EnumValue
 Enum(offload_abi) String(lp64) Value(OFFLOAD_ABI_LP64)
 
+EnumValue
+Enum(offload_abi) String(ppc64) Value(OFFLOAD_ABI_PPC64)
+
 fomit-frame-pointer
 Common Report Var(flag_omit_frame_pointer) Optimization
 When possible do not generate stack frames
diff --git a/gcc/config/nvptx/mkoffload.c b/gcc/config/nvptx/mkoffload.c
index e398b44..743df4b 100644
--- a/gcc/config/nvptx/mkoffload.c
+++ b/gcc/config/nvptx/mkoffload.c
@@ -367,6 +367,8 @@ compile_native (const char *infile, const char *outfile, const char *compiler)
     case OFFLOAD_ABI_ILP32:
       obstack_ptr_grow (&argv_obstack, "-m32");
       break;
+    case OFFLOAD_ABI_PPC64:
+      break;
     default:
       gcc_unreachable ();
     }
@@ -458,6 +460,8 @@ main (int argc, char **argv)
 	    offload_abi = OFFLOAD_ABI_LP64;
 	  else if (strcmp (argv[i] + strlen (STR), "ilp32") == 0)
 	    offload_abi = OFFLOAD_ABI_ILP32;
+	  else if (strcmp (argv[i] + strlen (STR), "ppc64") == 0)
+	    offload_abi = OFFLOAD_ABI_PPC64;
 	  else
 	    fatal_error (input_location,
 			 "unrecognizable argument of option " STR);
@@ -485,6 +489,8 @@ main (int argc, char **argv)
     case OFFLOAD_ABI_ILP32:
       obstack_ptr_grow (&argv_obstack, "-m32");
       break;
+    case OFFLOAD_ABI_PPC64:
+      break;
     default:
       gcc_unreachable ();
     }
@@ -518,7 +524,8 @@ main (int argc, char **argv)
 
   /* PR libgomp/65099: Currently, we only support offloading in 64-bit
      configurations, and only for OpenACC offloading.  */
-  if (offload_abi == OFFLOAD_ABI_LP64 && fopenacc)
+  if ((offload_abi == OFFLOAD_ABI_LP64
+      || (offload_abi == OFFLOAD_ABI_PPC64)) && fopenacc)
     {
       ptx_name = make_temp_file (".mkoffload");
       obstack_ptr_grow (&argv_obstack, "-o");
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 023f622..146b45b 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1688,6 +1688,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
 #define TARGET_LIBGCC_SHIFT_COUNT_MODE rs6000_abi_word_mode
 #undef TARGET_UNWIND_WORD_MODE
 #define TARGET_UNWIND_WORD_MODE rs6000_abi_word_mode
+
+#undef TARGET_OFFLOAD_OPTIONS
+#define TARGET_OFFLOAD_OPTIONS rs6000_offload_options
 
 
 /* Processor table.  */
@@ -9532,6 +9535,13 @@ rs6000_abi_word_mode (void)
   return TARGET_32BIT ? SImode : DImode;
 }
 
+/* Implement the TARGET_OFFLOAD_OPTIONS hook.  */
+static char *
+rs6000_offload_options (void)
+{
+  return xstrdup ("-foffload-abi=ppc64");
+}
+
 /* On rs6000, function arguments are promoted, as are function return
    values.  */
 
diff --git a/gcc/coretypes.h b/gcc/coretypes.h
index 7b3df54..3bb0528 100644
--- a/gcc/coretypes.h
+++ b/gcc/coretypes.h
@@ -170,7 +170,8 @@ enum tls_model {
 enum offload_abi {
   OFFLOAD_ABI_UNSET,
   OFFLOAD_ABI_LP64,
-  OFFLOAD_ABI_ILP32
+  OFFLOAD_ABI_ILP32,
+  OFFLOAD_ABI_PPC64
 };
 
 /* Types of unwind/exception handling info that can be generated.  */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]