tree-ssa-forwprop.c (pass_forwprop::execute): Propagate into PHIs and update the lattice for its def.
2016-08-13 Richard Biener <rguenther@suse.de> * tree-ssa-forwprop.c (pass_forwprop::execute): Propagate into PHIs and update the lattice for its def. From-SVN: r239444
This commit is contained in:
parent
82b709f9c4
commit
30c8821b37
|
@ -1,3 +1,8 @@
|
|||
2016-08-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-forwprop.c (pass_forwprop::execute): Propagate
|
||||
into PHIs and update the lattice for its def.
|
||||
|
||||
2016-08-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/71512
|
||||
|
|
|
@ -2107,6 +2107,35 @@ pass_forwprop::execute (function *fun)
|
|||
gimple_stmt_iterator gsi;
|
||||
basic_block bb = BASIC_BLOCK_FOR_FN (fun, postorder[i]);
|
||||
|
||||
/* Propagate into PHIs and record degenerate ones in the lattice. */
|
||||
for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si);
|
||||
gsi_next (&si))
|
||||
{
|
||||
gphi *phi = si.phi ();
|
||||
tree res = gimple_phi_result (phi);
|
||||
if (virtual_operand_p (res))
|
||||
continue;
|
||||
|
||||
use_operand_p use_p;
|
||||
ssa_op_iter it;
|
||||
tree first = NULL_TREE;
|
||||
bool all_same = true;
|
||||
FOR_EACH_PHI_ARG (use_p, phi, it, SSA_OP_USE)
|
||||
{
|
||||
tree use = USE_FROM_PTR (use_p);
|
||||
tree tem = fwprop_ssa_val (use);
|
||||
if (! first)
|
||||
first = tem;
|
||||
else if (! operand_equal_p (first, tem, 0))
|
||||
all_same = false;
|
||||
if (tem != use
|
||||
&& may_propagate_copy (use, tem))
|
||||
propagate_value (use_p, tem);
|
||||
}
|
||||
if (all_same)
|
||||
fwprop_set_lattice_val (res, first);
|
||||
}
|
||||
|
||||
/* Apply forward propagation to all stmts in the basic-block.
|
||||
Note we update GSI within the loop as necessary. */
|
||||
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
|
||||
|
|
Loading…
Reference in New Issue