Introduce __builtin_expect_with_probability (PR target/83610).
commit01107f42aa24fd5d725ea5f5fd97c75b2d18fa38
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Aug 2018 09:43:06 +0000 (10 09:43 +0000)
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Aug 2018 09:43:06 +0000 (10 09:43 +0000)
treea3137d2cf87f2981a38c27770ac4df9f144bb23b
parentc03de6c9913892e3dd7537ec17ebc859a3ef6e36
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263466 138bc75d-0d04-0410-961f-82ee72b054a4
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