anchor.diff:  opt([{label,Fc}|_]=Is0, CLabel) ->
       Lbls = initial_labels(Is0),
       find_fixpoint(fun(Is) ->
  -			  St = #st{fc=Fc,entry=CLabel,mlbl=dict:new(),
  +			  St = #st{fc=Fc,entry=CLabel,mlbl=#{},
   				   labels=Lbls},
   			  opt(Is, [], St)
   		  end, Is0).
  
positive.code:     end;
  opt([], Acc, #st{fc=Fc,mlbl=Mlbl}) ->
      Code = reverse(Acc),
      case dict:find(Fc, Mlbl) of
   	{ok,Lbls} -> insert_fc_labels(Lbls, Mlbl, Code);
   	error -> Code
      end.
  
  insert_fc_labels([L|Ls], Mlbl, Acc0) ->
      Acc = [{label,L}|Acc0],
      case dict:find(L, Mlbl) of
  	error ->
  	    insert_fc_labels(Ls, Mlbl, Acc);
  	{ok,Lbls} ->
  
negative.code: opt([{select,_,_R,Fail,Vls}=I|Is], Acc, St) ->
      skip_unreachable(Is, [I|Acc], label_used([Fail|Vls], St));
  opt([{label,Lbl}=I|Is], Acc, #st{mlbl=Mlbl}=St0) ->
      case maps:find(Lbl, Mlbl) of
  	{ok,Lbls} ->
  	    %% Essential to remove the list of labels from the dictionary,
  	    %% since we will rescan the inserted labels.  We MUST rescan.
  	    St = St0#st{mlbl=maps:remove(Lbl, Mlbl)},
  	    insert_labels([Lbl|Lbls], Is, Acc, St);
  	error -> opt(Is, [I|Acc], St0)
      end;
  