diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-05-23 19:07:59 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2012-05-23 19:07:59 +0000 |
commit | 2e74510357a26f3ec3f80d5c770437ca3666d92a (patch) | |
tree | f96d565b211cac8848544b6f23f76d9226dcd5d3 | |
parent | c5a6cbd4bacd65046a1ee50e858737e1f5784fe8 (diff) | |
download | gcc-2e74510357a26f3ec3f80d5c770437ca3666d92a.zip gcc-2e74510357a26f3ec3f80d5c770437ca3666d92a.tar.gz gcc-2e74510357a26f3ec3f80d5c770437ca3666d92a.tar.bz2 |
gimple.c (gimple_types_compatible_p_1): Remove bogus size handling.
* gimple.c (gimple_types_compatible_p_1) <ARRAY_TYPE>: Remove bogus
size handling.
(gimple_canonical_types_compatible_p) <ARRAY_TYPE>: Likewise.
(iterative_hash_gimple_type): Adjust comment.
(iterative_hash_canonical_type): Likewise. Hash the bounds of the
domain for an array type instead of the domain type itself.
From-SVN: r187807
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/gimple.c | 33 |
2 files changed, 20 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dfb46e4..465cff1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2012-05-23 Eric Botcazou <ebotcazou@adacore.com> + + * gimple.c (gimple_types_compatible_p_1) <ARRAY_TYPE>: Remove bogus + size handling. + (gimple_canonical_types_compatible_p) <ARRAY_TYPE>: Likewise. + (iterative_hash_gimple_type): Adjust comment. + (iterative_hash_canonical_type): Likewise. Hash the bounds of the + domain for an array type instead of the domain type itself. + 2012-05-23 Richard Guenther <rguenther@suse.de> PR tree-optimization/53438 diff --git a/gcc/gimple.c b/gcc/gimple.c index bb02864..4b2315d 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -3455,13 +3455,6 @@ gimple_types_compatible_p_1 (tree t1, tree t2, type_pair_t p, goto same_types; else if (i1 == NULL_TREE || i2 == NULL_TREE) goto different_types; - /* If for a complete array type the possibly gimplified sizes - are different the types are different. */ - else if (((TYPE_SIZE (i1) != NULL) ^ (TYPE_SIZE (i2) != NULL)) - || (TYPE_SIZE (i1) - && TYPE_SIZE (i2) - && !operand_equal_p (TYPE_SIZE (i1), TYPE_SIZE (i2), 0))) - goto different_types; else { tree min1 = TYPE_MIN_VALUE (i1); @@ -3972,9 +3965,8 @@ iterative_hash_gimple_type (tree type, hashval_t val, v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); } - /* For array types hash their domain and the string flag. */ - if (TREE_CODE (type) == ARRAY_TYPE - && TYPE_DOMAIN (type)) + /* For array types hash the domain and the string flag. */ + if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) { v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); v = visit (TYPE_DOMAIN (type), state, v, @@ -4201,16 +4193,20 @@ iterative_hash_canonical_type (tree type, hashval_t val) v = iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type)), v); } - /* For integer types hash the types min/max values and the string flag. */ + /* For integer types hash only the string flag. */ if (TREE_CODE (type) == INTEGER_TYPE) v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); - /* For array types hash their domain and the string flag. */ - if (TREE_CODE (type) == ARRAY_TYPE - && TYPE_DOMAIN (type)) + /* For array types hash the domain bounds and the string flag. */ + if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) { v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); - v = iterative_hash_canonical_type (TYPE_DOMAIN (type), v); + /* OMP lowering can introduce error_mark_node in place of + random local decls in types. */ + if (TYPE_MIN_VALUE (TYPE_DOMAIN (type)) != error_mark_node) + v = iterative_hash_expr (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), v); + if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != error_mark_node) + v = iterative_hash_expr (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), v); } /* Recurse for aggregates with a single element type. */ @@ -4478,13 +4474,6 @@ gimple_canonical_types_compatible_p (tree t1, tree t2) return true; else if (i1 == NULL_TREE || i2 == NULL_TREE) return false; - /* If for a complete array type the possibly gimplified sizes - are different the types are different. */ - else if (((TYPE_SIZE (i1) != NULL) ^ (TYPE_SIZE (i2) != NULL)) - || (TYPE_SIZE (i1) - && TYPE_SIZE (i2) - && !operand_equal_p (TYPE_SIZE (i1), TYPE_SIZE (i2), 0))) - return false; else { tree min1 = TYPE_MIN_VALUE (i1); |