From ccd6ec23177f7a4ed69fabad8e79d5d4da419fb2 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <tschwinge@baylibre.com>
Date: Mon, 2 Dec 2024 16:50:16 +0100
Subject: [PATCH] 'gcc/config/nvptx/gen-multilib-matches.sh': Support
'--selftest'
..., and invoke that before actual use.
gcc/
* config/nvptx/gen-multilib-matches.sh: Support '--selftest'.
* config/nvptx/t-nvptx (t-nvptx-gen-multilib-matches:): Invoke it.
* config/nvptx/gen-multilib-matches-tests: New.
---
gcc/config/nvptx/gen-multilib-matches-tests | 77 +++++++++++++++++++
gcc/config/nvptx/gen-multilib-matches.sh | 82 ++++++++++++++++++++-
gcc/config/nvptx/t-nvptx | 2 +
3 files changed, 159 insertions(+), 2 deletions(-)
create mode 100644 gcc/config/nvptx/gen-multilib-matches-tests
new file mode 100644
@@ -0,0 +1,77 @@
+# Test cases for 'gen-multilib-matches.sh'.
+
+# Blank lines and lines beginning with '#' are ignored.
+
+# 'BEGIN [name]': clear state, begin test [name].
+# 'SSMS 30 35 53': set 'sms' to '30 35 53'. Default: per 'nvptx-sm.def'.
+# 'SMOID sm_30': set 'multilib_options_isa_default' to 'sm_30'. Default: unset.
+# 'SMOIL sm_35 sm_30': set 'multilib_options_isa_list' to 'sm_35 sm_30'. Default: unset.
+# 'AEMM .=misa?sm_30': append '.=misa?sm_30' to expected "multilib matches". Default: unset.
+# 'CMMC': compute "multilib matches" per the current settings, and compare to the expected.
+
+
+BEGIN '--with-arch=sm_30'
+SMOID sm_30
+SMOIL sm_30
+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'
+SMOID sm_35
+SMOIL sm_35 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_53'
+SMOID sm_53
+SMOIL sm_53 sm_30
+AEMM misa?sm_30=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'
+SMOID sm_70
+SMOIL sm_70 sm_30
+AEMM misa?sm_30=misa?sm_35
+AEMM misa?sm_30=misa?sm_53
+AEMM .=misa?sm_70
+AEMM .=misa?sm_75
+AEMM .=misa?sm_80
+CMMC
+
+
+BEGIN '--with-arch=sm_75'
+SMOID sm_75
+SMOIL sm_75 sm_30
+AEMM misa?sm_30=misa?sm_35
+AEMM misa?sm_30=misa?sm_53
+AEMM misa?sm_30=misa?sm_70
+AEMM .=misa?sm_75
+AEMM .=misa?sm_80
+CMMC
+
+
+BEGIN '--with-arch=sm_80'
+SMOID sm_80
+SMOIL sm_80 sm_30
+AEMM misa?sm_30=misa?sm_35
+AEMM misa?sm_30=misa?sm_53
+AEMM misa?sm_30=misa?sm_70
+AEMM misa?sm_30=misa?sm_75
+AEMM .=misa?sm_80
+CMMC
@@ -27,6 +27,7 @@ nvptx_dir=$(dirname "$0")
nvptx_sm_def="$nvptx_dir/nvptx-sm.def"
+gen_multilib_matches_tests="$nvptx_dir/gen-multilib-matches-tests"
sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//')
@@ -88,5 +89,82 @@ print_multilib_matches() {
echo "$multilib_matches"
}
-multilib_matches=$(print_multilib_matches "$sms" "$@")
-echo "multilib_matches := $multilib_matches"
+
+selftest() {
+ [ $# = 0 ]
+
+ local sms_default
+ sms_default=$sms
+
+ local name
+ unset name
+ local sms
+ unset sms
+ local multilib_options_isa_default
+ unset multilib_options_isa_default
+ local multilib_options_isa_list
+ unset multilib_options_isa_list
+ local multilib_matches_expected
+ unset multilib_matches_expected
+
+ local line
+ line=0
+ local f1 f2
+ unset f1 f2
+ while read -r f1 f2; do
+ line=$((line + 1))
+ case "$f1 $f2" in
+ ' ' | '#'* )
+ :
+ ;;
+ 'BEGIN '* )
+ name=$f2
+ sms=$sms_default
+ unset multilib_options_isa_default
+ unset multilib_options_isa_list
+ unset multilib_matches_expected
+ ;;
+ 'SSMS '* )
+ sms=$f2
+ ;;
+ 'SMOID '* )
+ multilib_options_isa_default=$f2
+ ;;
+ 'SMOIL '* )
+ multilib_options_isa_list=$f2
+ ;;
+ 'AEMM '* )
+ multilib_matches_expected="$multilib_matches_expected $f2"
+ ;;
+ 'CMMC ' )
+ local multilib_matches
+ multilib_matches=$(print_multilib_matches "${sms?}" "${multilib_options_isa_default?}" "${multilib_options_isa_list?}")
+ if [ "$multilib_matches" = "$multilib_matches_expected" ]; then
+ echo >&2 "$0": selftest PASS "${name?}" at "$gen_multilib_matches_tests:$line"
+ else
+ echo >&2 "$0": selftest FAIL "${name?}" at "$gen_multilib_matches_tests:$line"
+ echo >&2 expected:"$multilib_matches_expected"
+ echo >&2 actual:"$multilib_matches"
+ exit 1
+ fi
+ ;;
+ * )
+ echo >&2 "$0": selftest ERROR at "$gen_multilib_matches_tests:$line"
+ echo >&2 invalid directive: "$f1 $f2"
+ exit 1
+ ;;
+ esac
+ done < "$gen_multilib_matches_tests"
+}
+
+
+case "${1?}" in
+ --selftest )
+ shift
+ selftest "$@"
+ :;;
+ * )
+ multilib_matches=$(print_multilib_matches "$sms" "$@")
+ echo "multilib_matches := $multilib_matches"
+ ;;
+esac
@@ -48,6 +48,8 @@ t-nvptx-gen-multilib-matches: $(srcdir)/config/nvptx/gen-multilib-matches.sh \
$(srcdir)/config/nvptx/t-nvptx \
Makefile \
$(srcdir)/config/nvptx/nvptx-sm.def
+ $(SHELL) $< \
+ --selftest
$(SHELL) $< \
$(multilib_options_isa_default) \
'$(multilib_options_isa_list)' \
--
2.34.1