diff mbox series

'gcc/config/nvptx/gen-multilib-matches.sh': Encapsulate main logic (was: nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup))

Message ID 87h67hmb7r.fsf@euler.schwinge.ddns.net
State New
Headers show
Series 'gcc/config/nvptx/gen-multilib-matches.sh': Encapsulate main logic (was: nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup)) | expand

Commit Message

Thomas Schwinge Dec. 6, 2024, 9:07 a.m. UTC
Hi!

On 2022-06-15T23:18:10+0200, I wrote:
> --- /dev/null
> +++ b/gcc/config/nvptx/gen-multilib-matches.sh
> @@ -0,0 +1,60 @@
> +[...]

Pushed to trunk branch commit b352f89d81bb30dbeb406ff7e4d148e2fb640975
"'gcc/config/nvptx/gen-multilib-matches.sh': Encapsulate main logic",
see attached.


Grüße
 Thomas
diff mbox series

Patch

From b352f89d81bb30dbeb406ff7e4d148e2fb640975 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <tschwinge@baylibre.com>
Date: Mon, 2 Dec 2024 16:34:03 +0100
Subject: [PATCH] '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.
---
 gcc/config/nvptx/gen-multilib-matches.sh | 71 ++++++++++++++++--------
 1 file changed, 47 insertions(+), 24 deletions(-)

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"
-- 
2.34.1