tree-ssa-dom.c (thread_across_edge): Do not thread jumps if a PHI argument is set from a PHI_RESULT in the same...

* tree-ssa-dom.c (thread_across_edge): Do not thread jumps if a
	PHI argument is set from a PHI_RESULT in the same block and the
	PHI argument is not the same as the PHI result.

Co-Authored-By: Kazu Hirata <kazu@cs.umass.edu>

From-SVN: r92102
This commit is contained in:
Jeff Law 2004-12-13 13:12:33 -07:00 committed by Jeff Law
parent 143b6bc319
commit fe87283541
2 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-12-13 Jeff Law <law@redhat.com>
Kazu Hirata <kazu@cs.umass.edu>
* tree-ssa-dom.c (thread_across_edge): Do not thread jumps if a
PHI argument is set from a PHI_RESULT in the same block and the
PHI argument is not the same as the PHI result.
2004-12-13 David Edelsohn <edelsohn@gnu.org>
* xcoffout.c (xcoffout_declare_function): Always strip storage

View File

@ -550,6 +550,16 @@ thread_across_edge (struct dom_walk_data *walk_data, edge e)
{
tree src = PHI_ARG_DEF_FROM_EDGE (phi, e);
tree dst = PHI_RESULT (phi);
/* If the desired argument is not the same as this PHI's result
and it is set by a PHI in this block, then we can not thread
through this block. */
if (src != dst
&& TREE_CODE (src) == SSA_NAME
&& TREE_CODE (SSA_NAME_DEF_STMT (src)) == PHI_NODE
&& bb_for_stmt (SSA_NAME_DEF_STMT (src)) == e->dest)
return;
record_const_or_copy (dst, src);
register_new_def (dst, &block_defs_stack);
}