aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-09-09 09:56:45 +0200
committerRichard Biener <rguenther@suse.de>2022-09-09 11:48:09 +0200
commit923da63e0f69b091014df5cc91498756053b1a46 (patch)
treecf9fccb12f139957aae9b15ca87b0b92e59b2dd4 /gcc
parentc2c3e4f6698925c8c969d8525677fbfe98f78909 (diff)
downloadgcc-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.cc12
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);
+ }
}
}