+2016-10-18 Andrew Pinski <apinski@cavium.com>
+
+ 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 <ubizjak@gmail.com>
PR target/77991
}
}
+/* 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
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);