summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/unroll.c12
2 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 50211e64333..0317a032b1e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2000-01-20 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * loop.c (current_loop_info): Renamed from loop_info_data
+ and changed to a pointer.
+ (loop_optimize): Allocate loop_info structure for each loop
+ and initialise to zero.
+ (scan_loop): Set current_loop_info.
+
+ * unroll.c (loop_iterations): Don't abort if REG_USERVAR_P set
+ on iteration_var.
+
2000-01-19 Richard Henderson <rth@cygnus.com>
* stupid.c: Die die die.
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 9225a9c1e9b..b166298653e 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -3702,10 +3702,14 @@ loop_iterations (loop)
return 0;
}
- /* The only new registers that care created before loop iterations are
- givs made from biv increments, so this should never occur. */
-
- if ((unsigned) REGNO (iteration_var) >= reg_iv_type->num_elements)
+ /* The only new registers that are created before loop iterations
+ are givs made from biv increments or registers created by
+ load_mems. In the latter case, it is possible that try_copy_prop
+ will propagate a new pseudo into the old iteration register but
+ this will be marked by having the REG_USERVAR_P bit set. */
+
+ if ((unsigned) REGNO (iteration_var) >= reg_iv_type->num_elements
+ && ! REG_USERVAR_P (iteration_var))
abort ();
iteration_info (iteration_var, &initial_value, &increment,