nvptx: Support '--with-multilib-list'
No change in behavior unless specifying it. gcc/ * config.gcc: nvptx: Support '--with-multilib-list'. * config/nvptx/gen-multilib-matches.sh: Adjust. * configure.ac: Likewise. * configure: Regenerate. * doc/install.texi: Update. * doc/invoke.texi: Align. * config/nvptx/gen-multilib-matches-tests: Extend.
This commit is contained in:
parent
2b707b41b1
commit
86b3a7532d
7 changed files with 243 additions and 36 deletions
|
@ -5595,21 +5595,70 @@ case "${target}" in
|
|||
;;
|
||||
nvptx-*)
|
||||
supported_defaults=arch
|
||||
TM_MULTILIB_CONFIG=$with_arch
|
||||
#TODO 'sm_[...]' list per 'nvptx-sm.def'.
|
||||
case $with_arch in
|
||||
sm_30 )
|
||||
# OK; default.
|
||||
;;
|
||||
sm_35 | sm_53 | sm_70 | sm_75 | sm_80 )
|
||||
# OK, but we'd like 'sm_30', too.
|
||||
TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30"
|
||||
|
||||
nvptx_multilibs_default=sm_30
|
||||
|
||||
case "x${with_multilib_list}" in
|
||||
x | xno)
|
||||
nvptx_multilibs=
|
||||
;;
|
||||
xdefault | xyes)
|
||||
nvptx_multilibs=default
|
||||
;;
|
||||
*)
|
||||
nvptx_multilibs=$with_multilib_list
|
||||
;;
|
||||
esac
|
||||
nvptx_multilibs=`echo $nvptx_multilibs | sed -e 's/,/ /g'`
|
||||
# Expand 'default'.
|
||||
nvptx_multilibs_expanded=
|
||||
for nvptx_multilib in $nvptx_multilibs; do
|
||||
case $nvptx_multilib in
|
||||
default )
|
||||
nvptx_multilibs_expanded="$nvptx_multilibs_expanded $nvptx_multilibs_default"
|
||||
;;
|
||||
* )
|
||||
echo "Unknown arch used in --with-arch=$with_arch" 1>&2
|
||||
nvptx_multilibs_expanded="$nvptx_multilibs_expanded $nvptx_multilib"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# The '--with-arch=[...]' one comes first.
|
||||
nvptx_multilibs=$with_arch$nvptx_multilibs_expanded
|
||||
# Filter out any duplicates.
|
||||
nvptx_multilibs_filtered=
|
||||
for nvptx_multilib in $nvptx_multilibs; do
|
||||
case " $nvptx_multilibs_filtered " in
|
||||
*" $nvptx_multilib "* )
|
||||
:
|
||||
;;
|
||||
* )
|
||||
nvptx_multilibs_filtered="$nvptx_multilibs_filtered $nvptx_multilib"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
nvptx_multilibs=$nvptx_multilibs_filtered
|
||||
# Verify, and build 'TM_MULTILIB_CONFIG'.
|
||||
TM_MULTILIB_CONFIG=
|
||||
for nvptx_multilib in $nvptx_multilibs; do
|
||||
case $nvptx_multilib in
|
||||
#TODO 'sm_[...]' list per 'nvptx-sm.def'.
|
||||
sm_30 | sm_35 \
|
||||
| sm_53 \
|
||||
| sm_70 | sm_75 \
|
||||
| sm_80 )
|
||||
TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG $nvptx_multilib"
|
||||
;;
|
||||
$with_arch )
|
||||
echo "Unknown arch used in --with-arch=$nvptx_multilib" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
* )
|
||||
echo "Unknown arch used in --with-multilib-list: $nvptx_multilib" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^ //'`
|
||||
;;
|
||||
|
||||
powerpc*-*-* | rs6000-*-*)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
# 'CMMC': compute "multilib matches" per the current settings, and compare to the expected.
|
||||
|
||||
|
||||
BEGIN '--with-arch=sm_30'
|
||||
BEGIN '--with-arch=sm_30', '--with-multilib-list=sm_30'
|
||||
SMOID sm_30
|
||||
SMOIL sm_30
|
||||
AEMM .=misa?sm_30
|
||||
|
@ -21,8 +21,35 @@ AEMM .=misa?sm_75
|
|||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_30', '--with-multilib-list=sm_30,sm_80'
|
||||
SMOID sm_30
|
||||
SMOIL sm_30 sm_80
|
||||
AEMM .=misa?sm_30
|
||||
AEMM .=misa?sm_35
|
||||
AEMM .=misa?sm_53
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_35'
|
||||
BEGIN '--with-arch=sm_30', '--with-multilib-list=sm_30,sm_35,sm_53,sm_70,sm_75,sm_80'
|
||||
SMOID sm_30
|
||||
SMOIL sm_30 sm_35 sm_53 sm_70 sm_75 sm_80
|
||||
AEMM .=misa?sm_30
|
||||
CMMC
|
||||
|
||||
|
||||
BEGIN '--with-arch=sm_35', '--with-multilib-list=sm_35'
|
||||
SMOID sm_35
|
||||
SMOIL sm_35
|
||||
AEMM .=misa?sm_30
|
||||
AEMM .=misa?sm_35
|
||||
AEMM .=misa?sm_53
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_35', '--with-multilib-list=sm_35,sm_30'
|
||||
SMOID sm_35
|
||||
SMOIL sm_35 sm_30
|
||||
AEMM .=misa?sm_35
|
||||
|
@ -33,7 +60,7 @@ AEMM .=misa?sm_80
|
|||
CMMC
|
||||
|
||||
|
||||
BEGIN '--with-arch=sm_53'
|
||||
BEGIN '--with-arch=sm_53', '--with-multilib-list=sm_53,sm_30'
|
||||
SMOID sm_53
|
||||
SMOIL sm_53 sm_30
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
|
@ -43,8 +70,25 @@ AEMM .=misa?sm_75
|
|||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_53', '--with-multilib-list=sm_53,sm_30,sm_35,sm_70,sm_75,sm_80'
|
||||
SMOID sm_53
|
||||
SMOIL sm_53 sm_30 sm_35 sm_70 sm_75 sm_80
|
||||
AEMM .=misa?sm_53
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_70'
|
||||
|
||||
BEGIN '--with-arch=sm_70', '--with-multilib-list=sm_70'
|
||||
SMOID sm_70
|
||||
SMOIL sm_70
|
||||
AEMM .=misa?sm_30
|
||||
AEMM .=misa?sm_35
|
||||
AEMM .=misa?sm_53
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_70', '--with-multilib-list=sm_70,sm_30'
|
||||
SMOID sm_70
|
||||
SMOIL sm_70 sm_30
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
|
@ -54,8 +98,27 @@ AEMM .=misa?sm_75
|
|||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_70', '--with-multilib-list=sm_70,sm_53'
|
||||
SMOID sm_70
|
||||
SMOIL sm_70 sm_53
|
||||
AEMM misa?sm_53=misa?sm_30
|
||||
AEMM misa?sm_53=misa?sm_35
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_75'
|
||||
BEGIN '--with-arch=sm_70', '--with-multilib-list=sm_70,sm_53,sm_30'
|
||||
SMOID sm_70
|
||||
SMOIL sm_70 sm_53 sm_30
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
|
||||
BEGIN '--with-arch=sm_75', '--with-multilib-list=sm_75,sm_30'
|
||||
SMOID sm_75
|
||||
SMOIL sm_75 sm_30
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
|
@ -65,8 +128,38 @@ AEMM .=misa?sm_75
|
|||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_75', '--with-multilib-list=sm_75,sm_53'
|
||||
SMOID sm_75
|
||||
SMOIL sm_75 sm_53
|
||||
AEMM misa?sm_53=misa?sm_30
|
||||
AEMM misa?sm_53=misa?sm_35
|
||||
AEMM misa?sm_53=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_80'
|
||||
BEGIN '--with-arch=sm_75', '--with-multilib-list=sm_75,sm_30,sm_53'
|
||||
SMOID sm_75
|
||||
SMOIL sm_75 sm_30 sm_53
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
AEMM misa?sm_53=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
|
||||
BEGIN '--with-arch=sm_80', '--with-multilib-list=sm_80'
|
||||
SMOID sm_80
|
||||
SMOIL sm_80
|
||||
AEMM .=misa?sm_30
|
||||
AEMM .=misa?sm_35
|
||||
AEMM .=misa?sm_53
|
||||
AEMM .=misa?sm_70
|
||||
AEMM .=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_80', '--with-multilib-list=sm_80,sm_30'
|
||||
SMOID sm_80
|
||||
SMOIL sm_80 sm_30
|
||||
AEMM misa?sm_30=misa?sm_35
|
||||
|
@ -75,3 +168,19 @@ AEMM misa?sm_30=misa?sm_70
|
|||
AEMM misa?sm_30=misa?sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_80', '--with-multilib-list=sm_80,sm_75'
|
||||
SMOID sm_80
|
||||
SMOIL sm_80 sm_75
|
||||
AEMM misa?sm_75=misa?sm_30
|
||||
AEMM misa?sm_75=misa?sm_35
|
||||
AEMM misa?sm_75=misa?sm_53
|
||||
AEMM misa?sm_75=misa?sm_70
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
||||
BEGIN '--with-arch=sm_80', '--with-multilib-list=sm_80,sm_30,sm_35,sm_53,sm_70,sm_75'
|
||||
SMOID sm_80
|
||||
SMOIL sm_80 sm_30 sm_35 sm_53 sm_70 sm_75
|
||||
AEMM .=misa?sm_80
|
||||
CMMC
|
||||
|
|
|
@ -34,8 +34,17 @@ sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//')
|
|||
|
||||
# Every variant in 'sms' has to either be remapped to the default variant
|
||||
# ('.', which is always built), or does get built as non-default variant
|
||||
# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower"
|
||||
# variant that does get built.
|
||||
# ('misa=sm_SM'; thus not remapped), or gets remapped to a suitable variant,
|
||||
# typically the "next lower" one that does get built. If no "next lower" one
|
||||
# does get built, then remap to the "lowest" one that does get built. This
|
||||
# increases chances that the linked code is compatible with more GPU hardware
|
||||
# (backward compatibility). For example, for GCC built '--with-arch=sm_80',
|
||||
# '--with-multilib-list=sm_53', only 'sm_53' and 'sm_80' target libraries get
|
||||
# built. If now requesting a '-march=[...]' where no corresponding or "next
|
||||
# lower" variant of the target libraries have been built, GCC's default
|
||||
# behavior is to link in the default variant, 'sm_80'. However, if compiling
|
||||
# user code with '-march=sm_35', for example, linking in the 'sm_53' variant is
|
||||
# supposedly more useful in terms of compatibility with GPU hardware.
|
||||
|
||||
print_multilib_matches() {
|
||||
local sms
|
||||
|
@ -52,8 +61,18 @@ print_multilib_matches() {
|
|||
local multilib_matches
|
||||
multilib_matches=
|
||||
|
||||
# Determine the "lowest" variant that does get built.
|
||||
local sm_next_lower
|
||||
unset sm_next_lower
|
||||
sm_next_lower=.
|
||||
local sm
|
||||
for sm in $sms; do
|
||||
if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then
|
||||
continue
|
||||
elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then
|
||||
sm_next_lower=$sm
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
local sm
|
||||
for sm in $sms; do
|
||||
|
@ -64,9 +83,7 @@ print_multilib_matches() {
|
|||
elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then
|
||||
sm_map=
|
||||
else
|
||||
# Assert here that a "next lower" variant is available; the
|
||||
# "lowest" variant always does get built.
|
||||
sm_map=${sm_next_lower?}
|
||||
sm_map=$sm_next_lower
|
||||
fi
|
||||
|
||||
if [ x"${sm_map?}" = x ]; then
|
||||
|
|
4
gcc/configure
vendored
4
gcc/configure
vendored
|
@ -1883,8 +1883,8 @@ Optional Packages:
|
|||
Root for documentation URLs
|
||||
--with-changes-root-url=URL
|
||||
Root for GCC changes URLs
|
||||
--with-multilib-list select multilibs (AArch64, ARM, AVR, OR1K, RISC-V,
|
||||
SH and x86-64 only)
|
||||
--with-multilib-list select multilibs (AArch64, ARM, AVR, nvptx, OR1K,
|
||||
RISC-V, SH and x86-64 only)
|
||||
--with-multilib-generator
|
||||
Multi-libs configuration string (RISC-V only)
|
||||
--with-zstd=PATH specify prefix directory for installed zstd library.
|
||||
|
|
|
@ -1218,7 +1218,7 @@ if test "x$enable_offload_defaulted" = xyes; then
|
|||
fi
|
||||
|
||||
AC_ARG_WITH(multilib-list,
|
||||
[AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, ARM, AVR, OR1K, RISC-V, SH and x86-64 only)])],
|
||||
[AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, ARM, AVR, nvptx, OR1K, RISC-V, SH and x86-64 only)])],
|
||||
:,
|
||||
with_multilib_list=default)
|
||||
|
||||
|
|
|
@ -1275,13 +1275,13 @@ sysv, aix.
|
|||
|
||||
@end table
|
||||
|
||||
@item --with-multilib-list=@var{list}
|
||||
@item @anchor{with-multilib-list}--with-multilib-list=@var{list}
|
||||
@itemx --without-multilib-list
|
||||
Specify what multilibs to build. @var{list} is a comma separated list of
|
||||
values, possibly consisting of a single value. Currently only implemented
|
||||
for aarch64*-*-*, amdgcn*-*-*, arm*-*-*, loongarch*-*-*, riscv*-*-*, sh*-*-*
|
||||
and x86-64-*-linux*. The accepted values and meaning for each target is given
|
||||
below.
|
||||
for aarch64*-*-*, amdgcn*-*-*, arm*-*-*, loongarch*-*-*, nvptx-*, riscv*-*-*,
|
||||
sh*-*-* and x86-64-*-linux*.
|
||||
The accepted values and meaning for each target is given below.
|
||||
|
||||
@table @code
|
||||
@item aarch64*-*-*
|
||||
|
@ -1407,6 +1407,28 @@ If @var{list} is empty or @code{default}, or if @option{--with-multilib-list}
|
|||
is not specified, then only the default variant of the libraries are built,
|
||||
where the default ABI is implied by the configured target triplet.
|
||||
|
||||
@item nvptx-*
|
||||
The target libraries corresponding to the default value of the
|
||||
@option{-march} option are always built,
|
||||
@ifnothtml
|
||||
@pxref{nvptx-x-none,,host/target specific installation notes}.
|
||||
@end ifnothtml
|
||||
@ifhtml
|
||||
see
|
||||
@uref{specific.html#nvptx-x-none,,host/target specific installation notes}.
|
||||
@end ifhtml
|
||||
If @var{list} is empty, @samp{no}, or @option{--without-multilib-list}
|
||||
is specified, then no additional multilibs are built.
|
||||
Otherwise, @var{list} is a comma separated list specifying which
|
||||
multilibs to build.
|
||||
List items are either @samp{sm_SM}, or @samp{default}, which is a
|
||||
placeholder specifying a default set of multilibs: @samp{sm_30}.
|
||||
Any duplicates are filtered out.
|
||||
If @option{--with-multilib-list} is not specified, then
|
||||
@option{--with-multilib-list=default} is assumed.
|
||||
For @samp{sm_30}, @samp{sm_35} target libraries, @option{-mptx-3.1}
|
||||
sub-variants are additionally built.
|
||||
|
||||
@item riscv*-*-*
|
||||
@var{list} is a single ABI name. The target architecture must be either
|
||||
@code{rv32gc} or @code{rv64gc}. This will build a single multilib for the
|
||||
|
@ -4609,8 +4631,16 @@ corresponding target libraries.
|
|||
The default is @option{--with-arch=sm_30}.
|
||||
|
||||
For example, if @option{--with-arch=sm_70} is specified,
|
||||
@option{-march=sm_30} and @option{-march=sm_70} target libraries are
|
||||
built, and code generation defaults to @option{-march=sm_70}.
|
||||
code generation defaults to @option{-march=sm_70} and
|
||||
corresponding target libraries are built, in addition to those
|
||||
mandated by @option{--with-multilib-list}, if any,
|
||||
@ifnothtml
|
||||
@pxref{with-multilib-list,,@option{--with-multilib-list}}.
|
||||
@end ifnothtml
|
||||
@ifhtml
|
||||
see
|
||||
@uref{configure.html#with-multilib-list,,@option{--with-multilib-list}}.
|
||||
@end ifhtml
|
||||
|
||||
@html
|
||||
<hr />
|
||||
|
|
|
@ -30044,10 +30044,12 @@ supported.
|
|||
|
||||
@opindex march
|
||||
@item -march=@var{architecture-string}
|
||||
Generate code for the specified PTX ISA target architecture
|
||||
(e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30},
|
||||
@samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and
|
||||
@samp{sm_80}.
|
||||
Generate code for the specified PTX ISA target architecture.
|
||||
Valid architecture strings are
|
||||
@samp{sm_30}, @samp{sm_35},
|
||||
@samp{sm_53},
|
||||
@samp{sm_70}, @samp{sm_75},
|
||||
and @samp{sm_80}.
|
||||
The default depends on how the compiler has been configured, see
|
||||
@option{--with-arch}.
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue