From 7958f3c750d0807cc854efd41a239d57c5c8b4d9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 21 Dec 2001 12:07:59 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ 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 + + * 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 * 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; -- 2.30.2