Hi!

Ping.

On Wed, 13 Jul 2016 12:37:07 +0200, I wrote:
> As discussed before, "offloading compilation is slow; I suppose because
> of having to invoke several tools (LTO streaming -> mkoffload -> offload
> compilers, assemblers, linkers -> combine the resulting images; but I
> have not done a detailed analysis on that)".  For this reason it is
> beneficial (that is, it is measurable in libgomp testing wall time) to
> limit offload compilation to the one (in the OpenACC case) offload target
> that we're actually going to test (that is, execute).  Another reason is
> that -foffload=-fdump-tree-[...] produces clashes (that is,
> unpredicatable outcome) in the file names of offload compilations' dump
> files' names.  Here is a patch to implement that, to specify
> -foffload=[...] during libgomp OpenACC testing.  As that has been
> challenged before:
> 
> | [...] there actually is a difference between offload_plugins and
> | offload_targets (for example, "intelmic"
> | vs. "x86_64-intelmicemul-linux-gnu"), and I'm using both variables --
> | to avoid having to translate the more specific
> | "x86_64-intelmicemul-linux-gnu" (which we required in the test harness)
> | into the less specific "intelmic" (for plugin loading) in
> | libgomp/target.c.  I can do that, so that we can continue to use just a
> | single offload_targets variable, but I consider that a less elegant
> | solution.
> 
> OK for trunk?
> 
> commit 5fdb515826769ebb36bc5c49a3ffac4d17a8a589
> Author: Thomas Schwinge <tho...@codesourcery.com>
> Date:   Wed Jul 13 11:37:16 2016 +0200
> 
>     libgomp: In OpenACC testing, cycle though $offload_targets, and by 
> default only build for the offload target that we're actually going to test
>     
>       libgomp/
>       * plugin/configfrag.ac: Enumerate both offload plugins and offload
>       targets.
>       (OFFLOAD_PLUGINS): Renamed from OFFLOAD_TARGETS.
>       * target.c (gomp_target_init): Adjust to that.
>       * testsuite/lib/libgomp.exp: Likewise.
>       (offload_targets_s, offload_targets_s_openacc): Remove variables.
>       (offload_target_to_openacc_device_type): New proc.
>       (check_effective_target_openacc_nvidia_accel_selected)
>       (check_effective_target_openacc_host_selected): Examine
>       $openacc_device_type instead of $offload_target_openacc.
>       * Makefile.in: Regenerate.
>       * config.h.in: Likewise.
>       * configure: Likewise.
>       * testsuite/Makefile.in: Likewise.
>       * testsuite/libgomp.oacc-c++/c++.exp: Cycle through
>       $offload_targets (plus "disable") instead of
>       $offload_targets_s_openacc, and add "-foffload=$offload_target" to
>       tagopt.
>       * testsuite/libgomp.oacc-c/c.exp: Likewise.
>       * testsuite/libgomp.oacc-fortran/fortran.exp: Likewise.
> ---
>  libgomp/Makefile.in                                |  1 +
>  libgomp/config.h.in                                |  4 +-
>  libgomp/configure                                  | 44 +++++++------
>  libgomp/plugin/configfrag.ac                       | 39 +++++++-----
>  libgomp/target.c                                   |  8 +--
>  libgomp/testsuite/Makefile.in                      |  1 +
>  libgomp/testsuite/lib/libgomp.exp                  | 72 
> ++++++++++------------
>  libgomp/testsuite/libgomp.oacc-c++/c++.exp         | 30 +++++----
>  libgomp/testsuite/libgomp.oacc-c/c.exp             | 30 +++++----
>  libgomp/testsuite/libgomp.oacc-fortran/fortran.exp | 22 ++++---
>  10 files changed, 142 insertions(+), 109 deletions(-)
> 
> diff --git libgomp/Makefile.in libgomp/Makefile.in
> index 88c8517..33be8c7 100644
> --- libgomp/Makefile.in
> +++ libgomp/Makefile.in
> @@ -380,6 +380,7 @@ mkdir_p = @mkdir_p@
>  multi_basedir = @multi_basedir@
>  offload_additional_lib_paths = @offload_additional_lib_paths@
>  offload_additional_options = @offload_additional_options@
> +offload_plugins = @offload_plugins@
>  offload_targets = @offload_targets@
>  oldincludedir = @oldincludedir@
>  pdfdir = @pdfdir@
> diff --git libgomp/config.h.in libgomp/config.h.in
> index 226ac53..28f7b2d 100644
> --- libgomp/config.h.in
> +++ libgomp/config.h.in
> @@ -98,8 +98,8 @@
>     */
>  #undef LT_OBJDIR
>  
> -/* Define to offload targets, separated by commas. */
> -#undef OFFLOAD_TARGETS
> +/* Define to offload plugins, separated by commas. */
> +#undef OFFLOAD_PLUGINS
>  
>  /* Name of package */
>  #undef PACKAGE
> diff --git libgomp/configure libgomp/configure
> index 8d03eb6..4baab20 100755
> --- libgomp/configure
> +++ libgomp/configure
> @@ -633,6 +633,8 @@ PLUGIN_NVPTX_FALSE
>  PLUGIN_NVPTX_TRUE
>  offload_additional_lib_paths
>  offload_additional_options
> +offload_targets
> +offload_plugins
>  PLUGIN_HSA_LIBS
>  PLUGIN_HSA_LDFLAGS
>  PLUGIN_HSA_CPPFLAGS
> @@ -646,7 +648,6 @@ PLUGIN_NVPTX_CPPFLAGS
>  PLUGIN_NVPTX
>  CUDA_DRIVER_LIB
>  CUDA_DRIVER_INCLUDE
> -offload_targets
>  libtool_VERSION
>  ac_ct_FC
>  FCFLAGS
> @@ -11145,7 +11146,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 11148 "configure"
> +#line 11149 "configure"
>  #include "confdefs.h"
>  
>  #if HAVE_DLFCN_H
> @@ -11251,7 +11252,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 11254 "configure"
> +#line 11255 "configure"
>  #include "confdefs.h"
>  
>  #if HAVE_DLFCN_H
> @@ -15140,8 +15141,6 @@ esac
>  # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
>  # <http://www.gnu.org/licenses/>.
>  
> -offload_targets=
> -
>  plugin_support=yes
>  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5
>  $as_echo_n "checking for dlsym in -ldl... " >&6; }
> @@ -15320,7 +15319,13 @@ PLUGIN_HSA_LIBS=
>  
>  
>  
> -# Get offload targets and path to install tree of offloading compiler.
> +# Parse offload targets, and figure out libgomp plugin, and configure the
> +# corresponding offload compiler.  offload_plugins and offload_targets will 
> be
> +# populated in the same order.
> +offload_plugins=
> +offload_targets=
> +
> +
>  offload_additional_options=
>  offload_additional_lib_paths=
>  
> @@ -15329,13 +15334,13 @@ if test x"$enable_offload_targets" != x; then
>    for tgt in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
>      tgt_dir=`echo $tgt | grep '=' | sed 's/.*=//'`
>      tgt=`echo $tgt | sed 's/=.*//'`
> -    tgt_name=
> +    tgt_plugin=
>      case $tgt in
>        *-intelmic-* | *-intelmicemul-*)
> -     tgt_name=intelmic
> +     tgt_plugin=intelmic
>       ;;
>        nvptx*)
> -        tgt_name=nvptx
> +     tgt_plugin=nvptx
>       PLUGIN_NVPTX=$tgt
>       PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
>       PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
> @@ -15373,7 +15378,7 @@ rm -f core conftest.err conftest.$ac_objext \
>           ;;
>       esac
>       ;;
> -      hsa*)
> +      hsa)
>       case "${target}" in
>         x86_64-*-*)
>           case " ${CC} ${CFLAGS} " in
> @@ -15381,7 +15386,7 @@ rm -f core conftest.err conftest.$ac_objext \
>               PLUGIN_HSA=0
>               ;;
>             *)
> -             tgt_name=hsa
> +             tgt_plugin=hsa
>               PLUGIN_HSA=$tgt
>               PLUGIN_HSA_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
>               PLUGIN_HSA_LDFLAGS="$HSA_RUNTIME_LDFLAGS $HSA_KMT_LDFLAGS"
> @@ -15414,7 +15419,7 @@ rm -f core conftest.err conftest.$ac_objext \
>               LDFLAGS=$PLUGIN_HSA_save_LDFLAGS
>               LIBS=$PLUGIN_HSA_save_LIBS
>               case $PLUGIN_HSA in
> -               hsa*)
> +               hsa)
>                   HSA_PLUGIN=0
>                   as_fn_error "HSA run-time package required for HSA support" 
> "$LINENO" 5
>                   ;;
> @@ -15431,16 +15436,19 @@ rm -f core conftest.err conftest.$ac_objext \
>       as_fn_error "unknown offload target specified" "$LINENO" 5
>       ;;
>      esac
> -    if test x"$tgt_name" = x; then
> +    if test x"$tgt_plugin" = x; then
>        # Don't configure libgomp for this offloading target if we don't build
>        # the corresponding plugin.
>        continue
> -    elif test x"$offload_targets" = x; then
> -      offload_targets=$tgt_name
> +    elif test x"$offload_plugins" = x; then
> +      offload_plugins=$tgt_plugin
> +      offload_targets=$tgt
>      else
> -      offload_targets=$offload_targets,$tgt_name
> +      offload_plugins=$offload_plugins,$tgt_plugin
> +      offload_targets=$offload_targets,$tgt
>      fi
> -    if test "$tgt_name" = hsa; then
> +    # Configure additional search paths.
> +    if test "$tgt_plugin" = hsa; then
>        # Offloading compilation is all handled by the target compiler.
>        :
>      elif test x"$tgt_dir" != x; then
> @@ -15454,7 +15462,7 @@ rm -f core conftest.err conftest.$ac_objext \
>  fi
>  
>  cat >>confdefs.h <<_ACEOF
> -#define OFFLOAD_TARGETS "$offload_targets"
> +#define OFFLOAD_PLUGINS "$offload_plugins"
>  _ACEOF
>  
>   if test $PLUGIN_NVPTX = 1; then
> diff --git libgomp/plugin/configfrag.ac libgomp/plugin/configfrag.ac
> index 88b4156..de0a6f6 100644
> --- libgomp/plugin/configfrag.ac
> +++ libgomp/plugin/configfrag.ac
> @@ -26,8 +26,6 @@
>  # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
>  # <http://www.gnu.org/licenses/>.
>  
> -offload_targets=
> -AC_SUBST(offload_targets)
>  plugin_support=yes
>  AC_CHECK_LIB(dl, dlsym, , [plugin_support=no])
>  if test x"$plugin_support" = xyes; then
> @@ -142,7 +140,13 @@ AC_SUBST(PLUGIN_HSA_LIBS)
>  
>  
>  
> -# Get offload targets and path to install tree of offloading compiler.
> +# Parse offload targets, and figure out libgomp plugin, and configure the
> +# corresponding offload compiler.  offload_plugins and offload_targets will 
> be
> +# populated in the same order.
> +offload_plugins=
> +offload_targets=
> +AC_SUBST(offload_plugins)
> +AC_SUBST(offload_targets)
>  offload_additional_options=
>  offload_additional_lib_paths=
>  AC_SUBST(offload_additional_options)
> @@ -151,13 +155,13 @@ if test x"$enable_offload_targets" != x; then
>    for tgt in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
>      tgt_dir=`echo $tgt | grep '=' | sed 's/.*=//'`
>      tgt=`echo $tgt | sed 's/=.*//'`
> -    tgt_name=
> +    tgt_plugin=
>      case $tgt in
>        *-intelmic-* | *-intelmicemul-*)
> -     tgt_name=intelmic
> +     tgt_plugin=intelmic
>       ;;
>        nvptx*)
> -        tgt_name=nvptx
> +     tgt_plugin=nvptx
>       PLUGIN_NVPTX=$tgt
>       PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
>       PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
> @@ -184,7 +188,7 @@ if test x"$enable_offload_targets" != x; then
>           ;;
>       esac
>       ;;
> -      hsa*)
> +      hsa)
>       case "${target}" in
>         x86_64-*-*)
>           case " ${CC} ${CFLAGS} " in
> @@ -192,7 +196,7 @@ if test x"$enable_offload_targets" != x; then
>               PLUGIN_HSA=0
>               ;;
>             *)
> -             tgt_name=hsa
> +             tgt_plugin=hsa
>               PLUGIN_HSA=$tgt
>               PLUGIN_HSA_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
>               PLUGIN_HSA_LDFLAGS="$HSA_RUNTIME_LDFLAGS $HSA_KMT_LDFLAGS"
> @@ -214,7 +218,7 @@ if test x"$enable_offload_targets" != x; then
>               LDFLAGS=$PLUGIN_HSA_save_LDFLAGS
>               LIBS=$PLUGIN_HSA_save_LIBS
>               case $PLUGIN_HSA in
> -               hsa*)
> +               hsa)
>                   HSA_PLUGIN=0
>                   AC_MSG_ERROR([HSA run-time package required for HSA 
> support])
>                   ;;
> @@ -231,16 +235,19 @@ if test x"$enable_offload_targets" != x; then
>       AC_MSG_ERROR([unknown offload target specified])
>       ;;
>      esac
> -    if test x"$tgt_name" = x; then
> +    if test x"$tgt_plugin" = x; then
>        # Don't configure libgomp for this offloading target if we don't build
>        # the corresponding plugin.
>        continue
> -    elif test x"$offload_targets" = x; then
> -      offload_targets=$tgt_name
> +    elif test x"$offload_plugins" = x; then
> +      offload_plugins=$tgt_plugin
> +      offload_targets=$tgt
>      else
> -      offload_targets=$offload_targets,$tgt_name
> +      offload_plugins=$offload_plugins,$tgt_plugin
> +      offload_targets=$offload_targets,$tgt
>      fi
> -    if test "$tgt_name" = hsa; then
> +    # Configure additional search paths.
> +    if test "$tgt_plugin" = hsa; then
>        # Offloading compilation is all handled by the target compiler.
>        :
>      elif test x"$tgt_dir" != x; then
> @@ -252,8 +259,8 @@ if test x"$enable_offload_targets" != x; then
>      fi
>    done
>  fi
> -AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets",
> -  [Define to offload targets, separated by commas.])
> +AC_DEFINE_UNQUOTED(OFFLOAD_PLUGINS, "$offload_plugins",
> +  [Define to offload plugins, separated by commas.])
>  AM_CONDITIONAL([PLUGIN_NVPTX], [test $PLUGIN_NVPTX = 1])
>  AC_DEFINE_UNQUOTED([PLUGIN_NVPTX], [$PLUGIN_NVPTX],
>    [Define to 1 if the NVIDIA plugin is built, 0 if not.])
> diff --git libgomp/target.c libgomp/target.c
> index 48b9ab8..2b7e627 100644
> --- libgomp/target.c
> +++ libgomp/target.c
> @@ -2474,9 +2474,9 @@ gomp_target_fini (void)
>      }
>  }
>  
> -/* This function initializes the runtime needed for offloading.
> -   It parses the list of offload targets and tries to load the plugins for
> -   these targets.  On return, the variables NUM_DEVICES and 
> NUM_DEVICES_OPENMP
> +/* This function initializes the runtime for offloading.
> +   It parses the list of offload plugins, and tries to load these.
> +   On return, the variables NUM_DEVICES and NUM_DEVICES_OPENMP
>     will be set, and the array DEVICES initialized, containing descriptors for
>     corresponding devices, first the GOMP_OFFLOAD_CAP_OPENMP_400 ones, follows
>     by the others.  */
> @@ -2493,7 +2493,7 @@ gomp_target_init (void)
>    num_devices = 0;
>    devices = NULL;
>  
> -  cur = OFFLOAD_TARGETS;
> +  cur = OFFLOAD_PLUGINS;
>    if (*cur)
>      do
>        {
> diff --git libgomp/testsuite/Makefile.in libgomp/testsuite/Makefile.in
> index 4dbb406..2092dcd 100644
> --- libgomp/testsuite/Makefile.in
> +++ libgomp/testsuite/Makefile.in
> @@ -223,6 +223,7 @@ mkdir_p = @mkdir_p@
>  multi_basedir = @multi_basedir@
>  offload_additional_lib_paths = @offload_additional_lib_paths@
>  offload_additional_options = @offload_additional_options@
> +offload_plugins = @offload_plugins@
>  offload_targets = @offload_targets@
>  oldincludedir = @oldincludedir@
>  pdfdir = @pdfdir@
> diff --git libgomp/testsuite/lib/libgomp.exp libgomp/testsuite/lib/libgomp.exp
> index 1cb4991..4a25421 100644
> --- libgomp/testsuite/lib/libgomp.exp
> +++ libgomp/testsuite/lib/libgomp.exp
> @@ -36,28 +36,6 @@ load_gcc_lib fortran-modules.exp
>  # Try to load a test support file, built during libgomp configuration.
>  load_file libgomp-test-support.exp
>  
> -# Populate offload_targets_s (offloading targets separated by a space), and
> -# offload_targets_s_openacc (the same, but with OpenACC names; OpenACC spells
> -# some of them a little differently).
> -set offload_targets_s [split $offload_targets ","]
> -set offload_targets_s_openacc {}
> -foreach offload_target_openacc $offload_targets_s {
> -    # Translate to OpenACC names, or skip if not yet supported.
> -    switch $offload_target_openacc {
> -     intelmic {
> -         continue
> -     }
> -     nvptx {
> -         set offload_target_openacc "nvidia"
> -     }
> -     hsa {
> -         continue
> -     }
> -    }
> -    lappend offload_targets_s_openacc "$offload_target_openacc"
> -}
> -lappend offload_targets_s_openacc "host"
> -
>  set dg-do-what-default run
>  
>  #
> @@ -135,9 +113,9 @@ proc libgomp_init { args } {
>      set always_ld_library_path ".:${blddir}/.libs"
>  
>      # Add liboffloadmic build directory in LD_LIBRARY_PATH to support
> -    # non-fallback testing for Intel MIC targets
> +    # Intel MIC offloading testing.
>      global offload_targets
> -    if { [string match "*,intelmic,*" ",$offload_targets,"] } {
> +    if { [string match "*,*-intelmic*,*" ",$offload_targets,"] } {
>       append always_ld_library_path ":${blddir}/../liboffloadmic/.libs"
>       append always_ld_library_path ":${blddir}/../liboffloadmic/plugin/.libs"
>       # libstdc++ is required by liboffloadmic
> @@ -245,8 +223,7 @@ proc libgomp_init { args } {
>      # Disable color diagnostics
>      lappend ALWAYS_CFLAGS "additional_flags=-fdiagnostics-color=never"
>  
> -    # Used for support non-fallback offloading.
> -    # Help GCC to find target mkoffload.
> +    # Help GCC to find offload compilers' mkoffload.
>      global offload_additional_options
>      if { $offload_additional_options != "" } {
>       lappend ALWAYS_CFLAGS "additional_flags=${offload_additional_options}"
> @@ -322,6 +299,28 @@ proc libgomp_option_proc { option } {
>      }
>  }
>  
> +# Translate offload target to OpenACC device type.  Return the empty string 
> if
> +# not suitable or not yet supported, and "host" for offload target "disable".
> +proc offload_target_to_openacc_device_type { offload_target } {
> +    switch -glob $offload_target {
> +     disable {
> +         return "host"
> +     }
> +     hsa {
> +         return ""
> +     }
> +     *-intelmic* {
> +         return ""
> +     }
> +     nvptx* {
> +         return "nvidia"
> +     }
> +     default {
> +         error "Unknwon offload target: $offload_target"
> +     }
> +    }
> +}
> +
>  # Return 1 if offload device is available.
>  proc check_effective_target_offload_device { } {
>      return [check_runtime_nocache offload_device_available_ {
> @@ -373,29 +372,22 @@ proc 
> check_effective_target_openacc_nvidia_accel_present { } {
>      } "" ]
>  }
>  
> -# Return 1 if at least one nvidia board is present, and the nvidia device 
> type
> -# is selected by default by means of setting the environment variable
> -# ACC_DEVICE_TYPE.
> +# Return 1 if at least one nvidia board is present, and the OpenACC "nvidia"
> +# device type is selected.
>  
>  proc check_effective_target_openacc_nvidia_accel_selected { } {
>      if { ![check_effective_target_openacc_nvidia_accel_present] } {
>       return 0;
>      }
> -    global offload_target_openacc
> -    if { $offload_target_openacc == "nvidia" } {
> -        return 1;
> -    }
> -    return 0;
> +    global openacc_device_type
> +    return [string match "nvidia" $openacc_device_type]
>  }
>  
> -# Return 1 if the host target is selected for offloaded
> +# Return 1 if the OpenACC "host" device type is selected.
>  
>  proc check_effective_target_openacc_host_selected { } {
> -    global offload_target_openacc
> -    if { $offload_target_openacc == "host" } {
> -        return 1;
> -    }
> -    return 0;
> +    global openacc_device_type
> +    return [string match "host" $openacc_device_type]
>  }
>  
>  # Return 1 if the selected OMP device is actually a HSA device
> diff --git libgomp/testsuite/libgomp.oacc-c++/c++.exp 
> libgomp/testsuite/libgomp.oacc-c++/c++.exp
> index 608b298..befb921 100644
> --- libgomp/testsuite/libgomp.oacc-c++/c++.exp
> +++ libgomp/testsuite/libgomp.oacc-c++/c++.exp
> @@ -70,18 +70,23 @@ if { $lang_test_file_found } {
>       set libstdcxx_includes ""
>      }
>  
> -    # Test OpenACC with available accelerators.
> -    foreach offload_target_openacc $offload_targets_s_openacc {
> -     set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> +    # Test with all offload targets, and with offloading disabled.
> +    foreach offload_target [concat [split $offload_targets ","] "disable"] {
> +     set openacc_device_type [offload_target_to_openacc_device_type 
> $offload_target]
> +     set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
>  
> -     switch $offload_target_openacc {
> -         host {
> +     switch $openacc_device_type {
> +         "" {
> +             untested "$subdir $offload_target offloading"
> +             continue
> +         }
> +         "host" {
>               set acc_mem_shared 1
>           }
> -         nvidia {
> +         "nvidia" {
>               if { ![check_effective_target_openacc_nvidia_accel_present] } {
>                   # Don't bother; execution testing is going to FAIL.
> -                 untested "$subdir $offload_target_openacc offloading"
> +                 untested "$subdir $offload_target offloading"
>                   continue
>               }
>  
> @@ -94,12 +99,15 @@ if { $lang_test_file_found } {
>               set acc_mem_shared 0
>           }
>           default {
> -             set acc_mem_shared 0
> +             error "Unknwon OpenACC device type: $openacc_device_type 
> (offload target: $offload_target)"
>           }
>       }
>       set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
>  
> -     setenv ACC_DEVICE_TYPE $offload_target_openacc
> +     # To avoid overhead, by default only build for the offload target that
> +     # we're actually going to test.
> +     set tagopt "$tagopt -foffload=$offload_target"
> +     setenv ACC_DEVICE_TYPE $openacc_device_type
>  
>       # To get better test coverage for device-specific code that is only
>       # ever used in offloading configurations, we'd like more thorough
> @@ -108,8 +116,8 @@ if { $lang_test_file_found } {
>       # -O0 and -O2 only, to avoid testing times exploding too much, under
>       # the assumption that between -O0 and -O[something] there is the
>       # biggest difference in the overall structure of the generated code.
> -     switch $offload_target_openacc {
> -         host {
> +     switch $offload_target {
> +         "disable" {
>               set-torture-options [list \
>                                        { -O2 } ]
>           }
> diff --git libgomp/testsuite/libgomp.oacc-c/c.exp 
> libgomp/testsuite/libgomp.oacc-c/c.exp
> index b509a10..5355b87 100644
> --- libgomp/testsuite/libgomp.oacc-c/c.exp
> +++ libgomp/testsuite/libgomp.oacc-c/c.exp
> @@ -31,20 +31,25 @@ set ld_library_path $always_ld_library_path
>  append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
>  set_ld_library_path_env_vars
>  
> -# Test OpenACC with available accelerators.
> +# Test with all offload targets, and with offloading disabled.
>  set SAVE_ALWAYS_CFLAGS "$ALWAYS_CFLAGS"
> -foreach offload_target_openacc $offload_targets_s_openacc {
> +foreach offload_target [concat [split $offload_targets ","] "disable"] {
>      set ALWAYS_CFLAGS "$SAVE_ALWAYS_CFLAGS"
> -    set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> +    set openacc_device_type [offload_target_to_openacc_device_type 
> $offload_target]
> +    set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
>  
> -    switch $offload_target_openacc {
> -     host {
> +    switch $openacc_device_type {
> +     "" {
> +         untested "$subdir $offload_target offloading"
> +         continue
> +     }
> +     "host" {
>           set acc_mem_shared 1
>       }
> -     nvidia {
> +     "nvidia" {
>           if { ![check_effective_target_openacc_nvidia_accel_present] } {
>               # Don't bother; execution testing is going to FAIL.
> -             untested "$subdir $offload_target_openacc offloading"
> +             untested "$subdir $offload_target offloading"
>               continue
>           }
>  
> @@ -57,12 +62,15 @@ foreach offload_target_openacc $offload_targets_s_openacc 
> {
>           set acc_mem_shared 0
>       }
>       default {
> -         set acc_mem_shared 0
> +         error "Unknwon OpenACC device type: $openacc_device_type (offload 
> target: $offload_target)"
>       }
>      }
>      set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
>  
> -    setenv ACC_DEVICE_TYPE $offload_target_openacc
> +    # To avoid overhead, by default only build for the offload target that
> +    # we're actually going to test.
> +    set tagopt "$tagopt -foffload=$offload_target"
> +    setenv ACC_DEVICE_TYPE $openacc_device_type
>  
>      # To get better test coverage for device-specific code that is only
>      # ever used in offloading configurations, we'd like more thorough
> @@ -71,8 +79,8 @@ foreach offload_target_openacc $offload_targets_s_openacc {
>      # -O0 and -O2 only, to avoid testing times exploding too much, under
>      # the assumption that between -O0 and -O[something] there is the
>      # biggest difference in the overall structure of the generated code.
> -    switch $offload_target_openacc {
> -     host {
> +    switch $offload_target {
> +     "disable" {
>           set-torture-options [list \
>                                    { -O2 } ]
>       }
> diff --git libgomp/testsuite/libgomp.oacc-fortran/fortran.exp 
> libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> index 2d6b647..8507b67 100644
> --- libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> +++ libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> @@ -65,30 +65,38 @@ if { $lang_test_file_found } {
>      append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
>      set_ld_library_path_env_vars
>  
> -    # Test OpenACC with available accelerators.
> -    foreach offload_target_openacc $offload_targets_s_openacc {
> -     set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> +    # Test with all offload targets, and with offloading disabled.
> +    foreach offload_target [concat [split $offload_targets ","] "disable"] {
> +     set openacc_device_type [offload_target_to_openacc_device_type 
> $offload_target]
> +     set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
>  
> -     switch $offload_target_openacc {
> +     switch $openacc_device_type {
> +         "" {
> +             untested "$subdir $offload_target offloading"
> +             continue
> +         }
>           host {
>               set acc_mem_shared 1
>           }
>           nvidia {
>               if { ![check_effective_target_openacc_nvidia_accel_present] } {
>                   # Don't bother; execution testing is going to FAIL.
> -                 untested "$subdir $offload_target_openacc offloading"
> +                 untested "$subdir $offload_target offloading"
>                   continue
>               }
>  
>               set acc_mem_shared 0
>           }
>           default {
> -             set acc_mem_shared 0
> +             error "Unknwon OpenACC device type: $openacc_device_type 
> (offload target: $offload_target)"
>           }
>       }
>       set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
>  
> -     setenv ACC_DEVICE_TYPE $offload_target_openacc
> +     # To avoid overhead, by default only build for the offload target that
> +     # we're actually going to test.
> +     set tagopt "$tagopt -foffload=$offload_target"
> +     setenv ACC_DEVICE_TYPE $openacc_device_type
>  
>       # For Fortran we're doing torture testing, as Fortran has far more tests
>       # with arrays etc. that testing just -O0 or -O2 is insufficient, that is


Grüße
 Thomas

Reply via email to