aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-04-14 13:21:40 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-04-14 13:21:40 +0000
commite21401b6b11f87986ee08499619b861c6964286c (patch)
treece0a6703df6c21082cb1760dba8b5496699af2f1
parent6db61d6f3961365a6efb26af9366da5baeb74275 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-scalar-evolution.c5
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 495716c..19575f0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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.
+
+2016-04-14 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/70623
* tree-ssa-pre.c (changed_blocks): Make global ...
(compute_antic): ... local here. Move and fix worklist
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;