[nvptx offloading] Only 64-bit configurations are currently supported
authorThomas Schwinge <thomas@codesourcery.com>
Wed, 8 Jul 2015 14:59:59 +0000 (16:59 +0200)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Wed, 8 Jul 2015 14:59:59 +0000 (16:59 +0200)
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

gcc/ChangeLog
gcc/config/nvptx/mkoffload.c
libgomp/ChangeLog
libgomp/plugin/plugin-nvptx.c
libgomp/testsuite/libgomp.oacc-c++/c++.exp
libgomp/testsuite/libgomp.oacc-c/c.exp
libgomp/testsuite/libgomp.oacc-fortran/fortran.exp

index 33a2fa03099894cd9f3a1e345d8f55d0d1d953dc..4c837231db2f7ed5fa958795e16acf619fb343cc 100644 (file)
@@ -1,3 +1,9 @@
+2015-07-08  Thomas Schwinge  <thomas@codesourcery.com>
+
+       PR libgomp/65099
+       * config/nvptx/mkoffload.c (main): Create an offload image only in
+       64-bit configurations.
+
 2015-07-08  Martin Liska  <mliska@suse.cz>
 
        PR bootstrap/66744
index 8687154a1ac7c6dceb6319d2a73c2c4f69638f82..8bc08bfeaeb15af2757f45b8a0c5b9ec23e06a38 100644 (file)
@@ -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);
index 883939747561b434e4154a5786816ae672e34b33..34f3a1c86db0c4569539b67ad1478007adf6021e 100644 (file)
@@ -1,3 +1,13 @@
+2015-07-08  Thomas Schwinge  <thomas@codesourcery.com>
+
+       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  <tom@codesourcery.com>
 
        * testsuite/libgomp.c/parloops-exit-first-loop-alt-3.c (main): Fix
index ee3a0ae14a935e685cf43efd16a797a14a16e2fb..b67d3015ca520a5188380e89412c2447a1cc51bb 100644 (file)
@@ -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
index 80d135919cf2209d08211063620cadda14b8893e..3b97024492cd234b024c6ecf2f2bcfa230965b52 100644 (file)
@@ -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
 
index c0c70bbacadb271162fada69463fa9649effc118..326b988d99abc4cb627fd157bc3323968b30e3ea 100644 (file)
@@ -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
 
index a8f62e84d671a2bcdbe0bb105b46064441f49816..a8aaff0e2b17e7069f2f8cd38158e1eeb95963d8 100644 (file)
@@ -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 {