From e25a366f6fbfec00094d243a41b0d9dacdd66575 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 18 Oct 2016 15:42:21 +0000 Subject: [PATCH] re PR middle-end/65950 (exit in main is causing the path to it to become unlikely.) 2016-10-18 Andrew Pinski PR tree-opt/65950 * predict.c (is_exit_with_zero_arg): New function. (tree_bb_level_predictions): Don't consider paths leading to exit(0) as nottaken. From-SVN: r241309 --- gcc/ChangeLog | 7 +++++++ gcc/predict.c | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fc85caaf7d..0b08748b9c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-10-18 Andrew Pinski + + PR tree-opt/65950 + * predict.c (is_exit_with_zero_arg): New function. + (tree_bb_level_predictions): Don't consider paths leading to exit(0) + as nottaken. + 2016-10-18 Uros Bizjak PR target/77991 diff --git a/gcc/predict.c b/gcc/predict.c index 9950c095cc0..1bf04d18c1c 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -2512,6 +2512,21 @@ tree_predict_by_opcode (basic_block bb) } } +/* Returns TRUE if the STMT is exit(0) like statement. */ + +static bool +is_exit_with_zero_arg (const gimple *stmt) +{ + /* This is not exit, _exit or _Exit. */ + if (!gimple_call_builtin_p (stmt, BUILT_IN_EXIT) + && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT) + && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT2)) + return false; + + /* Argument is an interger zero. */ + return integer_zerop (gimple_call_arg (stmt, 0)); +} + /* Try to guess whether the value of return means error code. */ static enum br_predictor @@ -2638,7 +2653,9 @@ tree_bb_level_predictions (void) if (is_gimple_call (stmt)) { - if (gimple_call_noreturn_p (stmt) && has_return_edges) + if (gimple_call_noreturn_p (stmt) + && has_return_edges + && !is_exit_with_zero_arg (stmt)) predict_paths_leading_to (bb, PRED_NORETURN, NOT_TAKEN); decl = gimple_call_fndecl (stmt); -- 2.30.2