Commit d0f76c4b by Richard Guenther Committed by Richard Biener

re PR tree-optimization/34683 (SSA rewriting in the loop unroller causes quadratic behavior)

2008-01-10  Richard Guenther  <rguenther@suse.de>

	PR middle-end/34683
	* tree-cfg.c (tree_merge_blocks): Do not go through the
	full-blown folding and stmt updating path if we just deal
	with virtual operands.
	* tree-ssa-copy.c (may_propagate_copy): Do not short-cut
	test for abnormal SSA_NAMEs.

From-SVN: r131446
parent 90d12f1f
2008-01-10 Richard Guenther <rguenther@suse.de>
PR middle-end/34683
* tree-cfg.c (tree_merge_blocks): Do not go through the
full-blown folding and stmt updating path if we just deal
with virtual operands.
* tree-ssa-copy.c (may_propagate_copy): Do not short-cut
test for abnormal SSA_NAMEs.
2008-01-10 Andreas Krebbel <krebbel1@de.ibm.com>
PR middle-end/34641
......@@ -1322,7 +1322,21 @@ tree_merge_blocks (basic_block a, basic_block b)
}
else
{
replace_uses_by (def, use);
/* If we deal with a PHI for virtual operands, we can simply
propagate these without fussing with folding or updating
the stmt. */
if (!is_gimple_reg (def))
{
imm_use_iterator iter;
use_operand_p use_p;
tree stmt;
FOR_EACH_IMM_USE_STMT (stmt, iter, def)
FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
SET_USE (use_p, use);
}
else
replace_uses_by (def, use);
remove_phi_node (phi, NULL, true);
}
}
......
......@@ -62,6 +62,17 @@ may_propagate_copy (tree dest, tree orig)
tree type_d = TREE_TYPE (dest);
tree type_o = TREE_TYPE (orig);
/* If ORIG flows in from an abnormal edge, it cannot be propagated. */
if (TREE_CODE (orig) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig))
return false;
/* If DEST is an SSA_NAME that flows from an abnormal edge, then it
cannot be replaced. */
if (TREE_CODE (dest) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
return false;
/* For memory partitions, copies are OK as long as the memory symbol
belongs to the partition. */
if (TREE_CODE (dest) == SSA_NAME
......@@ -164,17 +175,6 @@ may_propagate_copy (tree dest, tree orig)
return false;
}
/* If ORIG flows in from an abnormal edge, it cannot be propagated. */
if (TREE_CODE (orig) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig))
return false;
/* If DEST is an SSA_NAME that flows from an abnormal edge, then it
cannot be replaced. */
if (TREE_CODE (dest) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
return false;
/* Anything else is OK. */
return true;
}
......
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