From: Thomas Schwinge Date: Wed, 8 Jul 2015 14:59:59 +0000 (+0200) Subject: [nvptx offloading] Only 64-bit configurations are currently supported X-Git-Tag: basepoints/gcc-7~5801 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a92defdab79a1268f4b9dcf42b937e4002a4cf15;p=thirdparty%2Fgcc.git [nvptx offloading] Only 64-bit configurations are currently supported PR libgomp/65099 gcc/ * config/nvptx/mkoffload.c (main): Create an offload image only in 64-bit configurations. libgomp/ * plugin/plugin-nvptx.c (nvptx_get_num_devices): Return 0 if not in a 64-bit configuration. * testsuite/libgomp.oacc-c++/c++.exp: Don't attempt nvidia offloading testing if no such device is available. * testsuite/libgomp.oacc-c/c.exp: Likewise. * testsuite/libgomp.oacc-fortran/fortran.exp: Likewise. From-SVN: r225560 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33a2fa030998..4c837231db2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-07-08 Thomas Schwinge + + PR libgomp/65099 + * config/nvptx/mkoffload.c (main): Create an offload image only in + 64-bit configurations. + 2015-07-08 Martin Liska PR bootstrap/66744 diff --git a/gcc/config/nvptx/mkoffload.c b/gcc/config/nvptx/mkoffload.c index 8687154a1ac7..8bc08bfeaeb1 100644 --- a/gcc/config/nvptx/mkoffload.c +++ b/gcc/config/nvptx/mkoffload.c @@ -993,37 +993,43 @@ main (int argc, char **argv) obstack_ptr_grow (&argv_obstack, argv[ix]); } - ptx_name = make_temp_file (".mkoffload"); - obstack_ptr_grow (&argv_obstack, "-o"); - obstack_ptr_grow (&argv_obstack, ptx_name); - obstack_ptr_grow (&argv_obstack, NULL); - const char **new_argv = XOBFINISH (&argv_obstack, const char **); - - char *execpath = getenv ("GCC_EXEC_PREFIX"); - char *cpath = getenv ("COMPILER_PATH"); - char *lpath = getenv ("LIBRARY_PATH"); - unsetenv ("GCC_EXEC_PREFIX"); - unsetenv ("COMPILER_PATH"); - unsetenv ("LIBRARY_PATH"); - - fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true); - obstack_free (&argv_obstack, NULL); - - xputenv (concat ("GCC_EXEC_PREFIX=", execpath, NULL)); - xputenv (concat ("COMPILER_PATH=", cpath, NULL)); - xputenv (concat ("LIBRARY_PATH=", lpath, NULL)); - - in = fopen (ptx_name, "r"); - if (!in) - fatal_error (input_location, "cannot open intermediate ptx file"); - ptx_cfile_name = make_temp_file (".c"); out = fopen (ptx_cfile_name, "w"); if (!out) fatal_error (input_location, "cannot open '%s'", ptx_cfile_name); - process (in, out); + /* PR libgomp/65099: Currently, we only support offloading in 64-bit + configurations. */ + if (!target_ilp32) + { + ptx_name = make_temp_file (".mkoffload"); + obstack_ptr_grow (&argv_obstack, "-o"); + obstack_ptr_grow (&argv_obstack, ptx_name); + obstack_ptr_grow (&argv_obstack, NULL); + const char **new_argv = XOBFINISH (&argv_obstack, const char **); + + char *execpath = getenv ("GCC_EXEC_PREFIX"); + char *cpath = getenv ("COMPILER_PATH"); + char *lpath = getenv ("LIBRARY_PATH"); + unsetenv ("GCC_EXEC_PREFIX"); + unsetenv ("COMPILER_PATH"); + unsetenv ("LIBRARY_PATH"); + + fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true); + obstack_free (&argv_obstack, NULL); + + xputenv (concat ("GCC_EXEC_PREFIX=", execpath, NULL)); + xputenv (concat ("COMPILER_PATH=", cpath, NULL)); + xputenv (concat ("LIBRARY_PATH=", lpath, NULL)); + + in = fopen (ptx_name, "r"); + if (!in) + fatal_error (input_location, "cannot open intermediate ptx file"); + + process (in, out); + } + fclose (out); compile_native (ptx_cfile_name, outname, collect_gcc); diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 883939747561..34f3a1c86db0 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,13 @@ +2015-07-08 Thomas Schwinge + + PR libgomp/65099 + * plugin/plugin-nvptx.c (nvptx_get_num_devices): Return 0 if not + in a 64-bit configuration. + * testsuite/libgomp.oacc-c++/c++.exp: Don't attempt nvidia + offloading testing if no such device is available. + * testsuite/libgomp.oacc-c/c.exp: Likewise. + * testsuite/libgomp.oacc-fortran/fortran.exp: Likewise. + 2015-07-08 Tom de Vries * testsuite/libgomp.c/parloops-exit-first-loop-alt-3.c (main): Fix diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index ee3a0ae14a93..b67d3015ca52 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -777,6 +777,11 @@ nvptx_get_num_devices (void) int n; CUresult r; + /* PR libgomp/65099: Currently, we only support offloading in 64-bit + configurations. */ + if (sizeof (void *) != 8) + return 0; + /* This function will be called before the plugin has been initialized in order to enumerate available devices, but CUDA API routines can't be used until cuInit has been called. Just call it now (but don't yet do any diff --git a/libgomp/testsuite/libgomp.oacc-c++/c++.exp b/libgomp/testsuite/libgomp.oacc-c++/c++.exp index 80d135919cf2..3b97024492cd 100644 --- a/libgomp/testsuite/libgomp.oacc-c++/c++.exp +++ b/libgomp/testsuite/libgomp.oacc-c++/c++.exp @@ -85,6 +85,12 @@ if { $lang_test_file_found } { set acc_mem_shared 0 } nvidia { + if { ![check_effective_target_openacc_nvidia_accel_present] } { + # Don't bother; execution testing is going to FAIL. + untested "$subdir $offload_target_openacc offloading" + continue + } + # Copy ptx file (TEMPORARY) remote_download host $srcdir/libgomp.oacc-c-c++-common/subr.ptx diff --git a/libgomp/testsuite/libgomp.oacc-c/c.exp b/libgomp/testsuite/libgomp.oacc-c/c.exp index c0c70bbacadb..326b988d99ab 100644 --- a/libgomp/testsuite/libgomp.oacc-c/c.exp +++ b/libgomp/testsuite/libgomp.oacc-c/c.exp @@ -48,6 +48,12 @@ foreach offload_target_openacc $offload_targets_s_openacc { set acc_mem_shared 0 } nvidia { + if { ![check_effective_target_openacc_nvidia_accel_present] } { + # Don't bother; execution testing is going to FAIL. + untested "$subdir $offload_target_openacc offloading" + continue + } + # Copy ptx file (TEMPORARY) remote_download host $srcdir/libgomp.oacc-c-c++-common/subr.ptx diff --git a/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp b/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp index a8f62e84d671..a8aaff0e2b17 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp +++ b/libgomp/testsuite/libgomp.oacc-fortran/fortran.exp @@ -77,6 +77,12 @@ if { $lang_test_file_found } { set acc_mem_shared 0 } nvidia { + if { ![check_effective_target_openacc_nvidia_accel_present] } { + # Don't bother; execution testing is going to FAIL. + untested "$subdir $offload_target_openacc offloading" + continue + } + set acc_mem_shared 0 } default {