anchor.diff:  ;;;; from items to indices and from indices to items respectively.
   ;;;; Instead we attempt to maintain the sets as Lisp lists.  If
   ;;;; performance becomes a problem, we might revisit this decision.
  -;;;;
  -;;;; Computing liveness can be done either on a flow chart or a flow
  -;;;; graph.  
   
   (defclass liveness ()
     ((%btable :initform (make-hash-table :test #'eq) :reader btable)
  
positive.code: 		     (setf (gethash node btable) live)
  		     (loop for pred in (predecessors node)
  			   do (traverse pred)))))))
  	  (let ((table (make-hash-table :test #'eq)))
  	    (labels ((depth-first-search (node)
  		       (unless (gethash node table)
  			 (setf (gethash node table) t)
  			 (if (null (successors node))
  			     (traverse node)
  			     (mapc #'depth-first-search (successors node))))))
  	      (depth-first-search start-node))))))
      liveness))
  
  (defun live-before (liveness node)
  
negative.code: (defun set-equal (set1 set2)
    (and (subsetp set1 set2 :test #'eq) (subsetp set2 set1 :test #'eq)))
  
  ;;; The return value is an instance of the class LIVENESS.  This
  ;;; return value should be considered to be an opaque object, only to
  ;;; be used as the first argument of the functions LIVE-BEFORE and
  ;;; LIVE-AFTER.
  (defun liveness (start-node)
    (let ((liveness (make-instance 'liveness)))
      (with-accessors ((btable btable) (atable atable)) liveness
        (flet ((successors (node)
  	       (cleavir-ir:successors node))
  	     (predecessors (node)
  	       (cleavir-ir:predecessors node))
  	     (inputs (node)
  	       (cleavir-ir:inputs node))
  	     (outputs (node)
  	       (cleavir-ir:outputs node))
  	     (variable-p (input)
  	       (or (typep input 'cleavir-ir:lexical-location)
  		   (typep input 'cleavir-ir:values-location))))
  	(labels
  	    ((traverse (node)
  	       (let ((live '()))
  