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:
Richard Biener 2016-08-13 08:04:46 +00:00 committed by Richard Biener
parent 82b709f9c4
commit 30c8821b37
2 changed files with 34 additions and 0 deletions

View File

@ -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

View File

@ -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); )