diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b4eb108b6c9..6e23210797b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-06-15 Roger Sayle + + * expr.c (compare_from_rtx): Call simplify_relational_operation + on all comparisons, not just those between integer constants, + with the correct (possibly unsigned) comparison code. + (do_compare_rtx_and_jump): Likewise. + 2002-06-15 John David Anglin * Makefile.in (tm_defines): New configuration variable. diff --git a/gcc/expr.c b/gcc/expr.c index dc36708952d..bba785ab33b 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -10045,6 +10045,7 @@ compare_from_rtx (op0, op1, code, unsignedp, mode, size) enum machine_mode mode; rtx size; { + enum rtx_code ucode; rtx tem; /* If one operand is constant, make it the second one. Only do this @@ -10066,8 +10067,8 @@ compare_from_rtx (op0, op1, code, unsignedp, mode, size) do_pending_stack_adjust (); - if (GET_CODE (op0) == CONST_INT && GET_CODE (op1) == CONST_INT - && (tem = simplify_relational_operation (code, mode, op0, op1)) != 0) + ucode = unsignedp ? unsigned_condition (code) : code; + if ((tem = simplify_relational_operation (ucode, mode, op0, op1)) != 0) return tem; #if 0 @@ -10117,6 +10118,7 @@ do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, size, rtx size; rtx if_false_label, if_true_label; { + enum rtx_code ucode; rtx tem; int dummy_true_label = 0; @@ -10148,8 +10150,8 @@ do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, size, do_pending_stack_adjust (); - if (GET_CODE (op0) == CONST_INT && GET_CODE (op1) == CONST_INT - && (tem = simplify_relational_operation (code, mode, op0, op1)) != 0) + ucode = unsignedp ? unsigned_condition (code) : code; + if ((tem = simplify_relational_operation (ucode, mode, op0, op1)) != 0) { if (tem == const_true_rtx) {