Commit 7acda552 by Richard Kenner Committed by Richard Kenner

expr.c (expand_expr_real_1, [...]): Properly handle REDUCE_BIT_FIELD by applying…

expr.c (expand_expr_real_1, [...]): Properly handle REDUCE_BIT_FIELD by applying it to result, not input, of conversion.

	* expr.c (expand_expr_real_1, case NOP_EXPR): Properly handle
	REDUCE_BIT_FIELD by applying it to result, not input, of conversion.

From-SVN: r91498
parent 0d0a0935
2004-11-30 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* expr.c (expand_expr_real_1, case NOP_EXPR): Properly handle
REDUCE_BIT_FIELD by applying it to result, not input, of conversion.
2004-11-30 Ben Elliston <bje@au.ibm.com> 2004-11-30 Ben Elliston <bje@au.ibm.com>
* Makefile.in (REGS_H): Depend on $(BASIC_BLOCK_H). * Makefile.in (REGS_H): Depend on $(BASIC_BLOCK_H).
......
...@@ -7241,36 +7241,39 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -7241,36 +7241,39 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
} }
op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier); op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier);
op0 = REDUCE_BIT_FIELD (op0);
if (GET_MODE (op0) == mode) if (GET_MODE (op0) == mode)
return op0; ;
/* If OP0 is a constant, just convert it into the proper mode. */ /* If OP0 is a constant, just convert it into the proper mode. */
if (CONSTANT_P (op0)) else if (CONSTANT_P (op0))
{ {
tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
enum machine_mode inner_mode = TYPE_MODE (inner_type); enum machine_mode inner_mode = TYPE_MODE (inner_type);
if (modifier == EXPAND_INITIALIZER) if (modifier == EXPAND_INITIALIZER)
return simplify_gen_subreg (mode, op0, inner_mode, op0 = simplify_gen_subreg (mode, op0, inner_mode,
subreg_lowpart_offset (mode, subreg_lowpart_offset (mode,
inner_mode)); inner_mode));
else else
return convert_modes (mode, inner_mode, op0, op0= convert_modes (mode, inner_mode, op0,
TYPE_UNSIGNED (inner_type)); TYPE_UNSIGNED (inner_type));
} }
if (modifier == EXPAND_INITIALIZER) else if (modifier == EXPAND_INITIALIZER)
return gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, mode, op0); op0 = gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, mode, op0);
if (target == 0) else if (target == 0)
return op0 = convert_to_mode (mode, op0,
convert_to_mode (mode, op0, TYPE_UNSIGNED (TREE_TYPE
TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); (TREE_OPERAND (exp, 0))));
else else
convert_move (target, op0, {
TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); convert_move (target, op0,
return target; TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))));
op0 = target;
}
return REDUCE_BIT_FIELD (op0);
case VIEW_CONVERT_EXPR: case VIEW_CONVERT_EXPR:
op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier); op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier);
......
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