anchor.diff:     (%spilled :accessor allocator-spilled-ranges)
      (%allocations :accessor allocator-range-allocations)
      (%instants :accessor allocator-instantaneous-allocations)
  -   (%cfg-preds :initarg :cfg-preds :reader allocator-cfg-preds)))
  +   (%cfg-preds :initarg :cfg-preds :reader allocator-cfg-preds)
  +   (%instruction-clobbers :initarg :instruction-clobbers :reader allocator-instruction-clobbers)))
   
   (defun program-ordering (backend-function)
     (let ((order '()))
  
positive.code:     (declare (ignore basic-blocks bb-succs))
      (multiple-value-bind (live-in live-out)
          (ir::compute-liveness backend-function)
        (make-instance 'linear-allocator
                       :function backend-function
                       :ordering (if ordering
                                     (funcall ordering backend-function)
                                     (instructions-reverse-postorder backend-function))
                       :architecture architecture
                       :live-in live-in
                       :live-out live-out
                       :mv-flow (ir::multiple-value-flow backend-function architecture)
                       :cfg-preds bb-preds))))
  
  (defun build-live-ranges (allocator)
    (let ((ranges '())
  
negative.code:          for range-start from 0
           for inst in ordering
           do
             (let* ((clobbers (gethash inst (allocator-instruction-clobbers allocator)))
                    (vregs (virtual-registers-touched-by-instruction inst live-in live-out))
                    (newly-live-vregs (set-difference vregs active-vregs))
                    (newly-dead-vregs (set-difference active-vregs vregs)))
  