anchor.diff:      [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),alloc_live_regs(I, Live0)} of
  -	{false,_} ->
  -	    move_allocates_1(Is, [I|Acc0]);
  -	{true,not_possible} ->
  -	    move_allocates_1(Is, [I|Acc0]);
  -	{true,Live} when is_integer(Live) ->
  -	    A = {set,[],[],{alloc,Live,Info}},
  -	    move_allocates_1(Is, [A,I|Acc])
  +    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]);
  
positive.code: %%     get_tuple_element x(0) Element => x(1)
  %%
  %%  The transformation is safe if and only if x(1) has been
  %%  initialized previously. Unfortunately, beam_reorder may have moved
  %%  a get_tuple_element instruction so that x(1) is not always
  %%  initialized when this code is reached. To find whether or not x(1)
  %%  is initialized, we would need to analyze all code preceding these
  %%  two instructions (across branches). Since we currently don't have
  %%  any practical mechanism for doing that, we will have to
  %%  conservatively assume that the transformation is unsafe.
  
  move_allocates([{block,Bl0}|Is]) ->
      Bl = move_allocates_1(reverse(Bl0), []),
  
negative.code: 	%% Collect basic blocks and optimize them.
  	Is1 = blockify(Is0),
  	Is2 = embed_lines(Is1),
          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(),
  