diff options
author | mshawcroft <mshawcroft@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-24 11:07:57 +0000 |
---|---|---|
committer | mshawcroft <mshawcroft@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-24 11:07:57 +0000 |
commit | 71e16a8fb126f4b81b1b04eb6e7f5bfcff79b910 (patch) | |
tree | d2f0426293ac9bb76b776e8b899cf5ed99edfaf4 /gcc/recog.c | |
parent | cc3f82be0388732a3dd68e893bbcc0b87ba8c1a3 (diff) | |
download | gcc-71e16a8fb126f4b81b1b04eb6e7f5bfcff79b910.tar.gz |
2012-05-24 Jim MacArthur<jim.macarthur@arm.com>
* recog.c (reg_fits_class_p): Check both regno and regno + offset are
hard registers.
* regs.h (in_hard_reg_set_p): Assert that regno is a hard register and
check end_regno - 1 is a hard register.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187826 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/recog.c')
-rw-r--r-- | gcc/recog.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index c5725d2abdf..d6645942cc7 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2792,14 +2792,16 @@ bool reg_fits_class_p (const_rtx operand, reg_class_t cl, int offset, enum machine_mode mode) { - int regno = REGNO (operand); + unsigned int regno = REGNO (operand); if (cl == NO_REGS) return false; + /* Regno must not be a pseudo register. Offset may be negative. */ return (HARD_REGISTER_NUM_P (regno) - && in_hard_reg_set_p (reg_class_contents[(int) cl], - mode, regno + offset)); + && HARD_REGISTER_NUM_P (regno + offset) + && in_hard_reg_set_p (reg_class_contents[(int) cl], mode, + regno + offset)); } /* Split single instruction. Helper function for split_all_insns and |