[Bug middle-end/59521] __builtin_expect not effective in switch

marxin at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Sep 3 07:53:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59521

--- Comment #20 from Martin Liška <marxin at gcc dot gnu.org> ---
Author: marxin
Date: Mon Sep  3 07:51:56 2018
New Revision: 264050

URL: https://gcc.gnu.org/viewcvs?rev=264050&root=gcc&view=rev
Log:
Make __builtin_expect effective in switch statements (PR middle-end/PR59521).

2018-09-03  Martin Liska  <mliska@suse.cz>

  PR middle-end/59521
        * predict.c (set_even_probabilities): Add likely_edges
        argument and handle cases where we have precisely one
        likely edge.
        (combine_predictions_for_bb): Catch also likely_edges.
        (tree_predict_by_opcode): Handle gswitch statements.
        * tree-cfg.h (find_case_label_for_value): New declaration.
        (find_taken_edge_switch_expr): Likewise.
        * tree-switch-conversion.c (switch_decision_tree::balance_case_nodes):
        Find pivot in decision tree based on probabily, not by number of
        nodes.
2018-09-03  Martin Liska  <mliska@suse.cz>

  PR middle-end/59521
        * c-c++-common/pr59521-1.c: New test.
        * c-c++-common/pr59521-2.c: New test.
        * gcc.dg/tree-prof/pr59521-3.c: New test.

Added:
    trunk/gcc/testsuite/c-c++-common/pr59521-1.c
    trunk/gcc/testsuite/c-c++-common/pr59521-2.c
    trunk/gcc/testsuite/gcc.dg/tree-prof/pr59521-3.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/predict.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-cfg.c
    trunk/gcc/tree-cfg.h
    trunk/gcc/tree-switch-conversion.c


More information about the Gcc-bugs mailing list