> On June 8, 2017 5:27:24 PM GMT+02:00, Jan Hubicka <hubi...@ucw.cz> wrote: > >Hi, > >this patch adds cold attributes to (some of) our internal checking. > >This makes > >it possible to to propagate zero counts on these and produce bit better > >code > >(especially for checking enabled compiler). > > > >Bootstrapped/regtested x86_64-linux, comited. > > I wonder if we shouldn't annotate exit() with non-cold instead :)
I think this has still chance for false positives i.e. for embedded stuff that does everything from infinite loop. It kind of sucks, yes ;) Honza > > >Honza > > > > * system.h (fancy_abort): Annotate by ATTRIBUTE_COLD. > > * rtl.h (rtl_check_failed_bounds, rtl_check_failed_type1, > > rtl_check_failed_type2, rtl_check_failed_code1, > > rtl_check_failed_code2, rtl_check_failed_code_mode, > > rtl_check_failed_block_symbol, cwi_check_failed_bounds, > > rtvec_check_failed_bounds, rtl_check_failed_flag, > > _fatal_insn_not_found, _fatal_insn): Likewise. > > * tree.h (tree_contains_struct_check_failed, > > tree_check_failed, tree_not_check_failed, > > tree_class_check_failed, tree_range_check_failed, > > tree_not_class_check_failed, tree_int_cst_elt_check_failed, > > tree_vec_elt_check_failed, phi_node_elt_check_failed, > > tree_operand_check_failed, omp_clause_check_failed, > > omp_clause_operand_check_failed, omp_clause_range_check_failed): > > Likewise. > > * cp/cp-tree.h (lang_check_failed): Annotate by ATTRIBUTE_COLD. > > > >Index: system.h > >=================================================================== > >--- system.h (revision 249013) > >+++ system.h (working copy) > >@@ -722,7 +722,8 @@ extern int vsnprintf (char *, size_t, co > > > > /* Redefine abort to report an internal error w/o coredump, and > > reporting the location of the error in the source file. */ > >-extern void fancy_abort (const char *, int, const char *) > >ATTRIBUTE_NORETURN; > >+extern void fancy_abort (const char *, int, const char *) > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) > > > > /* Use gcc_assert(EXPR) to test invariants. */ > >Index: rtl.h > >=================================================================== > >--- rtl.h (revision 249013) > >+++ rtl.h (working copy) > >@@ -1148,30 +1148,30 @@ is_a_helper <rtx_note *>::test (rtx_insn > > > >extern void rtl_check_failed_bounds (const_rtx, int, const char *, int, > > const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_type1 (const_rtx, int, int, const char *, > >int, > > const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_type2 (const_rtx, int, int, int, const > >char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_code1 (const_rtx, enum rtx_code, const > >char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_code2 (const_rtx, enum rtx_code, enum > >rtx_code, > > const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_code_mode (const_rtx, enum rtx_code, > >machine_mode, > > bool, const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtl_check_failed_block_symbol (const char *, int, const > >char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void cwi_check_failed_bounds (const_rtx, int, const char *, int, > > const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, > >int, > > const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > > > #else /* not ENABLE_RTL_CHECKING */ > > > >@@ -1269,7 +1269,7 @@ extern void rtvec_check_failed_bounds (c > > > >extern void rtl_check_failed_flag (const char *, const_rtx, const char > >*, > > int, const char *) > >- ATTRIBUTE_NORETURN > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD > > ; > > > > #else /* not ENABLE_RTL_FLAG_CHECKING */ > >@@ -3793,9 +3793,9 @@ extern location_t curr_insn_location (vo > > > > /* rtl-error.c */ > >extern void _fatal_insn_not_found (const_rtx, const char *, int, const > >char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void _fatal_insn (const char *, const_rtx, const char *, int, > >const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > > > #define fatal_insn(msgid, insn) \ > > _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__) > >Index: tree.h > >=================================================================== > >--- tree.h (revision 249013) > >+++ tree.h (working copy) > >@@ -358,45 +358,45 @@ as_internal_fn (combined_fn code) > > extern void tree_contains_struct_check_failed (const_tree, > > const enum > > tree_node_structure_enum, > > const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > > >extern void tree_check_failed (const_tree, const char *, int, const > >char *, > >- ...) ATTRIBUTE_NORETURN; > >+ ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void tree_not_check_failed (const_tree, const char *, int, const > >char *, > >- ...) ATTRIBUTE_NORETURN; > >+ ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void tree_class_check_failed (const_tree, const enum > >tree_code_class, > > const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void tree_range_check_failed (const_tree, const char *, int, > > const char *, enum tree_code, > > enum tree_code) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void tree_not_class_check_failed (const_tree, > > const enum tree_code_class, > > const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void tree_int_cst_elt_check_failed (int, int, const char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void tree_vec_elt_check_failed (int, int, const char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void phi_node_elt_check_failed (int, int, const char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void tree_operand_check_failed (int, const_tree, > > const char *, int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > extern void omp_clause_check_failed (const_tree, const char *, int, > > const char *, enum omp_clause_code) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void omp_clause_operand_check_failed (int, const_tree, const > >char *, > > int, const char *) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > >extern void omp_clause_range_check_failed (const_tree, const char *, > >int, > > const char *, enum omp_clause_code, > > enum omp_clause_code) > >- ATTRIBUTE_NORETURN; > >+ ATTRIBUTE_NORETURN ATTRIBUTE_COLD; > > > > #else /* not ENABLE_TREE_CHECKING, or not gcc */ > > > >Index: cp/cp-tree.h > >=================================================================== > >--- cp/cp-tree.h (revision 249013) > >+++ cp/cp-tree.h (working copy) > >@@ -6819,7 +6819,8 @@ extern void cp_free_lang_data (tree t > > extern tree force_target_expr (tree, tree, > > tsubst_flags_t); > > extern tree build_target_expr_with_type (tree, tree, > > tsubst_flags_t); > > extern void lang_check_failed (const char *, int, > >- const char *) > >ATTRIBUTE_NORETURN; > >+ const char *) > >ATTRIBUTE_NORETURN > >+ ATTRIBUTE_COLD; > > extern tree stabilize_expr (tree, tree *); > > extern void stabilize_call (tree, tree *); > > extern bool stabilize_init (tree, tree *);