X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_confirms.c;h=1416d0845de58a305f0e3255fa232b358bf730e2;hb=98c8808ee1d34300860bb78185558e1731a99368;hp=1f31a17aa01b1df0669ecc2b6dc86321365ac41d;hpb=78ffd186d60f8e98179fb470f58e5223226bc0e3;p=libfirm diff --git a/ir/opt/opt_confirms.c b/ir/opt/opt_confirms.c index 1f31a17aa..1416d0845 100644 --- a/ir/opt/opt_confirms.c +++ b/ir/opt/opt_confirms.c @@ -138,8 +138,11 @@ value_classify classify_value_sign(ir_node *n) c = mode_is_int(mode) && mode_honor_signed_zeros(mode) ? get_mode_one(mode) : get_mode_null(mode); - ncmp = tarval_cmp(tv, c) ^ pn_Cmp_Eq; - if (cmp != ncmp) + ncmp = tarval_cmp(tv, c); + if (ncmp == pn_Cmp_Eq) + ncmp = pn_Cmp_Le; + + if (cmp != (ncmp ^ pn_Cmp_Eq)) return VALUE_UNKNOWN; /* yep, negative */ @@ -158,8 +161,11 @@ value_classify classify_value_sign(ir_node *n) if (mode_is_int(mode)) { c = get_mode_minus_one(mode); - ncmp = tarval_cmp(tv, c) ^ pn_Cmp_Eq; - if (cmp != ncmp) + ncmp = tarval_cmp(tv, c); + if (ncmp == pn_Cmp_Eq) + ncmp = pn_Cmp_Ge; + + if (cmp != (ncmp ^ pn_Cmp_Eq)) return VALUE_UNKNOWN; } else {