diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-11-04 16:58:39 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-11-04 16:58:39 +0000 |
commit | 897118e835f7590d993642a56001e4113228f1a6 (patch) | |
tree | 9864774f05d9aef4abaed8431d0fa7b660a6a998 /gcc/local-alloc.c | |
parent | ff1556781b984ee939f5b336df9aa18ce381ea1b (diff) | |
download | gcc-897118e835f7590d993642a56001e4113228f1a6.tar.gz |
2002-11-04 Aldy Hernandez <aldyh@redhat.com>
* hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): New.
* config/rs6000/rs6000.h (CLASS_CANNOT_CHANGE_MODE_P): Remove.
(CLASS_CANNOT_CHANGE_MODE): Remove.
(CANNOT_CHANGE_MODE_CLASS): New.
* config/alpha/alpha.h: Same.
* config/ia64/ia64.h: Same.
* config/mips/mips.h: Same.
* config/s390/s390.h: Same.
* config/sh/sh.h: Same.
* config/pa/pa64-regs.h: Same.
* config/sh/sh-protos.h (sh_cannot_change_mode_class): Add prototype.
* config/sh/sh.c (sh_cannot_change_mode_class): New.
* config/mips/mips-protos.h (mips_cannot_change_mode_class): Add
prototype.
* config/mips/mips.c (mips_cannot_change_mode_class): New.
* doc/tm.texi (Register Classes): Remove
CLASS_CANNOT_CHANGE_MODE and CLASS_CANNOT_CHANGE_MODE_P.
Document CANNOT_CHANGE_MODE_CLASS.
* reload.c (push_reload): Use CANNOT_CHANGE_MODE_CLASS.
(push_reload): Same.
* simplify-rtx.c (simplify_subreg): Same.
* reload1.c (choose_reload_regs): Same.
* recog.c (register_operand): Same.
* regrename.c (mode_change_ok): Change to use new
CANNOT_CHANGE_MODE_CLASS infrastructure.
* regclass.c (cannot_change_mode_set_regs): New.
Declare subregs_of_mode.
(regclass): Use subregs_of_mode.
Remove references to reg_changes_mode.
(init_reg_sets_1): Remove class_can_change_mode and
reg_changes_mode code.
(invalid_mode_change_p): New.
(dump_regclass): Use invalid_mode_change_p instead of
class_can_change_mode.
(regclass): Same.
(record_operand_costs): Do not set reg_changes_mode.
* local-alloc.c (struct qty): Remove changes_mode field.
(alloc_qty): Remove changes_mode initialization.
(update_qty_class): Remove set of changes_mode.
(find_free_reg): Use subregs_of_mode.
* global.c (find_reg): Use subregs_of_mode info.
* rtl.h (cannot_change_mode_set_regs): New prototype.
(invalid_mode_change_p): Same.
(REG_CANNOT_CHANGE_MODE_P): New macro.
* flow.c (mark_used_regs): Calculate subregs_of_mode. Remove
REG_CHANGES_MODE.
(life_analysis): Clear subregs_of_mode.
* combine.c (subst): Pass class to CLASS_CANNOT_CHANGE_MODE_P.
Remove use of CLASS_CANNOT_CHANGE_MODE.
(simplify_set): Same.
(gen_lowpart_for_combine): Calculate subregs_of_mode. Remove
REG_CHANGES_MODE.
* regs.h: Add extern for subregs_of_mode;
Include hard-reg-set and basic-block.
(REG_CHANGES_MODE): Delete.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58794 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r-- | gcc/local-alloc.c | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 9c94924aec9..c2d6c0c610b 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -61,10 +61,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "config.h" #include "system.h" +#include "hard-reg-set.h" #include "rtl.h" #include "tm_p.h" #include "flags.h" -#include "hard-reg-set.h" #include "basic-block.h" #include "regs.h" #include "function.h" @@ -144,12 +144,6 @@ struct qty or -1 if none was found. */ short phys_reg; - - /* Nonzero if this quantity has been used in a SUBREG in some - way that is illegal. */ - - char changes_mode; - }; static struct qty *qty; @@ -328,7 +322,6 @@ alloc_qty (regno, mode, size, birth) qty[qtyno].alternate_class = reg_alternate_class (regno); qty[qtyno].n_refs = REG_N_REFS (regno); qty[qtyno].freq = REG_FREQ (regno); - qty[qtyno].changes_mode = REG_CHANGES_MODE (regno); } /* Main entry point of this file. */ @@ -2026,9 +2019,6 @@ update_qty_class (qtyno, reg) rclass = reg_alternate_class (reg); if (reg_class_subset_p (rclass, qty[qtyno].alternate_class)) qty[qtyno].alternate_class = rclass; - - if (REG_CHANGES_MODE (reg)) - qty[qtyno].changes_mode = 1; } /* Handle something which alters the value of an rtx REG. @@ -2182,11 +2172,7 @@ find_free_reg (class, mode, qtyno, accept_call_clobbered, just_try_suggested, int born_index, dead_index; { int i, ins; -#ifdef HARD_REG_SET - /* Declare it register if it's a scalar. */ - register -#endif - HARD_REG_SET used, first_used; + HARD_REG_SET first_used, used; #ifdef ELIMINABLE_REGS static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS; #endif @@ -2234,10 +2220,8 @@ find_free_reg (class, mode, qtyno, accept_call_clobbered, just_try_suggested, SET_HARD_REG_BIT (used, FRAME_POINTER_REGNUM); #endif -#ifdef CLASS_CANNOT_CHANGE_MODE - if (qty[qtyno].changes_mode) - IOR_HARD_REG_SET (used, - reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE]); +#ifdef CANNOT_CHANGE_MODE_CLASS + cannot_change_mode_set_regs (&used, mode, qty[qtyno].first_reg); #endif /* Normally, the registers that can be used for the first register in |