Commit 7c90021d by Richard Guenther Committed by Richard Biener

re PR middle-end/39937 (Revision 146831 failed SPEC CPU 2006)

2009-04-29  Richard Guenther  <rguenther@suse.de>

	PR middle-end/39937
	* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do not
	loose type conversions.
	(forward_propagate_addr_expr): Fix tuplification bug.  Remove
	stmts only if there are no uses of its definition.

	* gcc.c-torture/compile/pr39937.c: New testcase.

From-SVN: r146973
parent 97a988bc
2009-04-29 Richard Guenther <rguenther@suse.de>
PR middle-end/39937
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do not
loose type conversions.
(forward_propagate_addr_expr): Fix tuplification bug. Remove
stmts only if there are no uses of its definition.
2009-04-29 Bernd Schmidt <bernd.schmidt@analog.com> 2009-04-29 Bernd Schmidt <bernd.schmidt@analog.com>
* config/bfin/bfin.h (splitting_loops): Declare. * config/bfin/bfin.h (splitting_loops): Declare.
......
2009-04-29 Richard Guenther <rguenther@suse.de> 2009-04-29 Richard Guenther <rguenther@suse.de>
PR middle-end/39937
* gcc.c-torture/compile/pr39937.c: New testcase.
2009-04-29 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39941 PR tree-optimization/39941
* gcc.c-torture/compile/pr39941.c: New testcase. * gcc.c-torture/compile/pr39941.c: New testcase.
......
int foo (__const char *__restrict __s);
static void
read_anisou(char line[])
{
foo (line+1);
}
void
read_pdbfile(void)
{
char line[4096];
read_anisou (line);
}
...@@ -862,12 +862,21 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs, ...@@ -862,12 +862,21 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
of the elements in X into &x[C1 + C2/element size]. */ of the elements in X into &x[C1 + C2/element size]. */
if (TREE_CODE (rhs2) == INTEGER_CST) if (TREE_CODE (rhs2) == INTEGER_CST)
{ {
tree new_rhs = maybe_fold_stmt_addition (gimple_expr_type (use_stmt), tree new_rhs = maybe_fold_stmt_addition (TREE_TYPE (def_rhs),
def_rhs, rhs2); def_rhs, rhs2);
if (new_rhs) if (new_rhs)
{ {
gimple_assign_set_rhs_from_tree (use_stmt_gsi, tree type = TREE_TYPE (gimple_assign_lhs (use_stmt));
unshare_expr (new_rhs)); new_rhs = unshare_expr (new_rhs);
if (!useless_type_conversion_p (type, TREE_TYPE (new_rhs)))
{
if (!is_gimple_min_invariant (new_rhs))
new_rhs = force_gimple_operand_gsi (use_stmt_gsi, new_rhs,
true, NULL_TREE,
true, GSI_SAME_STMT);
new_rhs = fold_convert (type, new_rhs);
}
gimple_assign_set_rhs_from_tree (use_stmt_gsi, new_rhs);
use_stmt = gsi_stmt (*use_stmt_gsi); use_stmt = gsi_stmt (*use_stmt_gsi);
update_stmt (use_stmt); update_stmt (use_stmt);
tidy_after_forward_propagate_addr (use_stmt); tidy_after_forward_propagate_addr (use_stmt);
...@@ -950,9 +959,8 @@ forward_propagate_addr_expr (tree name, tree rhs) ...@@ -950,9 +959,8 @@ forward_propagate_addr_expr (tree name, tree rhs)
use_rhs = gimple_assign_rhs1 (use_stmt); use_rhs = gimple_assign_rhs1 (use_stmt);
if (result if (result
&& TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
&& (TREE_CODE (use_rhs) == SSA_NAME && TREE_CODE (use_rhs) == SSA_NAME
|| (CONVERT_EXPR_P (use_rhs) && has_zero_uses (gimple_assign_lhs (use_stmt)))
&& TREE_CODE (TREE_OPERAND (use_rhs, 0)) == SSA_NAME)))
{ {
gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt); gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
release_defs (use_stmt); release_defs (use_stmt);
......
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