aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-07-21 11:45:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-07-21 11:45:27 +0000
commit35e3a6e946495735d49cd6914df2528acc54b16d (patch)
treea555e3dcdaf2bc02ef5701b559e9a66712504d98 /gcc
parent3f2930d891ecaca678a3351e31354b6e618bddaa (diff)
downloadgcc-35e3a6e946495735d49cd6914df2528acc54b16d.zip
gcc-35e3a6e946495735d49cd6914df2528acc54b16d.tar.gz
gcc-35e3a6e946495735d49cd6914df2528acc54b16d.tar.bz2
re PR middle-end/45013 (Failed to build 483.xalancbmk in SPEC CPU 2006)
2010-07-21 Richard Guenther <rguenther@suse.de> PR middle-end/45013 * tree-ssa.c (useless_type_conversion_p): Dispatch to gimple_types_compatible_p only when in lto. * gimple.c (gimple_types_compatible_p): Use canonical types to speed up comparison. From-SVN: r162371
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/gimple.c6
-rw-r--r--gcc/tree-ssa.c3
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 313baf6..12aa9e3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2010-07-21 Richard Guenther <rguenther@suse.de>
+ PR middle-end/45013
+ * tree-ssa.c (useless_type_conversion_p): Dispatch to
+ gimple_types_compatible_p only when in lto.
+ * gimple.c (gimple_types_compatible_p): Use canonical types
+ to speed up comparison.
+
+2010-07-21 Richard Guenther <rguenther@suse.de>
+
* tree-flow.h (referenced_var): Move define ...
* tree-flow-inline.h (referenced_var): ... here as an inline
function. Assert here ...
diff --git a/gcc/gimple.c b/gcc/gimple.c
index a3b1bba..5ad79aa 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -3360,6 +3360,12 @@ gimple_types_compatible_p (tree t1, tree t2, bool for_merging_p)
if (t1 == NULL_TREE || t2 == NULL_TREE)
return 0;
+ /* If the types have been previously registered and found equal
+ they still are. */
+ if (TYPE_CANONICAL (t1)
+ && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
+ return 1;
+
/* Can't be the same type if the types don't have the same code. */
if (TREE_CODE (t1) != TREE_CODE (t2))
return 0;
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 0be4591..ba28c64 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -1426,7 +1426,8 @@ useless_type_conversion_p (tree outer_type, tree inner_type)
compared types. */
else if (AGGREGATE_TYPE_P (inner_type)
&& TREE_CODE (inner_type) == TREE_CODE (outer_type))
- return gimple_types_compatible_p (outer_type, inner_type, false);
+ return (in_lto_p
+ && gimple_types_compatible_p (outer_type, inner_type, false));
return false;
}