anchor.diff:  		   (nsubstitute temp constant (sicl-mir:inputs instruction)
   				:test #'eq))
   		 (mapc #'traverse (successors instruction)))))
  -      (traverse first-instruction))))
  +      (traverse first-instruction))
  +    modify-p))
  +
  +(defun cache-constants (program)
  +  (let ((modify-p nil))
  +    (map-locations
  +     (lambda (location)
  +       (when (typep location 'sicl-mir:constant-input)
  +	 (loop for procedure in (procedures program)
  +	       for first = (initial-instruction procedure)
  +	       do (setf modify-p
  +			(or (cache-constant location first)))))))
  +    (when modify-p
  +      (touch program 'instruction-graph))))
  +
  +(set-processor 'cached-constants 'cache-constants)
  +
  +(add-dependencies 'cached-constants
  +		  '(no-constant-temporaries))
   
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;
  
positive.code: 
  (add-dependencies 'instruction-ownership
  		  '(instruction-info))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  
negative.code: 		     (let ((a (sicl-mir:make-assignment-instruction
  			       constant temp instruction)))
  		       (setf (gethash a table) t)
  		       (setf modify-p t)
  		       (push a legitimate-users)
  		       (insert-instruction-before a instruction))
  		     (mapc #'traverse (successors instruction))))))
  