[PATCH] Set correct probability for ORDER/UNORDER jumps
Xinliang David Li
davidxl@google.com
Fri Jan 24 00:30:00 GMT 2014
Is it possible to add a test case?
David
On Wed, Jan 22, 2014 at 6:08 PM, Dehao Chen <dehao@google.com> wrote:
> During floating point comparison, compiler inserts conditional jumps
> to check if the operand is NAN. These type of checks are normally
> false. However, compiler sets the probability the same as the original
> float-compare conditional jump. This patch sets the probability of
> these conditional jumps as 1%.
>
> Bootstrapped and passed regression test.
>
> OK for trunk?
>
> Thanks,
> Dehao
>
> gcc/ChangeLog:
> 2014-01-22 Dehao Chen <dehao@google.com>
>
> * dojump.c (do_compare_rtx_and_jump): Sets correct probability for
> compiler inserted conditional jumps for NAN float check.
>
> Index: gcc/dojump.c
> ===================================================================
> --- gcc/dojump.c (revision 206945)
> +++ gcc/dojump.c (working copy)
> @@ -1103,6 +1103,11 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rt
>
> else
> {
> + int first_prob = prob;
> + if (first_code == UNORDERED)
> + first_prob = REG_BR_PROB_BASE / 100;
> + else if (first_code == ORDERED)
> + first_prob = REG_BR_PROB_BASE - REG_BR_PROB_BASE / 100;
> if (and_them)
> {
> rtx dest_label;
> @@ -1116,11 +1121,13 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rt
> else
> dest_label = if_false_label;
> do_compare_rtx_and_jump (op0, op1, first_code,
> unsignedp, mode,
> - size, dest_label, NULL_RTX, prob);
> + size, dest_label, NULL_RTX,
> + first_prob);
> }
> else
> do_compare_rtx_and_jump (op0, op1, first_code, unsignedp, mode,
> - size, NULL_RTX, if_true_label, prob);
> + size, NULL_RTX, if_true_label,
> + first_prob);
> }
> }
More information about the Gcc-patches
mailing list