https://gcc.gnu.org/g:d4995cb255ef34dc26c5b67f1ff70c8e05946786
commit d4995cb255ef34dc26c5b67f1ff70c8e05946786 Author: Thomas Schwinge <tschwi...@baylibre.com> Date: Mon Dec 2 16:34:03 2024 +0100 'gcc/config/nvptx/gen-multilib-matches.sh': Encapsulate main logic Refactoring for later extension. No change in behavior intended. gcc/ * config/nvptx/gen-multilib-matches.sh: Encapsulate main logic. (cherry picked from commit b352f89d81bb30dbeb406ff7e4d148e2fb640975) Diff: --- gcc/ChangeLog.omp | 5 +++ gcc/config/nvptx/gen-multilib-matches.sh | 71 +++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 24 deletions(-) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 7d9c62697333..2ef38ff64ded 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -3,6 +3,11 @@ Backported from trunk: 2024-12-06 Thomas Schwinge <tschwi...@baylibre.com> + * config/nvptx/gen-multilib-matches.sh: Encapsulate main logic. + + Backported from trunk: + 2024-12-06 Thomas Schwinge <tschwi...@baylibre.com> + * config/nvptx/t-nvptx (multilib_matches): Don't use the 'shell' function of 'make'. * config/nvptx/gen-multilib-matches.sh: Adjust. diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh index a39baee5cd24..e52d57130476 100755 --- a/gcc/config/nvptx/gen-multilib-matches.sh +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -23,8 +23,7 @@ set -e nvptx_sm_def="$1/nvptx-sm.def" -multilib_options_isa_default=$2 -multilib_options_isa_list=$3 +shift sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') @@ -33,33 +32,57 @@ sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') # ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" # variant that does get built. -multilib_matches= +print_multilib_matches() { + local sms + sms=${1?} + shift + local multilib_options_isa_default + multilib_options_isa_default=${1?} + shift + local multilib_options_isa_list + multilib_options_isa_list=${1?} + shift + [ $# = 0 ] -# The "lowest" variant has to be built. -sm_next_lower=INVALID + local multilib_matches + multilib_matches= -for sm in $sms; do - if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then - sm_map=. - elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then - sm_map= - else - sm_map=$sm_next_lower - fi + local sm_next_lower + unset sm_next_lower - if [ x"$sm_map" = x ]; then - sm_next_lower=$sm - else - # Output format as required for 'MULTILIB_MATCHES'. - if [ x"$sm_map" = x. ]; then - multilib_matches_sm=".=misa?sm_$sm" + local sm + for sm in $sms; do + local sm_map + unset sm_map + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= else - multilib_matches_sm="misa?sm_$sm_map=misa?sm_$sm" + # Assert here that a "next lower" variant is available; the + # "lowest" variant always does get built. + sm_map=${sm_next_lower?} fi - multilib_matches="$multilib_matches $multilib_matches_sm" - sm_next_lower=$sm_map - fi -done + if [ x"${sm_map?}" = x ]; then + sm_next_lower=$sm + else + local multilib_matches_sm + unset multilib_matches_sm + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + multilib_matches_sm=".=misa?sm_$sm" + else + multilib_matches_sm="misa?sm_$sm_map=misa?sm_$sm" + fi + multilib_matches="$multilib_matches ${multilib_matches_sm?}" + + sm_next_lower=$sm_map + fi + done + + echo "$multilib_matches" +} +multilib_matches=$(print_multilib_matches "$sms" "$@") echo "multilib_matches := $multilib_matches"