aboutsummaryrefslogtreecommitdiff
path: root/gcc/unroll.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1999-02-24 11:18:59 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1999-02-24 11:18:59 +0000
commit69688f1ed7606189b16bbdbd506dfc6e863e8309 (patch)
treebfd28bdcb71fb9f9e964e3c992b6656e251ff9f5 /gcc/unroll.c
parentd2ae3ff54e52449707326c83c1286d0928e25817 (diff)
downloadgcc-69688f1ed7606189b16bbdbd506dfc6e863e8309.zip
gcc-69688f1ed7606189b16bbdbd506dfc6e863e8309.tar.gz
gcc-69688f1ed7606189b16bbdbd506dfc6e863e8309.tar.bz2
* unroll.c (unroll_loop): Avoid out-of-bounds index for local_regno.
From-SVN: r25399
Diffstat (limited to 'gcc/unroll.c')
-rw-r--r--gcc/unroll.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 8737544..bf03757 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -238,6 +238,7 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
struct inline_remap *map;
char *local_label;
char *local_regno;
+ int max_local_regnum;
int maxregnum;
rtx exit_label = 0;
rtx start_label;
@@ -755,6 +756,9 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
/* The preconditioning code may allocate two new pseudo registers. */
maxregnum = max_reg_num ();
+ /* local_regno is only valid for regnos < max_local_regnum. */
+ max_local_regnum = maxregnum;
+
/* Allocate and zero out the splittable_regs and addr_combined_regs
arrays. These must be zeroed here because they will be used if
loop preconditioning is performed, and must be zero for that case.
@@ -1051,7 +1055,7 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
if (local_label[j])
set_label_in_map (map, j, gen_label_rtx ());
- for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; j++)
+ for (j = FIRST_PSEUDO_REGISTER; j < max_local_regnum; j++)
if (local_regno[j])
{
map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
@@ -1199,7 +1203,7 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
if (local_label[j])
set_label_in_map (map, j, gen_label_rtx ());
- for (j = FIRST_PSEUDO_REGISTER; j < maxregnum; j++)
+ for (j = FIRST_PSEUDO_REGISTER; j < max_local_regnum; j++)
if (local_regno[j])
{
map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));