anchor.diff:  
   enc_cg(Imm0, false) ->
       Imm1 = enc_cse(Imm0),
  -    Imm = enc_pre_cg(Imm1),
  +    Imm2 = enc_pre_cg(Imm1),
  +    Imm = enc_opt(Imm2),
       enc_cg(Imm);
   enc_cg(Imm0, true) ->
       Imm1 = enc_cse(Imm0),
       Imm2 = enc_hoist_align(Imm1),
       Imm3 = enc_opt_al(Imm2),
       Imm4 = per_fixup(Imm3),
  -    Imm = enc_pre_cg(Imm4),
  +    Imm5 = enc_pre_cg(Imm4),
  +    Imm = enc_opt(Imm5),
       enc_cg(Imm).
   
   %%%
  
positive.code:     Else = enc_pre_cg_1(Else0, StL, outside_seq),
      {'try',Try,{P,Succ},Else,Dst};
  enc_pre_cg_nonbuilding(Imm, _) -> Imm.
  
  %%%
  %%% Code generation for encoding.
  
negative.code: 	    B ++ [{call,erlang,length,[Val],Len},Enc]
      end ++ per_enc_length(Bin, Unit, Len, SzConstraint, Aligned, k_m_string).
  
  per_enc_open_type(Imm0, Aligned) ->
      Imm = case Aligned of
  	      true ->
  		  %% Temporarily make the implicit 'align' done by
  		  %% complete/1 explicit to facilitate later
  		  %% optimizations: the absence of 'align' can be used
  		  %% as an indication that complete/1 can be replaced
  		  %% with a cheaper operation such as
  		  %% iolist_to_binary/1. The redundant 'align' will be
  		  %% optimized away later.
  		  Imm0 ++ [{put_bits,0,0,[1,align]}];
  	      false ->
  		  Imm0
  	  end,
      {[],[[],Val,Len,Bin]} = mk_vars([], [output,len,bin]),
      [{list,Imm,Val},
       {call,enc_mod(Aligned),complete,[Val],Bin},
       {call,erlang,byte_size,[Bin],Len}|
       per_enc_length(Bin, 8, Len, Aligned)].
  
  per_enc_octet_string(Val0, Constraint0, Aligned) ->
      {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
  