anchor.diff:  reserve_xreg(V, Xs, Res) ->
       case Res of
           #{V:=_} ->
  -            %% Already reserved.
  +            %% Already reserved (but not as an X register).
               Res;
           #{} ->
               case Xs of
                   #{V:=X} ->
  -                    %% Add a hint that a specific X register is
  +                    %% Add a hint that this specific X register is
                       %% preferred, unless it is already in use.
                       Res#{V=>{prefer,X}};
                   #{} ->
  
positive.code: %%  will allocate the lowest free X register for the variable.
  
  reserve_xregs(Blocks, Res) ->
      F = fun(L, #b_blk{is=Is,last=Last}, R) ->
                  {Xs0,Used0} = reserve_terminator(L, Last, Blocks, R),
                  reserve_xregs_is(reverse(Is), R, Xs0, Used0)
          end,
      beam_ssa:fold_po(F, Res, Blocks).
  
  reserve_xregs_is([#b_set{op=Op,dst=Dst,args=Args}=I|Is], Res0, Xs0, Used0) ->
      Xs1 = case is_gc_safe(I) of
                true ->
                    Xs0;
                false ->
                    %% There may be a garbage collection after executing this
                    %% instruction. We will need prune the list of preferred
                    %% X registers.
                    res_xregs_prune(Xs0, Used0, Res0)
            end,
      Res = reserve_xreg(Dst, Xs1, Res0),
      Used1 = ordsets:union(Used0, beam_ssa:used(I)),
      Used = ordsets:del_element(Dst, Used1),
      case Op of
  
negative.code: 
      %% Remove unsafe registers from the list of potential
      %% preferred registers.
      maps:filter(fun(_, {x,X}) -> X < NumSafe end, Xs);
  res_xregs_prune(Xs, _Used, _Res) -> Xs.
  
  %%%
  %%% Register allocation using linear scan.
  