anchor.diff:  	%% Collect basic blocks and optimize them.
   	Is1 = blockify(Is0),
   	Is2 = embed_lines(Is1),
  -	Is3 = move_allocates(Is2),
  -	Is4 = beam_utils:live_opt(Is3),
  -	Is5 = opt_blocks(Is4),
  -	Is6 = beam_utils:delete_live_annos(Is5),
  -
  -	%% Done.
  -	{function,Name,Arity,CLabel,Is6}
  +        Is3 = beam_utils:anno_defs(Is2),
  +        Is4 = move_allocates(Is3),
  +        Is5 = beam_utils:live_opt(Is4),
  +        Is6 = opt_blocks(Is5),
  +        Is = beam_utils:delete_live_annos(Is6),
  +
  +        %% Done.
  +        {function,Name,Arity,CLabel,Is}
       catch
   	Class:Error ->
   	    Stack = erlang:get_stacktrace(),
  
positive.code: %% Calculate the new number of live registers when we move an allocate
  %% instruction upwards, passing a 'set' instruction.
  
  alloc_live_regs({set,Ds,Ss,_}, Regs0) ->
      Rset = x_live(Ss, x_dead(Ds, (1 bsl Regs0)-1)),
      live_regs(0, Rset).
  
  live_regs(N, 0) ->
      N;
  live_regs(N, Regs) when Regs band 1 =:= 1 ->
      live_regs(N+1, Regs bsr 1);
  live_regs(_, _) ->
      not_possible.
  
  x_dead([{x,N}|Rs], Regs) -> x_dead(Rs, Regs band (bnot (1 bsl N)));
  x_dead([_|Rs], Regs) -> x_dead(Rs, Regs);
  
negative.code:     [I|move_allocates(Is)];
  move_allocates([]) -> [].
  
  move_allocates_1([{'%def',_}|Is], Acc) ->
      move_allocates_1(Is, Acc);
  move_allocates_1([I|Is], [{set,[],[],{alloc,Live0,Info}}|Acc]=Acc0) ->
      case alloc_may_pass(I) of
          false ->
              move_allocates_1(Is, [I|Acc0]);
          true ->
              case alloc_live_regs(I, Is, Live0) of
                  not_possible ->
                      move_allocates_1(Is, [I|Acc0]);
                  Live when is_integer(Live) ->
                      A = {set,[],[],{alloc,Live,Info}},
                      move_allocates_1(Is, [A,I|Acc])
              end
      end;
  move_allocates_1([I|Is], Acc) ->
      move_allocates_1(Is, [I|Acc]);
  