aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-scalar-evolution.c
diff options
context:
space:
mode:
authorZdenek Dvorak <ook@ucw.cz>2007-11-30 01:32:04 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2007-11-30 00:32:04 +0000
commit13285d512dac6411da329c63f6a52b81e88df7a1 (patch)
tree573fc12944ab74427d5b1d5768b2a39ac6ed4847 /gcc/tree-scalar-evolution.c
parent54bded776c12100d755e2976fbd5f1b6733ea64b (diff)
downloadgcc-13285d512dac6411da329c63f6a52b81e88df7a1.zip
gcc-13285d512dac6411da329c63f6a52b81e88df7a1.tar.gz
gcc-13285d512dac6411da329c63f6a52b81e88df7a1.tar.bz2
re PR tree-optimization/34244 (VRP/SCEV miscompiles Firefox)
PR tree-optimization/34244 * tree-vrp.c (adjust_range_with_scev): Clear scev cache. (record_numbers_of_iterations): New function. (execute_vrp): Cache the numbers of iterations of loops. * tree-scalar-evolution.c (scev_reset_except_niters): New function. (scev_reset): Use scev_reset_except_niters. * tree-scalar-evolution.h (scev_reset_except_niters): Declare. * gcc.dg/tree-ssa/pr34244.c: New test. From-SVN: r130527
Diffstat (limited to 'gcc/tree-scalar-evolution.c')
-rw-r--r--gcc/tree-scalar-evolution.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index cc80794..262ec76 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2608,6 +2608,16 @@ scev_initialize (void)
}
}
+/* Clean the scalar evolution analysis cache, but preserve the cached
+ numbers of iterations for the loops. */
+
+void
+scev_reset_except_niters (void)
+{
+ if (scalar_evolution_info)
+ htab_empty (scalar_evolution_info);
+}
+
/* Cleans up the information cached by the scalar evolutions analysis. */
void
@@ -2619,7 +2629,8 @@ scev_reset (void)
if (!scalar_evolution_info || !current_loops)
return;
- htab_empty (scalar_evolution_info);
+ scev_reset_except_niters ();
+
FOR_EACH_LOOP (li, loop, 0)
{
loop->nb_iterations = NULL_TREE;