diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-01-01 18:23:33 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-01-01 18:23:33 -0500 |
commit | c25a4c251b9d1b7d347d9f15d5abfa7d0cad4f5f (patch) | |
tree | d52fd3496b36804b391352e694101483470e9392 /gcc/local-alloc.c | |
parent | 54630035ff8efa09f5af7c68ea2942ca97e1cb00 (diff) | |
download | gcc-c25a4c251b9d1b7d347d9f15d5abfa7d0cad4f5f.tar.gz |
(reg_equiv_replacement): New variable.
(memref_referenced_p, case REG): Check for reg_equiv_replacement.
(update_equiv_regs): reg_equiv_replacement now file-scope.
From-SVN: r10930
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r-- | gcc/local-alloc.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 20bcc1cc4b5..b11cf2a9ab1 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -1,5 +1,5 @@ /* Allocate registers within a basic block, for GNU compiler. - Copyright (C) 1987, 88, 91, 93, 94, 1995 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 91, 93, 94, 95, 1996 Free Software Foundation, Inc. This file is part of GNU CC. @@ -235,6 +235,10 @@ static int scratch_index; static int this_insn_number; static rtx this_insn; +/* Used to communicate changes made by update_equiv_regs to + memref_referenced_p. */ +static rtx *reg_equiv_replacement; + static void alloc_qty PROTO((int, enum machine_mode, int, int)); static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int)); static void validate_equiv_mem_from_store PROTO((rtx, rtx)); @@ -609,7 +613,6 @@ memref_referenced_p (memref, x) switch (code) { - case REG: case CONST_INT: case CONST: case LABEL_REF: @@ -621,6 +624,11 @@ memref_referenced_p (memref, x) case LO_SUM: return 0; + case REG: + return (reg_equiv_replacement[REGNO (x)] == 0 + || memref_referenced_p (memref, + reg_equiv_replacement[REGNO (x)])); + case MEM: if (true_dependence (memref, x)) return 1; @@ -941,9 +949,10 @@ static void update_equiv_regs () { rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *)); - rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *)); rtx insn; + reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *)); + bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *)); bzero ((char *) reg_equiv_replacement, max_regno * sizeof (rtx *)); |