Commit 288dc1ea by Eric Botcazou Committed by Eric Botcazou

fold-const.c (fold): Revert 2004-02-25 change.

	* fold-const.c (fold): Revert 2004-02-25 change.  Use the original
	operands to build a tree with swapped operands.
	* expr.c (expand_expr_real) <MAX_EXPR>: Consistently use the
	'unsignedp' predicate to specify the signedness.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>

From-SVN: r78558
parent 7a0a47c7
2004-02-27 Eric Botcazou <ebotcazou@act-europe.fr>
Roger Sayle <roger@eyesopen.com>
* fold-const.c (fold): Revert 2004-02-25 change. Use the original
operands to build a tree with swapped operands.
* expr.c (expand_expr_real) <MAX_EXPR>: Consistently use the
'unsignedp' predicate to specify the signedness.
2004-02-27 Kazu Hirata <kazu@cs.umass.edu>
* c-decl.c, c-ppoutput.c, combine.c, cppfiles.c, dwarf2out.c,
......
......@@ -8034,7 +8034,7 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
/* First try to do it with a special MIN or MAX instruction.
If that does not win, use a conditional jump to select the proper
value. */
this_optab = (TREE_UNSIGNED (type)
this_optab = (unsignedp
? (code == MIN_EXPR ? umin_optab : umax_optab)
: (code == MIN_EXPR ? smin_optab : smax_optab));
......@@ -8068,18 +8068,16 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
&& ! can_compare_p (GE, mode, ccp_jump))
{
if (code == MAX_EXPR)
do_jump_by_parts_greater_rtx (mode, TREE_UNSIGNED (type),
target, op1, NULL_RTX, op0);
do_jump_by_parts_greater_rtx (mode, unsignedp, target, op1,
NULL_RTX, op0);
else
do_jump_by_parts_greater_rtx (mode, TREE_UNSIGNED (type),
op1, target, NULL_RTX, op0);
do_jump_by_parts_greater_rtx (mode, unsignedp, op1, target,
NULL_RTX, op0);
}
else
{
int unsignedp = TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1)));
do_compare_rtx_and_jump (target, op1, code == MAX_EXPR ? GE : LE,
unsignedp, mode, NULL_RTX, NULL_RTX,
op0);
unsignedp, mode, NULL_RTX, NULL_RTX, op0);
}
emit_move_insn (target, op1);
emit_label (op0);
......
......@@ -5423,10 +5423,7 @@ fold (tree expr)
if (op == 0)
continue; /* Valid for CALL_EXPR, at least. */
if (kind == '<'
|| code == MAX_EXPR
|| code == MIN_EXPR
|| code == RSHIFT_EXPR)
if (kind == '<' || code == RSHIFT_EXPR)
{
/* Signedness matters here. Perhaps we can refine this
later. */
......@@ -5459,7 +5456,8 @@ fold (tree expr)
to ARG1 to reduce the number of tests below. */
if (commutative_tree_code (code)
&& tree_swap_operands_p (arg0, arg1, true))
return fold (build (code, type, arg1, arg0));
return fold (build (code, type, TREE_OPERAND (t, 1),
TREE_OPERAND (t, 0)));
/* Now WINS is set as described above,
ARG0 is the first operand of EXPR,
......
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