diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-07-01 06:55:03 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-07-01 06:55:03 -0400 |
commit | cba057ed8cb28f6d1c93386434645176293bda4d (patch) | |
tree | 1506b0a71d84f567ebbe3903d30a5e202e2ceeb4 /gcc | |
parent | 535c9c216751202ce01f8254bf5ae9f35926c36b (diff) | |
download | gcc-cba057ed8cb28f6d1c93386434645176293bda4d.zip gcc-cba057ed8cb28f6d1c93386434645176293bda4d.tar.gz gcc-cba057ed8cb28f6d1c93386434645176293bda4d.tar.bz2 |
(register_operand): Disallow subreg of reg not allowed to change size.
From-SVN: r10094
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/recog.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index 21c786a..745d628 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -864,6 +864,17 @@ register_operand (op, mode) reg went on the stack.) */ if (! reload_completed && GET_CODE (SUBREG_REG (op)) == MEM) return general_operand (op, mode); + +#ifdef CLASS_CANNOT_CHANGE_SIZE + if (GET_CODE (SUBREG_REG (op)) == REG + && REGNO (SUBREG_REG (op)) < FIRST_PSEUDO_REGISTER + && TEST_HARD_REG_BIT (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE], + REGNO (SUBREG_REG (op))) + && (GET_MODE_SIZE (mode) + != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))) + return 0; +#endif + op = SUBREG_REG (op); } |