diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-07-01 10:55:03 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-07-01 10:55:03 +0000 |
commit | 4181ff7133f0dc67e71de1345dce602bdf7101ab (patch) | |
tree | 1506b0a71d84f567ebbe3903d30a5e202e2ceeb4 /gcc/recog.c | |
parent | 4a6e3b4231fdd1ec325f89593d68ac1ab239c761 (diff) | |
download | ppe42-gcc-4181ff7133f0dc67e71de1345dce602bdf7101ab.tar.gz ppe42-gcc-4181ff7133f0dc67e71de1345dce602bdf7101ab.zip |
(register_operand): Disallow subreg of reg not allowed to change size.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10094 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/recog.c')
-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 21c786a6966..745d62881d2 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); } |