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