anchor.diff:              BefBlk = Blk#b_blk{is=Bef,last=Br},
               NewBlk = Blk#b_blk{is=Aft},
               Blocks1 = Blocks0#{L:=BefBlk,NewLbl=>NewBlk},
  -            Successors = beam_ssa:successors(NewBlk),
  -            Blocks = beam_ssa:update_phi_labels(Successors, L, NewLbl, Blocks1),
  +            Successors = successors(NewBlk),
  +            Blocks = update_phi_labels(Successors, L, NewLbl, Blocks1),
               split_blocks_1([NewLbl|Ls], P, Blocks, Count);
           no ->
               split_blocks_1(Ls, P, Blocks0, Count0)
  
positive.code:       From :: [label()],
        Blocks :: block_map().
  uses(From, Blocks) ->
      beam_ssa:fold_rpo(fun fold_uses_block/3, From, #{}, Blocks).
  
  fold_uses_block(Lbl, #b_blk{is=Is,last=Last}, UseMap0) ->
      F = fun(I, UseMap) ->
  
negative.code: 
  -spec definitions(Blocks :: block_map()) -> definition_map().
  definitions(Blocks) ->
      fold_instrs_rpo(fun(#b_set{ dst = Var }=I, Acc) ->
                              maps:put(Var, I, Acc);
                         (_Terminator, Acc) ->
                              Acc
                      end, [0], #{}, Blocks).
  
  -spec uses(Blocks :: block_map()) -> usage_map().
  uses(Blocks) ->
  