diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/alias.c | 3 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 10 |
3 files changed, 15 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f661697..5a55a9c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2007-07-05 Richard Guenther <rguenther@suse.de> + + PR middle-end/32639 + * alias.c (get_alias_set): Tread METHOD_TYPE the same as + FUNCTION_TYPE. + * tree-ssa.c (useless_type_conversion_p): Check canonical + types early. + 2007-07-05 Anatoly Sokolov <aesok@post.ru> * config/avr/avr.md (zero_extendqihi2, zero_extendqisi2, diff --git a/gcc/alias.c b/gcc/alias.c index 7c258c7..a47e291 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -620,7 +620,8 @@ get_alias_set (tree t) /* There are no objects of FUNCTION_TYPE, so there's no point in using up an alias set for them. (There are, of course, pointers and references to functions, but that's different.) */ - else if (TREE_CODE (t) == FUNCTION_TYPE) + else if (TREE_CODE (t) == FUNCTION_TYPE + || TREE_CODE (t) == METHOD_TYPE) set = 0; /* Unless the language specifies otherwise, let vector types alias diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 005d3fd..5e16652 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -920,6 +920,11 @@ useless_type_conversion_p (tree outer_type, tree inner_type) if (inner_type == outer_type) return true; + /* If we know the canonical types, compare them. */ + if (TYPE_CANONICAL (inner_type) + && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type)) + return true; + /* Changes in machine mode are never useless conversions. */ if (TYPE_MODE (inner_type) != TYPE_MODE (outer_type)) return false; @@ -1029,11 +1034,6 @@ useless_type_conversion_p (tree outer_type, tree inner_type) if (TREE_CODE (inner_type) != TREE_CODE (outer_type)) return false; - /* If we know the canonical types, compare them. */ - if (TYPE_CANONICAL (inner_type) - && TYPE_CANONICAL (inner_type) == TYPE_CANONICAL (outer_type)) - return true; - /* ??? Add structural equivalence check. */ /* ??? This should eventually just return false. */ |