anchor.diff:  -type cg_prim_op() :: 'bs_get' | 'bs_match_string' | 'bs_restore' | 'bs_skip' |
   'copy' | 'put_tuple_arity' | 'put_tuple_element'.
   
  --import(lists, [foldl/3,mapfoldl/3,reverse/1]).
  +-import(lists, [foldl/3,keyfind/3,mapfoldl/3,reverse/1]).
   
   -spec add_anno(Key, Value, Construct) -> Construct when
         Key :: atom(),
  
positive.code:         #b_ret{} ->
              []
      end.
  
  -spec successors(label(), block_map()) -> [label()].
  
  
negative.code: %%% Internal functions.
  %%%
  
  is_commutative('and') -> true;
  is_commutative('or') -> true;
  is_commutative('xor') -> true;
  is_commutative('band') -> true;
  is_commutative('bor') -> true;
  is_commutative('bxor') -> true;
  is_commutative('+') -> true;
  is_commutative('*') -> true;
  is_commutative('=:=') -> true;
  is_commutative('==') -> true;
  is_commutative('=/=') -> true;
  is_commutative('/=') -> true;
  is_commutative(_) -> false.
  
  def_used_1([#b_blk{is=Is,last=Last}|Bs], Preds, Def0, Used0) ->
      {Def,Used1} = def_used_is(Is, Preds, Def0, Used0),
      Used = gb_sets:union(gb_sets:from_list(used(Last)), Used1),
  