Complete cut-to-width for modular arithmetic
[sbcl.git] / src / compiler / tn.lisp
index cd2525a..a94c585 100644 (file)
   (let* ((immed (immediate-constant-sc (constant-value constant)))
          (use-immed-p (and immed
                            (or (not boxedp)
-                               (eql immed (sc-number-or-lose 'sb!vm::immediate))))))
+                               (boxed-immediate-sc-p immed)))))
     (cond
       ;; CONSTANT-TN uses two caches, one for boxed and one for unboxed uses.
       ;;
       ;; However, in the case of USE-IMMED-P we can have the same TN for both
       ;; uses. The first two legs here take care of that by cross-pollinating the
       ;; cached values.
-      ((and use-immed-p boxedp (leaf-info constant)))
-      ((and use-immed-p (not boxedp) (constant-boxed-tn constant)))
+      ;;
+      ;; Similarly, when there is no immediate SC.
+      ((and (or use-immed-p (not immed)) boxedp (leaf-info constant)))
+      ((and (or use-immed-p (not immed)) (not boxedp) (constant-boxed-tn constant)))
       (t
        (let* ((component (component-info *component-being-compiled*))
               (sc (svref *backend-sc-numbers*