anchor.diff:  %%%
   
   
  -%% check_liveness(Reg, [Instruction], {State,BlockCheckFun}) ->
  -%%                      {killed | used | unknown,UpdateState}
  -%%  Finds out how Reg is used in the instruction sequence. Returns one of:
  -%%    killed - Reg is assigned a new value or killed by an allocation instruction
  -%%    used - Reg is used (or possibly referenced by an allocation instruction)
  -%%    unknown - not possible to determine (perhaps because of an instruction
  -%%              that we don't recognize)
  +%% check_liveness(Reg, [Instruction], #live{}) ->
  +%%                      {killed | used, #live{}}
  +%%  Find out whether Reg is used or killed in instruction sequence.
  +%%  'killed' means that Reg is assigned a new value or killed by an
  +%%  allocation instruction. 'used' means that Reg is used in some way.
   
   check_liveness(R, [{set,_,_,_}=I|_], St) ->
       erlang:error(only_allowed_in_blocks, [R,I,St]);
  
positive.code:     St0 = #live{bl=check_killed_block_fun(),lbl=D,res=gb_trees:empty()},
      case check_liveness_at(R, Lbl, St0) of
  	{killed,_} -> true;
  	{used,_} -> false;
  	{unknown,_} -> false
      end.
  
  %% is_not_used(Register, [Instruction], State) -> true|false
  
negative.code: is_reg_used_at_1(R, Lbl, St0) ->
      case check_liveness_at(R, Lbl, St0) of
  	{killed,St} -> {false,St};
  	{used,St} -> {true,St}
      end.
  
  index_labels_1([{label,Lbl}|Is0], Acc) ->
  