anchor.diff:      end.
   
   live_opt_blk(#b_blk{is=Is0,last=Last}=Blk, Live0) ->
  -    Live1 = gb_sets:union(Live0, gb_sets:from_ordset(beam_ssa:used(Last))),
  +    Live1 = cerl_sets:union(Live0, cerl_sets:from_list(beam_ssa:used(Last))),
       {Is,Live} = live_opt_is(reverse(Is0), Live1, []),
       {Blk#b_blk{is=Is},Live}.
   
  -live_opt_is([#b_set{op=phi,dst=Dst}=I|Is], Live, Acc) ->
  -    case gb_sets:is_member(Dst, Live) of
  +live_opt_is([#b_set{op=phi,dst=Dst}=I|Is], Live0, Acc) ->
  +    Live = cerl_sets:del_element(Dst, Live0),
  +    case cerl_sets:is_element(Dst, Live0) of
           true ->
               live_opt_is(Is, Live, [I|Acc]);
           false ->
  
positive.code:                     I = I0#b_set{op=has_map_field,dst=SuccDst},
                      live_opt_is([I|Is], Live0, Acc);
                  _ ->
                      Live1 = gb_sets:delete(SuccDst, Live0),
                      Live = gb_sets:add(Dst, Live1),
                      live_opt_is([I0|Is], Live, [SuccI|Acc])
              end;
          {false, true} ->
  
negative.code:             live_opt_is(Is, Live0, Acc)
      end;
  live_opt_is([#b_set{dst=Dst}=I|Is], Live0, Acc) ->
      case cerl_sets:is_element(Dst, Live0) of
          true ->
              LiveUsed = cerl_sets:from_list(beam_ssa:used(I)),
              Live1 = cerl_sets:union(Live0, LiveUsed),
              Live = cerl_sets:del_element(Dst, Live1),
              live_opt_is(Is, Live, [I|Acc]);
          false ->
              case beam_ssa:no_side_effect(I) of
                  true ->
                      live_opt_is(Is, Live0, Acc);
                  false ->
                      LiveUsed = cerl_sets:from_list(beam_ssa:used(I)),
                      Live = cerl_sets:union(Live0, LiveUsed),
                      live_opt_is(Is, Live, [I|Acc])
              end
      end;
  