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> 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. * tree-ssa-sccvn.c (vn_reference_lookup_3): Improve memset handling.
2018-05-17 Bin Cheng <bin.cheng@arm.com> 2018-05-17 Bin Cheng <bin.cheng@arm.com>
......
...@@ -662,7 +662,7 @@ dse_classify_store (ao_ref *ref, gimple *stmt, ...@@ -662,7 +662,7 @@ dse_classify_store (ao_ref *ref, gimple *stmt,
} }
/* Process defs and remove those we need not process further. */ /* 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 *def = defs[i];
gimple *use_stmt; gimple *use_stmt;
...@@ -680,11 +680,18 @@ dse_classify_store (ao_ref *ref, gimple *stmt, ...@@ -680,11 +680,18 @@ dse_classify_store (ao_ref *ref, gimple *stmt,
/* In addition to kills we can remove defs whose only use /* In addition to kills we can remove defs whose only use
is another def in defs. That can only ever be PHIs of which is another def in defs. That can only ever be PHIs of which
we track a single for simplicity reasons (we fail for multiple 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 else if (gimple_code (def) != GIMPLE_PHI
&& single_imm_use (gimple_vdef (def), &use_p, &use_stmt) && 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); defs.unordered_remove (i);
else
++i;
} }
/* If all defs kill the ref we are done. */ /* 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