Commit 402b6c2a by Jim Wilson Committed by Jim Wilson

Fix ia64 execute/930630-1.c miscompilation.

	* combine.c (force_to_mode, case LSHIFTRT): New local inner_mask.  Set
	inner_mask instead of mask.

From-SVN: r30812
parent de1f429d
Mon Dec 6 15:12:14 1999 Jim Wilson <wilson@cygnus.com>
* combine.c (force_to_mode, case LSHIFTRT): New local inner_mask. Set
inner_mask instead of mask.
1999-12-06 Brendan Kehoe <brendan@cygnus.com> 1999-12-06 Brendan Kehoe <brendan@cygnus.com>
* dwarf2out.c (field_byte_offset): As with dwarfout.c, size can be * dwarf2out.c (field_byte_offset): As with dwarfout.c, size can be
......
...@@ -6815,18 +6815,19 @@ force_to_mode (x, mode, mask, reg, just_select) ...@@ -6815,18 +6815,19 @@ force_to_mode (x, mode, mask, reg, just_select)
&& GET_MODE_BITSIZE (op_mode) <= HOST_BITS_PER_WIDE_INT) && GET_MODE_BITSIZE (op_mode) <= HOST_BITS_PER_WIDE_INT)
{ {
rtx inner = XEXP (x, 0); rtx inner = XEXP (x, 0);
unsigned HOST_WIDE_INT inner_mask;
/* Select the mask of the bits we need for the shift operand. */ /* Select the mask of the bits we need for the shift operand. */
mask <<= INTVAL (XEXP (x, 1)); inner_mask = mask << INTVAL (XEXP (x, 1));
/* We can only change the mode of the shift if we can do arithmetic /* We can only change the mode of the shift if we can do arithmetic
in the mode of the shift and MASK is no wider than the width of in the mode of the shift and INNER_MASK is no wider than the
OP_MODE. */ width of OP_MODE. */
if (GET_MODE_BITSIZE (op_mode) > HOST_BITS_PER_WIDE_INT if (GET_MODE_BITSIZE (op_mode) > HOST_BITS_PER_WIDE_INT
|| (mask & ~ GET_MODE_MASK (op_mode)) != 0) || (inner_mask & ~ GET_MODE_MASK (op_mode)) != 0)
op_mode = GET_MODE (x); op_mode = GET_MODE (x);
inner = force_to_mode (inner, op_mode, mask, reg, next_select); inner = force_to_mode (inner, op_mode, inner_mask, reg, next_select);
if (GET_MODE (x) != op_mode || inner != XEXP (x, 0)) if (GET_MODE (x) != op_mode || inner != XEXP (x, 0))
x = gen_binary (LSHIFTRT, op_mode, inner, XEXP (x, 1)); x = gen_binary (LSHIFTRT, op_mode, inner, XEXP (x, 1));
......
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