diff options
author | Jeff Law <law@redhat.com> | 2002-06-07 19:51:22 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2002-06-07 19:51:22 -0600 |
commit | e50126e8585814786271a772cb5a1704e3881f6b (patch) | |
tree | d5140874e00788f4ea16817667322896a2a7a2b4 /gcc | |
parent | bc9c18c3193347c70989e21c036cc5c298021569 (diff) | |
download | gcc-e50126e8585814786271a772cb5a1704e3881f6b.zip gcc-e50126e8585814786271a772cb5a1704e3881f6b.tar.gz gcc-e50126e8585814786271a772cb5a1704e3881f6b.tar.bz2 |
emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.
* emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.
* combine.c (move_deaths): Use regno_reg_rtx for hard regs rather
than creating a new register.
(distribute_notes): Likewise.
* df.c (df_reg_use_gen): Likewise.
(df_reg_clobber_gen): Likewise.
(df_ref_record): Likewise.
* expr.c (use_regs): Likewise.
* flow.c (propagate_one_insn): Likewise.
(mark_set_1): Likewise.
(mark_used_reg): Likewise.
* reload.c (emit_reload_insns): Likewise.
From-SVN: r54358
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/combine.c | 6 | ||||
-rw-r--r-- | gcc/df.c | 8 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 6 | ||||
-rw-r--r-- | gcc/expr.c | 2 | ||||
-rw-r--r-- | gcc/flow.c | 10 |
6 files changed, 32 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f07f710..bb8e9df 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2002-06-07 Jeff Law <law@redhat.com + + * emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx. + * combine.c (move_deaths): Use regno_reg_rtx for hard regs rather + than creating a new register. + (distribute_notes): Likewise. + * df.c (df_reg_use_gen): Likewise. + (df_reg_clobber_gen): Likewise. + (df_ref_record): Likewise. + * expr.c (use_regs): Likewise. + * flow.c (propagate_one_insn): Likewise. + (mark_set_1): Likewise. + (mark_used_reg): Likewise. + * reload.c (emit_reload_insns): Likewise. + 2002-06-07 Roger Sayle <roger@eyesopen.com> * simplify-rtx.c (simplify_gen_relational): Simplify RTL of the form diff --git a/gcc/combine.c b/gcc/combine.c index fe247ea..11de1c7 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11944,7 +11944,7 @@ move_deaths (x, maybe_kill_insn, from_cuid, to_insn, pnotes) if (i < regno || i >= ourend) REG_NOTES (where_dead) = gen_rtx_EXPR_LIST (REG_DEAD, - gen_rtx_REG (reg_raw_mode[i], i), + regno_reg_rtx[i], REG_NOTES (where_dead)); } @@ -11971,7 +11971,7 @@ move_deaths (x, maybe_kill_insn, from_cuid, to_insn, pnotes) offset = 1; for (i = regno + offset; i < ourend; i++) - move_deaths (gen_rtx_REG (reg_raw_mode[i], i), + move_deaths (regno_reg_rtx[i], maybe_kill_insn, from_cuid, to_insn, &oldnotes); } @@ -12593,7 +12593,7 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1) for (i = regno; i < endregno; i += HARD_REGNO_NREGS (i, reg_raw_mode[i])) { - rtx piece = gen_rtx_REG (reg_raw_mode[i], i); + rtx piece = regno_reg_rtx[i]; basic_block bb = this_basic_block; if (! dead_or_set_p (place, piece) @@ -625,8 +625,7 @@ static rtx df_reg_use_gen (regno) rtx reg; rtx use; - reg = regno >= FIRST_PSEUDO_REGISTER - ? regno_reg_rtx[regno] : gen_rtx_REG (reg_raw_mode[regno], regno); + reg = regno_reg_rtx[regno]; use = gen_rtx_USE (GET_MODE (reg), reg); return use; @@ -640,8 +639,7 @@ static rtx df_reg_clobber_gen (regno) rtx reg; rtx use; - reg = regno >= FIRST_PSEUDO_REGISTER - ? regno_reg_rtx[regno] : gen_rtx_REG (reg_raw_mode[regno], regno); + reg = regno_reg_rtx[regno]; use = gen_rtx_CLOBBER (GET_MODE (reg), reg); return use; @@ -897,7 +895,7 @@ df_ref_record (df, reg, loc, insn, ref_type, ref_flags) endregno = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); for (i = regno; i < endregno; i++) - df_ref_record_1 (df, gen_rtx_REG (reg_raw_mode[i], i), + df_ref_record_1 (df, regno_reg_rtx[i], loc, insn, ref_type, ref_flags); } else diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 724244b..7df9f23 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -4913,6 +4913,7 @@ void init_emit () { struct function *f = cfun; + int i; f->emit = (struct emit_status *) ggc_alloc (sizeof (struct emit_status)); first_insn = NULL; @@ -4942,9 +4943,14 @@ init_emit () = (tree *) ggc_alloc_cleared (f->emit->regno_pointer_align_length * sizeof (tree)); + /* Put copies of all the hard registers into regno_reg_rtx. */ + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + regno_reg_rtx[i] = gen_raw_REG (reg_raw_mode[i], i); + /* Put copies of all the virtual register rtx into regno_reg_rtx. */ init_virtual_regs (f->emit); + /* Indicate that the virtual registers and stack locations are all pointers. */ REG_POINTER (stack_pointer_rtx) = 1; @@ -2293,7 +2293,7 @@ use_regs (call_fusage, regno, nregs) abort (); for (i = 0; i < nregs; i++) - use_reg (call_fusage, gen_rtx_REG (reg_raw_mode[regno + i], regno + i)); + use_reg (call_fusage, regno_reg_rtx[regno + i]); } /* Add USE expressions to *CALL_FUSAGE for each REG contained in the @@ -1767,8 +1767,7 @@ propagate_one_insn (pbi, insn) if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) { /* We do not want REG_UNUSED notes for these registers. */ - mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i), - cond, insn, + mark_set_1 (pbi, CLOBBER, regno_reg_rtx[i], cond, insn, pbi->flags & ~(PROP_DEATH_NOTES | PROP_REG_INFO)); } } @@ -1816,8 +1815,7 @@ propagate_one_insn (pbi, insn) so they are made live. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (global_regs[i]) - mark_used_reg (pbi, gen_rtx_REG (reg_raw_mode[i], i), - cond, insn); + mark_used_reg (pbi, regno_reg_rtx[i], cond, insn); } } @@ -2817,7 +2815,7 @@ mark_set_1 (pbi, code, reg, cond, insn, flags) if (! REGNO_REG_SET_P (pbi->reg_live, i)) REG_NOTES (insn) = alloc_EXPR_LIST (REG_UNUSED, - gen_rtx_REG (reg_raw_mode[i], i), + regno_reg_rtx[i], REG_NOTES (insn)); } } @@ -3625,7 +3623,7 @@ mark_used_reg (pbi, reg, cond, insn) && ! dead_or_set_regno_p (insn, i)) REG_NOTES (insn) = alloc_EXPR_LIST (REG_DEAD, - gen_rtx_REG (reg_raw_mode[i], i), + regno_reg_rtx[i], REG_NOTES (insn)); } } |