aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-uninit.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fa0bb76..32f6e4b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-01 Xinliang David Li <davidxl@google.com>
+
+ * tree-ssa-uninit.c (compute_control_dep_chain): Limit post-dom
+ walk length.
+
2013-03-01 Jakub Jelinek <jakub@redhat.com>
PR middle-end/56461
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index a91ee37..e8f3ff7 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -229,6 +229,7 @@ find_control_equiv_block (basic_block bb)
#define MAX_NUM_CHAINS 8
#define MAX_CHAIN_LEN 5
+#define MAX_POSTDOM_CHECK 8
/* Computes the control dependence chains (paths of edges)
for DEP_BB up to the dominating basic block BB (the head node of a
@@ -269,6 +270,7 @@ compute_control_dep_chain (basic_block bb, basic_block dep_bb,
FOR_EACH_EDGE (e, ei, bb->succs)
{
basic_block cd_bb;
+ int post_dom_check = 0;
if (e->flags & (EDGE_FAKE | EDGE_ABNORMAL))
continue;
@@ -298,7 +300,8 @@ compute_control_dep_chain (basic_block bb, basic_block dep_bb,
}
cd_bb = find_pdom (cd_bb);
- if (cd_bb == EXIT_BLOCK_PTR)
+ post_dom_check++;
+ if (cd_bb == EXIT_BLOCK_PTR || post_dom_check > MAX_POSTDOM_CHECK)
break;
}
cur_cd_chain->pop ();