diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-12-21 12:07:59 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-12-21 12:07:59 +0100 |
commit | 7958f3c750d0807cc854efd41a239d57c5c8b4d9 (patch) | |
tree | 8cce78d4e8c0521a29bede0e4e841a0dcfe7d4d3 | |
parent | b7fb9feb713f47d880d251ff1323e40fc37c14c7 (diff) | |
download | gcc-7958f3c750d0807cc854efd41a239d57c5c8b4d9.zip gcc-7958f3c750d0807cc854efd41a239d57c5c8b4d9.tar.gz gcc-7958f3c750d0807cc854efd41a239d57c5c8b4d9.tar.bz2 |
combine.c (nonzero_bits): If using reg_nonzero_bits, we don't know anything about bits outside of X mode.
* 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.
From-SVN: r48239
-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 90776b2..486394c 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 a0b08ec..1fa63b8 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; |