diff options
author | Jason Merrill <jason@redhat.com> | 2018-11-16 16:49:42 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-11-16 16:49:42 -0500 |
commit | 2674fa47de9ecfee5b04f753582fb23041029f40 (patch) | |
tree | 1c43236aab7e94c52420d2456ea29ce3079f0857 /gcc/c-family/c-common.h | |
parent | a0a57b074f79dbe5e01745da9cfbd08a52fa8cfd (diff) | |
download | gcc-2674fa47de9ecfee5b04f753582fb23041029f40.zip gcc-2674fa47de9ecfee5b04f753582fb23041029f40.tar.gz gcc-2674fa47de9ecfee5b04f753582fb23041029f40.tar.bz2 |
Implement P0479R5, [[likely]] and [[unlikely]].
[[likely]] and [[unlikely]] are equivalent to the GNU hot/cold attributes,
except that they can be applied to arbitrary statements as well as labels;
this is most likely to be useful for marking if/else branches as likely or
unlikely. Conveniently, PREDICT_EXPR fits the bill nicely as a
representation.
I also had to fix marking case labels as hot/cold, which didn't work before.
Which then required me to force __attribute ((fallthrough)) to apply to the
statement rather than the label.
gcc/
* gimplify.c (gimplify_case_label_expr): Handle hot/cold attributes.
gcc/c-family/
* c-lex.c (c_common_has_attribute): Handle likely/unlikely.
* c-attribs.c (attr_cold_hot_exclusions): Make public.
gcc/cp/
* tree.c (handle_likeliness_attribute): New.
(std_attribute_table): Add likely/unlikely.
* cp-gimplify.c (lookup_hotness_attribute, remove_hotness_attribute)
(process_stmt_hotness_attribute, first_stmt): New.
(genericize_if_stmt): Check for duplicate predictions.
* parser.c (cp_parser_statement): Call
process_stmt_hotness_attribute.
(cp_parser_label_for_labeled_statement): Apply attributes to case.
* decl.c (finish_case_label): Give label in template type void.
* pt.c (tsubst_expr) [CASE_LABEL_EXPR]: Copy attributes.
[PREDICT_EXPR]: Handle.
From-SVN: r266223
Diffstat (limited to 'gcc/c-family/c-common.h')
-rw-r--r-- | gcc/c-family/c-common.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 8eeeba7..4aa6142 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1330,6 +1330,7 @@ extern int parse_tm_stmt_attr (tree, int); extern int tm_attr_to_mask (tree); extern tree tm_mask_to_attr (int); extern tree find_tm_attribute (tree); +extern const struct attribute_spec::exclusions attr_cold_hot_exclusions[]; /* A bitmap of flags to positional_argument. */ enum posargflags { |