Commit 35e3a6e9 by Richard Guenther Committed by Richard Biener

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
parent 3f2930d8
2010-07-21 Richard Guenther <rguenther@suse.de> 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.h (referenced_var): Move define ...
* tree-flow-inline.h (referenced_var): ... here as an inline * tree-flow-inline.h (referenced_var): ... here as an inline
function. Assert here ... function. Assert here ...
......
...@@ -3360,6 +3360,12 @@ gimple_types_compatible_p (tree t1, tree t2, bool for_merging_p) ...@@ -3360,6 +3360,12 @@ gimple_types_compatible_p (tree t1, tree t2, bool for_merging_p)
if (t1 == NULL_TREE || t2 == NULL_TREE) if (t1 == NULL_TREE || t2 == NULL_TREE)
return 0; 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. */ /* Can't be the same type if the types don't have the same code. */
if (TREE_CODE (t1) != TREE_CODE (t2)) if (TREE_CODE (t1) != TREE_CODE (t2))
return 0; return 0;
......
...@@ -1426,7 +1426,8 @@ useless_type_conversion_p (tree outer_type, tree inner_type) ...@@ -1426,7 +1426,8 @@ useless_type_conversion_p (tree outer_type, tree inner_type)
compared types. */ compared types. */
else if (AGGREGATE_TYPE_P (inner_type) else if (AGGREGATE_TYPE_P (inner_type)
&& TREE_CODE (inner_type) == TREE_CODE (outer_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; return false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment