diff options
author | Eric Botcazou <ebotcazou@act-europe.fr> | 2004-02-27 09:11:34 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2004-02-27 08:11:34 +0000 |
commit | 288dc1eae2f0349f257da93a8cba7fae0404ff05 (patch) | |
tree | 89b9c323fc395b30c52bd4ad180647a25da37dd4 /gcc | |
parent | 7a0a47c77ffab06d18d4a0fc54905060eaeecd05 (diff) | |
download | gcc-288dc1eae2f0349f257da93a8cba7fae0404ff05.zip gcc-288dc1eae2f0349f257da93a8cba7fae0404ff05.tar.gz gcc-288dc1eae2f0349f257da93a8cba7fae0404ff05.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/expr.c | 14 | ||||
-rw-r--r-- | gcc/fold-const.c | 8 |
3 files changed, 17 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0677fe..d0d6185 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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); diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 956478a..9178a344 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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, |