public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "richard.yao at alumni dot stonybrook.edu" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug c/110007] Implement support for Clang’s __builtin_unpredictable() Date: Sun, 28 May 2023 21:37:03 +0000 [thread overview] Message-ID: <bug-110007-4-GUNsAtaFFk@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-110007-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110007 --- Comment #8 from Richard Yao <richard.yao at alumni dot stonybrook.edu> --- (In reply to Alexander Monakov from comment #6) > Are you sure the branch is unpredictable in your micro-benchmark? If you > have repeated runs you'll train the predictors. (In reply to Jan Hubicka from comment #7) > Also note that branch predicted with 50% outcome is not necessarily > unpredictable for example in this: > > for (int i = 0; i < 10000; i++) > if (i&1) > .... > > I would expect branch predictor to work this out on modern systems. > So having explicit flag in branch_probability that given probability is hard > for CPU to predict would make sense and I was thinking we may try to get > this info from auto-fdo eventually too. Good point. I had reused an existing micro-benchmark, but it is using libc's srand(), which is known for not having great quality RNG. It is quite possible that the last branch really is predictable because of that. Having only 1 unpredictable branch is not that terrible, so I probably will defer looking into this further to a future date. (In reply to Alexander Monakov from comment #6) > Implementing a __builtin_branchless_select would address such needs more > directly. There were similar requests in the past, two of them related to > qsort and bsearch, unsurprisingly: PR 93165, PR 97734, PR 106804. As a developer that works on a project that supports GCC and Clang equally, but must support older versions of GCC longer, I would like to see both GCC and Clang adopt each others' builtins. That way, I need to implement fewer compatibility shims to support both compilers and what compatibility shims I do need can be dropped sooner (maybe after 10 years). I am not against the new builtin, but I would like to also have __builtin_unpredictable(). It would be consistent with the existing likely/unlikely macros that my project uses, which should mean other developers will not have to learn the specifics of how predication works to read code using it, since they can just treat it as a compiler hint and read things as if it were not there unless they have some reason to reason more deeply about things. I could just do a macro around __builtin_expect_with_probability(), but I greatly prefer __builtin_unpredictable() since people reading the code do not need to decipher the argument list to understand what it does since the name is self documenting.
next prev parent reply other threads:[~2023-05-28 21:37 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-05-27 17:54 [Bug c/110007] New: " richard.yao at alumni dot stonybrook.edu 2023-05-27 17:59 ` [Bug c/110007] " pinskia at gcc dot gnu.org 2023-05-27 18:01 ` pinskia at gcc dot gnu.org 2023-05-27 18:19 ` richard.yao at alumni dot stonybrook.edu 2023-05-27 18:25 ` pinskia at gcc dot gnu.org 2023-05-27 20:26 ` richard.yao at alumni dot stonybrook.edu 2023-05-28 5:42 ` amonakov at gcc dot gnu.org 2023-05-28 16:21 ` hubicka at gcc dot gnu.org 2023-05-28 21:37 ` richard.yao at alumni dot stonybrook.edu [this message] 2023-05-30 7:49 ` rguenth at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-110007-4-GUNsAtaFFk@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).