aboutsummaryrefslogtreecommitdiff
path: root/gcc/regclass.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-02-01 00:34:17 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2003-01-31 23:34:17 +0000
commitb0c42aed3116a712a4c4da3ec2f124c542271f18 (patch)
tree138fc4b6ba88f9caad65f412fbe421e92fc1dcf1 /gcc/regclass.c
parent1f61a15d9e3cde5dbe910c23b045f300d03f3c6f (diff)
downloadgcc-b0c42aed3116a712a4c4da3ec2f124c542271f18.zip
gcc-b0c42aed3116a712a4c4da3ec2f124c542271f18.tar.gz
gcc-b0c42aed3116a712a4c4da3ec2f124c542271f18.tar.bz2
loop.c (emit_prefetch_instructions): Do conversion at right place in RTL chain.
* loop.c (emit_prefetch_instructions): Do conversion at right place in RTL chain. * combine.c (simplify_set): Reverse order of ragumetns to REG_CANNOT_CHANGE_MODE_P * df.c (df_def_record_1): Likewise. * recog.c (register_operand): Likewise. * simplify-rtx.c (simplify_subreg): Likewise. * hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): Update use of CANNOT_CHANGE_MODE_CLASS. * regclass.c (cannot_change_mode_set_regs, invalid_mode_change_p): Likewise. * reload.c (push_reload): Likewise. * alpha.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * ia64.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * mips.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * mips-protos.h (mips_cannot_change_mode_class): Update prototype. * mips.c (mips_cannot_change_mode_class): Update. * pa64-regs.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * rs6000.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * s390.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * sh.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * sh-protos.h (sh_cannot_change_mode_class): Update prototype. * sh.c (sh_cannot_change_mode_class): Update. * i386.h (CANNOT_CHANGE_MODE_CLASS): New. * tm.texi (CANNOT_CHANGE_MODE_CLASS): Update documentation. From-SVN: r62212
Diffstat (limited to 'gcc/regclass.c')
-rw-r--r--gcc/regclass.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/regclass.c b/gcc/regclass.c
index ea6c86b..5481ea2 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -2633,14 +2633,15 @@ cannot_change_mode_set_regs (used, from, regno)
unsigned int regno;
{
enum machine_mode to;
- enum reg_class class;
for (to = VOIDmode; to < MAX_MACHINE_MODE; ++to)
if (REGNO_REG_SET_P (&subregs_of_mode[to], regno))
{
- class = CANNOT_CHANGE_MODE_CLASS (from, to);
- if (class != NO_REGS)
- IOR_HARD_REG_SET (*used, reg_class_contents [(int) class]);
+ int i;
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (! TEST_HARD_REG_BIT (*used, i)
+ && REG_CANNOT_CHANGE_MODE_P (from, to, i))
+ SET_HARD_REG_BIT (*used, i);
}
}
@@ -2657,8 +2658,7 @@ invalid_mode_change_p (regno, class, from_mode)
for (to_mode = 0; to_mode < NUM_MACHINE_MODES; ++to_mode)
if (REGNO_REG_SET_P (&subregs_of_mode[(int) to_mode], regno)
- && reg_classes_intersect_p
- (class, CANNOT_CHANGE_MODE_CLASS (from_mode, to_mode)))
+ && CANNOT_CHANGE_MODE_CLASS (from_mode, to_mode, class))
return 1;
return 0;
}