diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-14 13:21:40 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-04-14 13:21:40 +0000 |
commit | e21401b6b11f87986ee08499619b861c6964286c (patch) | |
tree | ce0a6703df6c21082cb1760dba8b5496699af2f1 /gcc/tree-scalar-evolution.c | |
parent | 6db61d6f3961365a6efb26af9366da5baeb74275 (diff) | |
download | gcc-e21401b6b11f87986ee08499619b861c6964286c.zip gcc-e21401b6b11f87986ee08499619b861c6964286c.tar.gz gcc-e21401b6b11f87986ee08499619b861c6964286c.tar.bz2 |
re PR tree-optimization/70614 (GCC gets stuck with -O)
2016-04-14 Richard Biener <rguenther@suse.de>
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
Diffstat (limited to 'gcc/tree-scalar-evolution.c')
-rw-r--r-- | gcc/tree-scalar-evolution.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index fdd5da0..88a0eaa 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; |