Commit f1bcb061 by Richard Biener Committed by Richard Biener

tree-ssa-dse.c (dse_classify_store): Fix iterator increment for pruning loop and…

tree-ssa-dse.c (dse_classify_store): Fix iterator increment for pruning loop and prune defs feeding only already...

2018-05-17  Richard Biener  <rguenther@suse.de>

	* tree-ssa-dse.c (dse_classify_store): Fix iterator increment
	for pruning loop and prune defs feeding only already visited PHIs.

From-SVN: r260322
parent 3f90a68f
2018-05-17 Richard Biener <rguenther@suse.de>
* tree-ssa-dse.c (dse_classify_store): Fix iterator increment
for pruning loop and prune defs feeding only already visited PHIs.
2018-05-17 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c (vn_reference_lookup_3): Improve memset handling.
2018-05-17 Bin Cheng <bin.cheng@arm.com>
......
......@@ -662,7 +662,7 @@ dse_classify_store (ao_ref *ref, gimple *stmt,
}
/* Process defs and remove those we need not process further. */
for (unsigned i = 0; i < defs.length (); ++i)
for (unsigned i = 0; i < defs.length ();)
{
gimple *def = defs[i];
gimple *use_stmt;
......@@ -680,11 +680,18 @@ dse_classify_store (ao_ref *ref, gimple *stmt,
/* In addition to kills we can remove defs whose only use
is another def in defs. That can only ever be PHIs of which
we track a single for simplicity reasons (we fail for multiple
PHIs anyways). */
PHIs anyways). We can also ignore defs that feed only into
already visited PHIs. */
else if (gimple_code (def) != GIMPLE_PHI
&& single_imm_use (gimple_vdef (def), &use_p, &use_stmt)
&& use_stmt == phi_def)
&& (use_stmt == phi_def
|| (gimple_code (use_stmt) == GIMPLE_PHI
&& bitmap_bit_p (visited,
SSA_NAME_VERSION
(PHI_RESULT (use_stmt))))))
defs.unordered_remove (i);
else
++i;
}
/* If all defs kill the ref we are done. */
......
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