diff options
author | Richard Biener <rguenther@suse.de> | 2022-09-09 09:56:45 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-09-09 11:48:09 +0200 |
commit | 923da63e0f69b091014df5cc91498756053b1a46 (patch) | |
tree | cf9fccb12f139957aae9b15ca87b0b92e59b2dd4 /gcc | |
parent | c2c3e4f6698925c8c969d8525677fbfe98f78909 (diff) | |
download | gcc-923da63e0f69b091014df5cc91498756053b1a46.zip gcc-923da63e0f69b091014df5cc91498756053b1a46.tar.gz gcc-923da63e0f69b091014df5cc91498756053b1a46.tar.bz2 |
tree-optimization/106881 - fix simple_control_dep_chain part
This adjusts simple_control_dep_chain in the same way I adjusted
compute_control_dep_chain_pdom to avoid adding fallthru edges to
the predicate chain.
PR tree-optimization/106881
* gimple-predicate-analysis.cc (simple_control_dep_chain):
Add only non-fallthru edges and avoid the same set of edges
as compute_control_dep_chain_pdom does.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-predicate-analysis.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/gimple-predicate-analysis.cc b/gcc/gimple-predicate-analysis.cc index 910ab97..bc9ed84 100644 --- a/gcc/gimple-predicate-analysis.cc +++ b/gcc/gimple-predicate-analysis.cc @@ -926,10 +926,14 @@ simple_control_dep_chain (vec<edge>& chain, basic_block from, basic_block to) { basic_block dest = src; src = get_immediate_dominator (CDI_DOMINATORS, src); - edge pred_e; - if (single_pred_p (dest) - && (pred_e = find_edge (src, dest))) - chain.safe_push (pred_e); + if (single_pred_p (dest)) + { + edge pred_e = single_pred_edge (dest); + gcc_assert (pred_e->src == src); + if (!(pred_e->flags & ((EDGE_FAKE | EDGE_ABNORMAL | EDGE_DFS_BACK))) + && !single_succ_p (src)) + chain.safe_push (pred_e); + } } } |