Have CTU:COMPILER-DERIVED-TYPE return the final dervied type.

By making it an IR2 converter, we get the final type, not some
intermediate type.
This commit is contained in:
Charles Zhang 2026-08-11 00:31:05 +02:00
parent 13b5e0a8ed
commit 30741cecef

View file

@ -35,11 +35,16 @@
(cl:in-package :ctu)
;;; Report the type the compiler ended up with for X.
(unless (fboundp 'compiler-derived-type)
(defknown compiler-derived-type (t) (values t t) (flushable))
(deftransform compiler-derived-type ((x) * * :node node)
(sb-c::delay-ir1-transform node :ir1-phases)
`(values ',(type-specifier (sb-c::lvar-type x)) t))
(sb-c::defoptimizer (compiler-derived-type sb-c::ir2-convert) ((x) node block)
(let ((lvar (sb-c::node-lvar node)))
(sb-c::move-lvar-result
node block
(list (sb-c::emit-constant (type-specifier (sb-c::lvar-type x)))
(sb-c::emit-constant t))
lvar)))
(defun compiler-derived-type (x)
(declare (ignore x))
(values t nil)))