This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] nvptx mkoffload changes
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Nathan Sidwell <nathan at acm dot org>
- Date: Wed, 20 Apr 2016 20:05:50 +0300 (MSK)
- Subject: [PATCH] nvptx mkoffload changes
- Authentication-results: sourceware.org; auth=none
Handle OpenMP offloading in NVPTX mkoffload.
Previously posted here:
[gomp-nvptx 7/9] nvptx mkoffload: pass -mgomp for OpenMP offloading
https://gcc.gnu.org/ml/gcc-patches/2015-12/msg00121.html
2015-12-09 Alexander Monakov <amonakov@ispras.ru>
* config/nvptx/mkoffload.c (main): Check that either OpenACC or OpenMP
is selected. Pass -mgomp to offload compiler in OpenMP case.
2015-12-08 Alexander Monakov <amonakov@ispras.ru>
* config/nvptx/mkoffload.c (main): Allow -fopenmp.
diff --git a/gcc/config/nvptx/mkoffload.c b/gcc/config/nvptx/mkoffload.c
index c8eed45..e99ef37 100644
--- a/gcc/config/nvptx/mkoffload.c
+++ b/gcc/config/nvptx/mkoffload.c
@@ -460,6 +460,7 @@ main (int argc, char **argv)
/* Scan the argument vector. */
bool fopenmp = false;
+ bool fopenacc = false;
for (int i = 1; i < argc; i++)
{
#define STR "-foffload-abi="
@@ -476,11 +477,15 @@ main (int argc, char **argv)
#undef STR
else if (strcmp (argv[i], "-fopenmp") == 0)
fopenmp = true;
+ else if (strcmp (argv[i], "-fopenacc") == 0)
+ fopenacc = true;
else if (strcmp (argv[i], "-save-temps") == 0)
save_temps = true;
else if (strcmp (argv[i], "-v") == 0)
verbose = true;
}
+ if (!(fopenacc ^ fopenmp))
+ fatal_error (input_location, "either -fopenacc or -fopenmp must be set");
struct obstack argv_obstack;
obstack_init (&argv_obstack);
@@ -501,6 +506,8 @@ main (int argc, char **argv)
default:
gcc_unreachable ();
}
+ if (fopenmp)
+ obstack_ptr_grow (&argv_obstack, "-mgomp");
for (int ix = 1; ix != argc; ix++)
{
@@ -517,8 +524,8 @@ main (int argc, char **argv)
fatal_error (input_location, "cannot open '%s'", ptx_cfile_name);
/* PR libgomp/65099: Currently, we only support offloading in 64-bit
- configurations. PR target/67822: OpenMP offloading to nvptx fails. */
- if (offload_abi == OFFLOAD_ABI_LP64 && !fopenmp)
+ configurations. */
+ if (offload_abi == OFFLOAD_ABI_LP64)
{
ptx_name = make_temp_file (".mkoffload");
obstack_ptr_grow (&argv_obstack, "-o");