Commit 39b2ac74 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 037e4a3e
2009-03-14 Jakub Jelinek <jakub@redhat.com>
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.
2008-03-13 Catherine Moore <clm@codesourcery.com>
gcc/
* gcc/config/i386/x-mingw32 (host-mingw32.o): Replace
diagnostic.h with $(DIAGNOSTIC_H).
......
......@@ -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;
......
......@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment