summaryrefslogtreecommitdiff
path: root/gcc/regclass.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-06-13 21:47:44 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-06-13 21:47:44 +0000
commitc5af420ec97dd94ae5687cdba874f25f64cd6660 (patch)
tree18a58d10aaf4181b83524ed496b484df5ceed88e /gcc/regclass.c
parentd2a6ef1c68ee7ca2c078facde9bf04ec194f12a4 (diff)
downloadgcc-c5af420ec97dd94ae5687cdba874f25f64cd6660.tar.gz
* combine.c (subst): Use CLASS_CANNOT_CHANGE_MODE and
CLASS_CANNOT_CHANGE_MODE_P instead of CLASS_CANNOT_CHANGE_SIZE and hard-coded tests. (simplify_set): Likewise. (gen_lowpart_for_combine): Likewise. * emit-rtl.c (gen_lowpart_common): Likewise. * global.c (find_reg): Likewise. * local-alloc.c (find_free_reg): Likewise. * recog.c (register_operand): Likewise. * regclass.c (init_reg_sets_1): Likewise. (record_operand_costs, regclass): Likewise. * reload.c (push_reload): Likewise. * reload1.c (choose_reload_regs): Likewise. * flow.c (mark_used_regs): Conditionally set REG_CHANGES_MODE. * local-alloc.c (struct qty): Rename changes_size to changes_mode. Update all references. * regs.h (struct reg_info_def): Likewise. (REG_CHANGES_MODE): Rename from REG_CHANGES_SIZE. * tm.texi (CLASS_CANNOT_CHANGE_MODE): Document. (CLASS_CANNOT_CHANGE_MODE_P): Likewise. * config/alpha/alpha.h (CLASS_CANNOT_CHANGE_MODE): Rename. (CLASS_CANNOT_CHANGE_MODE_P): New. * config/mips/mips.h: Likewise. * config/pa/pa32-regs.h: Likewise. * config/pa/pa64-regs.h: Likewise. * config/rs6000/rs6000.h: Likewise. * config/sh/sh.h: Likewise. * config/ia64/ia64.h (CLASS_CANNOT_CHANGE_MODE): New. (CLASS_CANNOT_CHANGE_MODE_P): New. * config/avr/avr.h (CLASS_CANNOT_CHANGE_SIZE): Remove dead code. * config/d30v/d30v.h: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34526 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r--gcc/regclass.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c
index a0781833c67..eb909d195a5 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -203,18 +203,20 @@ static char *in_inc_dec;
#endif /* FORBIDDEN_INC_DEC_CLASSES */
-#ifdef CLASS_CANNOT_CHANGE_SIZE
+#ifdef CLASS_CANNOT_CHANGE_MODE
/* These are the classes containing only registers that can be used in
- a SUBREG expression that changes the size of the register. */
+ a SUBREG expression that changes the mode of the register in some
+ way that is illegal. */
-static int class_can_change_size[N_REG_CLASSES];
+static int class_can_change_mode[N_REG_CLASSES];
-/* Registers, including pseudos, which change size. */
+/* Registers, including pseudos, which change modes in some way that
+ is illegal. */
-static regset reg_changes_size;
+static regset reg_changes_mode;
-#endif /* CLASS_CANNOT_CHANGE_SIZE */
+#endif /* CLASS_CANNOT_CHANGE_MODE */
#ifdef HAVE_SECONDARY_RELOADS
@@ -458,21 +460,21 @@ init_reg_sets_1 ()
may_move_out_cost[i][j] = cost;
}
-#ifdef CLASS_CANNOT_CHANGE_SIZE
+#ifdef CLASS_CANNOT_CHANGE_MODE
{
HARD_REG_SET c;
- COMPL_HARD_REG_SET (c, reg_class_contents[CLASS_CANNOT_CHANGE_SIZE]);
+ COMPL_HARD_REG_SET (c, reg_class_contents[CLASS_CANNOT_CHANGE_MODE]);
for (i = 0; i < N_REG_CLASSES; i++)
{
GO_IF_HARD_REG_SUBSET (reg_class_contents[i], c, ok_class);
- class_can_change_size [i] = 0;
+ class_can_change_mode [i] = 0;
continue;
ok_class:
- class_can_change_size [i] = 1;
+ class_can_change_mode [i] = 1;
}
}
-#endif /* CLASS_CANNOT_CHANGE_SIZE */
+#endif /* CLASS_CANNOT_CHANGE_MODE */
}
/* Compute the table of register modes.
@@ -860,10 +862,10 @@ record_operand_costs (insn, op_costs, reg_pref)
if (GET_CODE (recog_data.operand[i]) == SUBREG)
{
rtx inner = SUBREG_REG (recog_data.operand[i]);
-#ifdef CLASS_CANNOT_CHANGE_SIZE
- if (GET_MODE_SIZE (modes[i]) != GET_MODE_SIZE (GET_MODE (inner))
- && GET_CODE (inner) == REG)
- SET_REGNO_REG_SET (reg_changes_size, REGNO (inner));
+#ifdef CLASS_CANNOT_CHANGE_MODE
+ if (GET_CODE (inner) == REG
+ && CLASS_CANNOT_CHANGE_MODE_P (modes[i], GET_MODE (inner)))
+ SET_REGNO_REG_SET (reg_changes_mode, REGNO (inner));
#endif
recog_data.operand[i] = inner;
}
@@ -1048,8 +1050,8 @@ regclass (f, nregs, dump)
costs = (struct costs *) xmalloc (nregs * sizeof (struct costs));
-#ifdef CLASS_CANNOT_CHANGE_SIZE
- reg_changes_size = BITMAP_XMALLOC();
+#ifdef CLASS_CANNOT_CHANGE_MODE
+ reg_changes_mode = BITMAP_XMALLOC();
#endif
#ifdef FORBIDDEN_INC_DEC_CLASSES
@@ -1190,9 +1192,9 @@ regclass (f, nregs, dump)
#ifdef FORBIDDEN_INC_DEC_CLASSES
|| (in_inc_dec[i] && forbidden_inc_dec_class[class])
#endif
-#ifdef CLASS_CANNOT_CHANGE_SIZE
- || (REGNO_REG_SET_P (reg_changes_size, i)
- && ! class_can_change_size [class])
+#ifdef CLASS_CANNOT_CHANGE_MODE
+ || (REGNO_REG_SET_P (reg_changes_mode, i)
+ && ! class_can_change_mode [class])
#endif
)
;
@@ -1220,9 +1222,9 @@ regclass (f, nregs, dump)
#ifdef FORBIDDEN_INC_DEC_CLASSES
&& ! (in_inc_dec[i] && forbidden_inc_dec_class[class])
#endif
-#ifdef CLASS_CANNOT_CHANGE_SIZE
- && ! (REGNO_REG_SET_P (reg_changes_size, i)
- && ! class_can_change_size [class])
+#ifdef CLASS_CANNOT_CHANGE_MODE
+ && ! (REGNO_REG_SET_P (reg_changes_mode, i)
+ && ! class_can_change_mode [class])
#endif
)
alt = reg_class_subunion[(int) alt][class];
@@ -1256,8 +1258,8 @@ regclass (f, nregs, dump)
#ifdef FORBIDDEN_INC_DEC_CLASSES
free (in_inc_dec);
#endif
-#ifdef CLASS_CANNOT_CHANGE_SIZE
- BITMAP_XFREE (reg_changes_size);
+#ifdef CLASS_CANNOT_CHANGE_MODE
+ BITMAP_XFREE (reg_changes_mode);
#endif
free (costs);
}