anchor.diff:  %% combine_heap_needs(HeapNeed1, HeapNeed2) -> HeapNeed
   %%  Combine the heap need for two allocation instructions.
   
  --spec combine_heap_needs(term(), term()) -> term().
  -
  -combine_heap_needs({alloc,Alloc1}, {alloc,Alloc2}) ->
  -    {alloc,combine_alloc_lists(Alloc1, Alloc2)};
  -combine_heap_needs({alloc,Alloc}, Words) when is_integer(Words) ->
  -    {alloc,combine_alloc_lists(Alloc, [{words,Words}])};
  -combine_heap_needs(Words, {alloc,Alloc}) when is_integer(Words) ->
  -    {alloc,combine_alloc_lists(Alloc, [{words,Words}])};
  +-type heap_need_tag() :: 'floats' | 'words'.
  +-type heap_need() :: non_neg_integer() |
  +                     {'alloc',[{heap_need_tag(),non_neg_integer()}]}.
  +-spec combine_heap_needs(heap_need(), heap_need()) -> heap_need().
  +
   combine_heap_needs(H1, H2) when is_integer(H1), is_integer(H2) ->
  -    H1+H2.
  +    H1 + H2;
  +combine_heap_needs(H1, H2) ->
  +    combine_alloc_lists([H1,H2]).
  +
   
   %% split_even/1
   %% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
  
positive.code: 
  -export_type([code_index/0,module_code/0,instruction/0]).
  
  -import(lists, [map/2,member/2,sort/1,reverse/1,splitwith/2]).
  
  -define(is_const(Val), (Val =:= nil orelse
                          element(1, Val) =:= integer orelse
  
negative.code:         _ -> Fb(Old)
      end.
  
  %% Help function for combine_heap_needs.
  
  combine_alloc_lists(Al0) ->
      Al1 = flatmap(fun(Words) when is_integer(Words) ->
                           [{words,Words}];
                      ({alloc,List}) ->
                           List
                   end, Al0),
      Al2 = sofs:relation(Al1),
      Al3 = sofs:relation_to_family(Al2),
      Al4 = sofs:to_external(Al3),
      [{Tag,lists:sum(L)} || {Tag,L} <- Al4].
  
  %% live_opt/4.
  
  