mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-23 18:11:15 +08:00
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:
parent
143b6bc319
commit
fe87283541
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user