From 4fc07af967e769a658c5aef0f40c860491fc132c Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 9 May 2011 10:45:16 +0200 Subject: [PATCH] gimple.c (type_pair_hash, [...]): Arrange type pairs to be UID ordered. * gimple.c (type_pair_hash, type_pair_eq, lookup_type_pair): Arrange type pairs to be UID ordered. (gimple_lookup_type_leader): Make inline. From-SVN: r173560 --- gcc/ChangeLog | 6 ++++++ gcc/gimple.c | 24 +++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d824cff931e..059909b374f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-05-08 Jan Hubicka + + * gimple.c (type_pair_hash, type_pair_eq, lookup_type_pair): + Arrange type pairs to be UID ordered. + (gimple_lookup_type_leader): Make inline. + 2011-05-09 Nick Clifton PR target/48897 diff --git a/gcc/gimple.c b/gcc/gimple.c index 0d28c1b2738..385c098f455 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -3240,8 +3240,7 @@ type_pair_hash (const void *p) const struct type_pair_d *pair = (const struct type_pair_d *) p; hashval_t val1 = pair->uid1; hashval_t val2 = pair->uid2; - return (iterative_hash_hashval_t (val2, val1) - ^ iterative_hash_hashval_t (val1, val2)); + return iterative_hash_hashval_t (val1, val2); } /* Compare two type pairs pointed-to by P1 and P2. */ @@ -3251,8 +3250,7 @@ type_pair_eq (const void *p1, const void *p2) { const struct type_pair_d *pair1 = (const struct type_pair_d *) p1; const struct type_pair_d *pair2 = (const struct type_pair_d *) p2; - return ((pair1->uid1 == pair2->uid1 && pair1->uid2 == pair2->uid2) - || (pair1->uid1 == pair2->uid2 && pair1->uid2 == pair2->uid1)); + return (pair1->uid1 == pair2->uid1 && pair1->uid2 == pair2->uid2); } /* Lookup the pair of types T1 and T2 in *VISITED_P. Insert a new @@ -3271,8 +3269,16 @@ lookup_type_pair (tree t1, tree t2, htab_t *visited_p, struct obstack *ob_p) gcc_obstack_init (ob_p); } - pair.uid1 = TYPE_UID (t1); - pair.uid2 = TYPE_UID (t2); + if (TYPE_UID (t1) < TYPE_UID (t2)) + { + pair.uid1 = TYPE_UID (t1); + pair.uid2 = TYPE_UID (t2); + } + else + { + pair.uid1 = TYPE_UID (t2); + pair.uid2 = TYPE_UID (t1); + } slot = htab_find_slot (*visited_p, &pair, INSERT); if (*slot) @@ -3280,8 +3286,8 @@ lookup_type_pair (tree t1, tree t2, htab_t *visited_p, struct obstack *ob_p) else { p = XOBNEW (ob_p, struct type_pair_d); - p->uid1 = TYPE_UID (t1); - p->uid2 = TYPE_UID (t2); + p->uid1 = pair.uid1; + p->uid2 = pair.uid2; p->same_p[0] = -2; p->same_p[1] = -2; *slot = (void *) p; @@ -3324,7 +3330,7 @@ static GTY((deletable, length("GIMPLE_TYPE_LEADER_SIZE"))) /* Lookup an existing leader for T and return it or NULL_TREE, if there is none in the cache. */ -static tree +static inline tree gimple_lookup_type_leader (tree t) { gimple_type_leader_entry *leader; -- 2.30.2