diff --git a/compiler/represent.lisp b/compiler/represent.lisp index 7392a2aa13c74b273688465ae08bb599945d1eb4..913ec6c2d57ad2c6c46446c55c40655516efa855 100644 --- a/compiler/represent.lisp +++ b/compiler/represent.lisp @@ -489,12 +489,13 @@ ;;; SELECT-REPRESENTATIONS -- Interface ;;; ;;; Entry to representation selection. First we select the representation -;;; for all normal TNs, setting the TN-SC. We then scan all the IR2, -;;; emitting any necessary coerce and move-arg VOPs. Finally, we scan all -;;; TNs looking for ones that might be placed on the number stack, noting -;;; this so that the number-FP can be allocated. This must be done last, -;;; since references in new environments may be introduced by MOVE-ARG -;;; insertion. +;;; for all normal TNs, setting the TN-SC. After selecting the TN +;;; representations, we set the SC for all :ALIAS TNs to be the representation +;;; chosen for the original TN. We then scan all the IR2, emitting any +;;; necessary coerce and move-arg VOPs. Finally, we scan all TNs looking for +;;; ones that might be placed on the number stack, noting this so that the +;;; number-FP can be allocated. This must be done last, since references in +;;; new environments may be introduced by MOVE-ARG insertion. ;;; (defun select-representations (component) (let ((costs (make-array sc-number-limit)) @@ -512,6 +513,11 @@ (assert sc) (setf (tn-sc tn) sc)))) + (do ((alias (ir2-component-alias-tns 2comp) + (tn-next alias))) + ((null alias)) + (setf (tn-sc alias) (tn-sc (tn-save-tn alias)))) + (do-ir2-blocks (block component) (emit-moves-and-coercions block))