anchor.diff:    (with-accessors ((results results)
   		   (successors successors))
         context
  -    (let ((next (if (eq results t)
  -		    (car successors)
  -		    (sicl-mir:make-get-values-instruction
  -		     results (car successors)))))
  -      (let* ((all-args (cons (sicl-ast:callee-ast ast)
  -			     (sicl-ast:argument-asts ast)))
  -	     (temps (make-temps all-args)))
  -	(setf next
  -	      (sicl-mir:make-funcall-instruction temps next))
  -	(setf next
  -	      (compile-arguments all-args temps next)))
  -      next)))
  +    (let* ((all-args (cons (sicl-ast:callee-ast ast)
  +			   (sicl-ast:argument-asts ast)))
  +	   (temps (make-temps all-args)))
  +      (compile-arguments
  +       all-args
  +       temps
  +       (if (eq results t)
  +	   (sicl-mir:make-tailcall-instruction temps)
  +	   (sicl-mir:make-funcall-instruction
  +	    temps
  +	    (sicl-mir:make-get-values-instruction
  +	     results (car successors))))))))
   
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;
  
positive.code: 		     :successors successors
  		     :false-required-p false-required-p)))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  ;;; Compile an abstract syntax tree in a compilation context.
  
negative.code:   (with-accessors ((results results)
  		   (successors successors))
        context
      (if (eq results t)
  	(sicl-mir:make-return-instruction (list ast))
  	(ecase (length successors)
  	  (1 (if (null results)
  		 (progn 
  		   (warn "variable compiled in a context with no values")
  		   (car successors))
  		 (sicl-mir:make-assignment-instruction
  		  ast
  		  (car results) 
  		  (nil-fill (cdr results) (car successors)))))
  	  (2 (if (null results)
  		 (sicl-mir:make-test-instruction ast successors)
  		 (sicl-mir:make-assignment-instruction
  		  ast
  		  (car results)
  		  (sicl-mir:make-test-instruction ast successors))))))))
  
  (defun compile-toplevel (ast)
    (let ((*block-info* (make-hash-table :test #'eq))
  