diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-03-14 09:10:55 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-03-14 09:10:55 +0100 |
commit | 39b2ac744aa646a35dee80b7b4d47d21b7a30d2b (patch) | |
tree | 846f43789220854350a5292b7c8ad1aa4e0e2c86 /gcc/rtlanal.c | |
parent | 037e4a3ed3ea9214e434b5664bb1fa72cb2dda34 (diff) | |
download | gcc-39b2ac744aa646a35dee80b7b4d47d21b7a30d2b.zip gcc-39b2ac744aa646a35dee80b7b4d47d21b7a30d2b.tar.gz gcc-39b2ac744aa646a35dee80b7b4d47d21b7a30d2b.tar.bz2 |
re PR bootstrap/39454 (Bootstrap failure on sparcv9-linux with profiledbootstrap)
PR bootstrap/39454
* cse.c (fold_rtx): Don't modify original const_arg1 when
canonicalizing SHIFT_COUNT_TRUNCATED shift count, do it on a
separate variable instead.
* rtlanal.c (nonzero_bits1) <case ASHIFTRT>: Don't assume anything
from out of range shift counts.
(num_sign_bit_copies1) <case ASHIFTRT, case ASHIFT>: Similarly.
From-SVN: r144857
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 26f69b0..b35d774 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -4061,7 +4061,8 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, low-order bits by left shifts. */ if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) >= 0 - && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT) + && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT + && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x))) { enum machine_mode inner_mode = GET_MODE (x); unsigned int width = GET_MODE_BITSIZE (inner_mode); @@ -4542,7 +4543,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode, known_x, known_mode, known_ret); if (GET_CODE (XEXP (x, 1)) == CONST_INT - && INTVAL (XEXP (x, 1)) > 0) + && INTVAL (XEXP (x, 1)) > 0 + && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x))) num0 = MIN ((int) bitwidth, num0 + INTVAL (XEXP (x, 1))); return num0; @@ -4551,7 +4553,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, /* Left shifts destroy copies. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT || INTVAL (XEXP (x, 1)) < 0 - || INTVAL (XEXP (x, 1)) >= (int) bitwidth) + || INTVAL (XEXP (x, 1)) >= (int) bitwidth + || INTVAL (XEXP (x, 1)) >= GET_MODE_BITSIZE (GET_MODE (x))) return 1; num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode, |