From e21401b6b11f87986ee08499619b861c6964286c Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 14 Apr 2016 13:21:40 +0000 Subject: [PATCH] re PR tree-optimization/70614 (GCC gets stuck with -O) 2016-04-14 Richard Biener PR tree-optimization/70614 * tree-scalar-evolution.c (analyze_evolution_in_loop): Terminate loop if the evolution dropped to chrec_dont_know. (interpret_condition_phi): Likewise. From-SVN: r234972 --- gcc/ChangeLog | 7 +++++++ gcc/tree-scalar-evolution.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 495716c90eb..19575f0fc79 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-04-14 Richard Biener + + PR tree-optimization/70614 + * tree-scalar-evolution.c (analyze_evolution_in_loop): Terminate + loop if the evolution dropped to chrec_dont_know. + (interpret_condition_phi): Likewise. + 2016-04-14 Richard Biener PR tree-optimization/70623 diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index fdd5da0589a..88a0eaaa82d 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -1510,6 +1510,9 @@ analyze_evolution_in_loop (gphi *loop_phi_node, /* When there are multiple back edges of the loop (which in fact never happens currently, but nevertheless), merge their evolutions. */ evolution_function = chrec_merge (evolution_function, ev_fn); + + if (evolution_function == chrec_dont_know) + break; } if (dump_file && (dump_flags & TDF_SCEV)) @@ -1687,6 +1690,8 @@ interpret_condition_phi (struct loop *loop, gphi *condition_phi) (loop, PHI_ARG_DEF (condition_phi, i)); res = chrec_merge (res, branch_chrec); + if (res == chrec_dont_know) + break; } return res; -- 2.30.2