anchor.diff:         (Any) -> Any
       end;
   create_map(Trim, Moves) ->
  -    GbTree0 = [{Src,Dst-Trim} || {move,{y,Src},{y,Dst}} <- Moves],
  -    GbTree = gb_trees:from_orddict(sort(GbTree0)),
  -    IllegalTargets = gb_sets:from_list([Dst || {move,_,{y,Dst}} <- Moves]),
  +    Map0 = [{Src,Dst-Trim} || {move,{y,Src},{y,Dst}} <- Moves],
  +    Map = maps:from_list(Map0),
  +    IllegalTargets = cerl_sets:from_list([Dst || {move,_,{y,Dst}} <- Moves]),
       fun({y,Y0}) when Y0 < Trim ->
  -	    case gb_trees:lookup(Y0, GbTree) of
  -		{value,Y} -> {y,Y};
  -		none -> throw(not_possible)
  -	    end;
  +            case Map of
  +                #{Y0:=Y} -> {y,Y};
  +                #{} -> throw(not_possible)
  +            end;
          ({y,Y}) ->
  -	    case gb_sets:is_element(Y, IllegalTargets) of
  +	    case cerl_sets:is_element(Y, IllegalTargets) of
   		true -> throw(not_possible);
   		false -> {y,Y-Trim}
   	    end;
  
positive.code: frame_size_branch(0, Is, Safe) ->
      frame_size(Is, Safe);
  frame_size_branch(L, Is, Safe) ->
      case gb_sets:is_member(L, Safe) of
  	false -> throw(not_possible);
  	true -> frame_size(Is, Safe)
      end.
  
negative.code:     safe_labels(Is, [L|Acc]);
  safe_labels([_|Is], Acc) ->
      safe_labels(Is, Acc);
  safe_labels([], Acc) -> cerl_sets:from_list(Acc).
  
  %% frame_layout([Instruction], [{kill,_}], St) ->
  %%      [{kill,Reg} | {live,Reg} | {dead,Reg}]
  