anchor.diff:              // The compiler optimizer is aware of this function (see use of generic_equality_er_inner_vref in opt.fs)
               // and devirtualizes calls to it based on "T".
               let GenericEqualityERIntrinsic (x : 'T) (y : 'T) : bool =
  -                eliminate_tail_call_bool (GenericEqualityERIntrinsic_inline x y)
  +                eliminate_tail_call_bool (GenericSpecializeEquals.Function<EquivalenceRelation,_>.Func.Ensorcel (fsEqualityComparerNoHashingER, x, y))
                   
               /// Implements generic equality between two values using "comp" for recursive calls.
               //
  
positive.code:             let GenericEqualityIntrinsic (x : 'T) (y : 'T) : bool = 
                  eliminate_tail_call_bool (GenericSpecializeEquals.Function<PartialEquivalenceRelation,_>.Func.Ensorcel (fsEqualityComparerNoHashingPER, x, y))
  
              // used also by the tuple equality comparers
  
              let inline GenericEqualityERIntrinsic_inline (x : 'T) (y : 'T) : bool =
                  GenericSpecializeEquals.Function<EquivalenceRelation,_>.Func.Ensorcel (fsEqualityComparerNoHashingER, x, y)
  
              /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true)
              //
              // ER semantics is used for recursive calls when implementing .Equals(that) for structural data, see the code generated for record and union types in augment.fs
  
negative.code:                             eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) (cth g h)))
                  
                  let getEssenceOfGetHashCodeType ty =
                      let genericSpecializeHashDef = typedefof<GenericSpecializeHash.Function<_>>
                      let concreteSpecializeHash = genericSpecializeHashDef.MakeGenericType [|ty|]
                      match Activator.CreateInstance concreteSpecializeHash with
                      | :? GenericSpecializeHash.IGetEssenceOfGetHashCodeType as getter -> getter.Get ()
                      | _ -> raise (Exception "invalid logic")
  
                  let getEssenceOfEqualsType tyRelation ty =
                      let genericSpecializeEqualsDef = typedefof<GenericSpecializeEquals.Function<_,_>>
                      let concreteSpecializeEquals = genericSpecializeEqualsDef.MakeGenericType [| tyRelation; ty|]
                      match Activator.CreateInstance concreteSpecializeEquals with
                      | :? GenericSpecializeEquals.IGetEssenceOfEqualsType as getter -> getter.Get ()
                      | _ -> raise (Exception "invalid logic")
  
  