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/cse.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/cse.c')
-rw-r--r-- | gcc/cse.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -3464,6 +3464,7 @@ fold_rtx (rtx x, rtx insn) int is_shift = (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT); rtx y, inner_const, new_const; + rtx canon_const_arg1 = const_arg1; enum rtx_code associate_code; if (is_shift @@ -3471,8 +3472,9 @@ fold_rtx (rtx x, rtx insn) || INTVAL (const_arg1) < 0)) { if (SHIFT_COUNT_TRUNCATED) - const_arg1 = GEN_INT (INTVAL (const_arg1) - & (GET_MODE_BITSIZE (mode) - 1)); + canon_const_arg1 = GEN_INT (INTVAL (const_arg1) + & (GET_MODE_BITSIZE (mode) + - 1)); else break; } @@ -3531,7 +3533,8 @@ fold_rtx (rtx x, rtx insn) associate_code = (is_shift || code == MINUS ? PLUS : code); new_const = simplify_binary_operation (associate_code, mode, - const_arg1, inner_const); + canon_const_arg1, + inner_const); if (new_const == 0) break; |