anchor.diff:  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 dict:find(Lbl, Mlbl) of
  +    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=dict:erase(Lbl, Mlbl)},
  +	    St = St0#st{mlbl=maps:remove(Lbl, Mlbl)},
   	    insert_labels([Lbl|Lbls], Is, Acc, St);
   	error -> opt(Is, [I|Acc], St0)
       end;
  
positive.code:     St = case Lbls of
  	     [] -> St0;
  	     [_|_] ->
  		 Mlbl = dict:append_list(L, Lbls, Mlbl0),
  		 St0#st{mlbl=Mlbl}
  	 end,
      skip_unreachable(Is, [I|Acc], label_used(Lbl, St));
  
negative.code: share(Is0) ->
      %% We will get more sharing if we never fall through to a label.
      Is = eliminate_fallthroughs(Is0, []),
      share_1(Is, #{}, [], []).
  
  share_1([{label,_}=Lbl|Is], Dict, [], Acc) ->
      share_1(Is, Dict, [], [Lbl|Acc]);
  share_1([{label,L}=Lbl|Is], Dict0, Seq, Acc) ->
      case maps:find(Seq, Dict0) of
  	error ->
  	    Dict = maps:put(Seq, L, Dict0),
  	    share_1(Is, Dict, [], [Lbl|Seq ++ Acc]);
  	{ok,Label} ->
  	    share_1(Is, Dict0, [], [Lbl,{jump,{f,Label}}|Acc])
  