Hi,
this is patch Jakub posted to IRC while discussing slow ipa-cp jump function
streaming. The problem is that hash hashes types as iterative types but later
compares them as pointers.  Iterative hash is trying to make semantically
equivalent types really equivalent.

Alternatively we may try to unify types that are semantically equivalent
but it seems bit slopy to do at stage4.

Bootstrapped/regtested x86_64-linux, OK?

Honza

        patch by Jakub Jelinek
        * ipa-prop.c (ipa_vr_ggc_hash_traits::hash): Hash pointers rather
        than iterative types.
Index: ipa-prop.c
===================================================================
--- ipa-prop.c  (revision 257931)
+++ ipa-prop.c  (working copy)
@@ -113,9 +113,10 @@ struct ipa_vr_ggc_hash_traits : public g
   hash (const value_range *p)
   {
     gcc_checking_assert (!p->equiv);
-    hashval_t t = (hashval_t) p->type;
-    t = iterative_hash_expr (p->min, t);
-    return iterative_hash_expr (p->max, t);
+    inchash::hash hstate (p->type);
+    hstate.add_ptr (p->min);
+    hstate.add_ptr (p->max);
+    return hstate.end ();
   }
   static bool
   equal (const value_range *a, const value_range *b)

Reply via email to