Introduce __builtin_expect_with_probability (PR target/83610).
authorMartin Liska <mliska@suse.cz>
Fri, 10 Aug 2018 09:43:06 +0000 (11:43 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 10 Aug 2018 09:43:06 +0000 (09:43 +0000)
commit1e9168b27999c2f151e7169beabce4ee71d3eccc
treea3137d2cf87f2981a38c27770ac4df9f144bb23b
parent7a096965f668c1d2129c70c92e2398227b97eee6
Introduce __builtin_expect_with_probability (PR target/83610).

2018-08-10  Martin Liska  <mliska@suse.cz>

        PR target/83610
* builtin-types.def (BT_FN_LONG_LONG_LONG_DOUBLE): Add new
        function type.
* builtins.c (expand_builtin_expect_with_probability):
        New function.
(expand_builtin_expect_with_probability): New function.
(build_builtin_expect_predicate): Add new argumnet probability
        for BUILT_IN_EXPECT_WITH_PROBABILITY.
(fold_builtin_expect):
(fold_builtin_2):
(fold_builtin_3):
* builtins.def (BUILT_IN_EXPECT_WITH_PROBABILITY):
* builtins.h (fold_builtin_expect): Set new argument.
* doc/extend.texi: Document __builtin_expect_with_probability.
* doc/invoke.texi: Likewise.
* gimple-fold.c (gimple_fold_call): Pass new argument.
* ipa-fnsummary.c (find_foldable_builtin_expect): Handle
        also BUILT_IN_EXPECT_WITH_PROBABILITY.
* predict.c (get_predictor_value): New function.
(expr_expected_value): Add new argument probability. Assume
        that predictor and probability are always non-null.
(expr_expected_value_1): Likewise.  For __builtin_expect and
        __builtin_expect_with_probability set probability.  Handle
        combination in binary expressions.
(tree_predict_by_opcode): Simplify code by simply calling
        get_predictor_value.
(pass_strip_predict_hints::execute): Add handling of
        BUILT_IN_EXPECT_WITH_PROBABILITY.
* predict.def (PRED_BUILTIN_EXPECT_WITH_PROBABILITY): Add
        new predictor.
* tree.h (DECL_BUILT_IN_P): New function.
2018-08-10  Martin Liska  <mliska@suse.cz>

        PR target/83610
* gcc.dg/predict-17.c: New test.
* gcc.dg/predict-18.c: New test.
* gcc.dg/predict-19.c: New test.

From-SVN: r263466
16 files changed:
gcc/ChangeLog
gcc/builtin-types.def
gcc/builtins.c
gcc/builtins.def
gcc/builtins.h
gcc/doc/extend.texi
gcc/doc/invoke.texi
gcc/gimple-fold.c
gcc/ipa-fnsummary.c
gcc/predict.c
gcc/predict.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/predict-17.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/predict-18.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/predict-19.c [new file with mode: 0644]
gcc/tree.h