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 =
  -                // The "not (not (x))" is to elimate tail calls which are a problem with value types > 64 bits
  -                not (not (GenericSpecializeEqualsWithRelation<EquivalenceRelation,_>.Func.Invoke (fsEqualityComparerNoHashingER, x, y)))
  +                eliminate_tail_call_bool (GenericSpecializeEqualsWithRelation<EquivalenceRelation,_>.Func.Invoke (fsEqualityComparerNoHashingER, x, y))
                   
               /// Implements generic equality between two values using "comp" for recursive calls.
               //
  
positive.code:             // and devirtualizes calls to it based on type "T".
              let GenericHashIntrinsic x = 
                  let iec = fsEqualityComparerUnlimitedHashingPER
                  // The "((x)* -1)* -1" is to elimate tail calls which are a problem with value types > 64 bits
                  ((GenericSpecializeHash.Func.Invoke (iec, x))* -1)* -1
  
              /// Intrinsic for calls to depth-limited structural hashing that were not optimized by static conditionals.
              let LimitedGenericHashIntrinsic limit x =
                  let iec = CountLimitedHasherPER limit
                  // The "((x)* -1)* -1" is to elimate tail calls which are a problem with value types > 64 bits
                  ((GenericSpecializeHash.Func.Invoke (iec, x))* -1)* -1
  
              /// Intrinsic for a recursive call to structural hashing that was not optimized by static conditionals.
              //
  
negative.code:             // up with differing functionality of generic and non-generic types when the IStructuralEquatable
              // this is doucmented here- https://github.com/Microsoft/visualfsharp/pull/513#issuecomment-117995410
              let GenericEqualityWithComparerIntrinsic (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool =
                  match comp with
                  | c when obj.ReferenceEquals (c, fsEqualityComparerNoHashingER)  -> eliminate_tail_call_bool (GenericEqualityERIntrinsic x y)
                  | c when obj.ReferenceEquals (c, fsEqualityComparerNoHashingPER) -> eliminate_tail_call_bool (GenericEqualityIntrinsic   x y)
                  | c when obj.ReferenceEquals (c, EqualityComparer<'T>.Default)   -> eliminate_tail_call_bool (EqualityComparer<'T>.Default.Equals (x, y))
                  | _ -> comp.Equals (box x, box y)
  
              /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true)
  