master: substitute-single-use-lvar: don't avoid casts for multiple uses

stassats via Sbcl-commits <[email protected]> Tue, 28 Jul 2026 04:56:59 +0000
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  5fff18b78a6abf5b8dd643c74a79e07949aa56f4 (commit)
      from  4331687bb8ce33d48c084e990a497e1a1ba79830 (commit)

- Log -----------------------------------------------------------------
commit 5fff18b78a6abf5b8dd643c74a79e07949aa56f4
Author: Stas Boukarev <[email protected]>
Date:   Tue Jul 28 07:50:15 2026 +0300

    substitute-single-use-lvar: don't avoid casts for multiple uses
    
    Make them silent instead.
    
    Fixes lp#1910289
---
 src/compiler/ir1opt.lisp | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp
index 3a87f5a9a..8559824f1 100644
--- a/src/compiler/ir1opt.lisp
+++ b/src/compiler/ir1opt.lisp
@@ -2592,11 +2592,7 @@
            (eq (node-home-lambda ref)
                (lambda-home (lambda-var-home var))))
       (let ((ref-type (single-value-type (node-derived-type ref))))
-        (cond ((or (csubtypep (single-value-type (lvar-type arg)) ref-type)
-                   ;; Can't impart the same type to multiple uses, as
-                   ;; they are coming from different branches with
-                   ;; different derived values.
-                   (consp (lvar-uses lvar)))
+        (cond ((csubtypep (single-value-type (lvar-type arg)) ref-type)
                (substitute-lvar-uses lvar arg
                                      ;; Really it is (EQ (LVAR-USES LVAR) REF):
                                      t)
@@ -2605,10 +2601,9 @@
                (let* ((value (make-lvar))
                       (cast (insert-cast-before ref value ref-type
                                                 **zero-typecheck-policy**)))
-                 (setf (cast-%type-check cast) nil)
-                 (substitute-lvar-uses value arg
-                                       ;; FIXME
-                                       t)
+                 (setf (cast-%type-check cast) nil
+                       (cast-silent-conflict cast) t)
+                 (substitute-lvar-uses value arg t)
                  (%delete-lvar-use ref)
                  (add-lvar-use cast lvar)))))
       (delete-ref ref)

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL