diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-21 11:07:59 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-21 11:07:59 +0000 |
| commit | 4085a3e18c2a9bf1141946f2ea53c295d75c9d03 (patch) | |
| tree | 8cce78d4e8c0521a29bede0e4e841a0dcfe7d4d3 | |
| parent | 8e7f7ecc10de0e7829330ccab85ac34d2e679a8f (diff) | |
| download | ppe42-gcc-4085a3e18c2a9bf1141946f2ea53c295d75c9d03.tar.gz ppe42-gcc-4085a3e18c2a9bf1141946f2ea53c295d75c9d03.zip | |
* combine.c (nonzero_bits): If using reg_nonzero_bits,
we don't know anything about bits outside of X mode.
(num_sign_bit_copies): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48239 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/combine.c | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 90776b28632..486394cc694 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-12-21 Jakub Jelinek <jakub@redhat.com> + + * combine.c (nonzero_bits): If using reg_nonzero_bits, + we don't know anything about bits outside of X mode. + (num_sign_bit_copies): Likewise. + 2001-12-21 Nick Clifton <nickc@cambridge.redhat.com> * config/arm/arm.md (prefetch): Use 'a' operand code. diff --git a/gcc/combine.c b/gcc/combine.c index a0b08ec1258..1fa63b80c9e 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7990,7 +7990,14 @@ nonzero_bits (x, mode) return nonzero_bits (tem, mode); } else if (nonzero_sign_valid && reg_nonzero_bits[REGNO (x)]) - return reg_nonzero_bits[REGNO (x)] & nonzero; + { + unsigned HOST_WIDE_INT mask = reg_nonzero_bits[REGNO (x)]; + + if (GET_MODE_BITSIZE (GET_MODE (x)) < mode_width) + /* We don't know anything about the upper bits. */ + mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (GET_MODE (x)); + return nonzero & mask; + } else return nonzero; @@ -8385,7 +8392,8 @@ num_sign_bit_copies (x, mode) if (tem != 0) return num_sign_bit_copies (tem, mode); - if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0) + if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0 + && GET_MODE_BITSIZE (GET_MODE (x)) == bitwidth) return reg_sign_bit_copies[REGNO (x)]; break; |

