public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug tree-optimization/99946] New: fail to exchange if conditions in terms of likely/unlikely probability @ 2021-04-07 2:01 jiangning.liu at amperecomputing dot com 2021-04-07 2:03 ` [Bug tree-optimization/99946] " jiangning.liu at amperecomputing dot com 2021-04-07 7:33 ` rguenth at gcc dot gnu.org 0 siblings, 2 replies; 3+ messages in thread From: jiangning.liu at amperecomputing dot com @ 2021-04-07 2:01 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99946 Bug ID: 99946 Summary: fail to exchange if conditions in terms of likely/unlikely probability Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jiangning.liu at amperecomputing dot com Target Milestone: --- For this simple case, $ cat test_cond.c #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) extern void g(void); int a, b; void f(void) { if (likely(a>0)) if (unlikely(b>0)) g(); } We expect gcc compiler can exchange the if conditions to be like below, if (unlikely(b>0)) if (likely(a>0)) g(); This way, performance can be improved due to saving the comparison for a>0. At the moment, gcc generate code as below, .LFB0: .cfi_startproc movl a(%rip), %edx testl %edx, %edx jle .L1 movl b(%rip), %eax testl %eax, %eax jg .L4 .L1: ret ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug tree-optimization/99946] fail to exchange if conditions in terms of likely/unlikely probability 2021-04-07 2:01 [Bug tree-optimization/99946] New: fail to exchange if conditions in terms of likely/unlikely probability jiangning.liu at amperecomputing dot com @ 2021-04-07 2:03 ` jiangning.liu at amperecomputing dot com 2021-04-07 7:33 ` rguenth at gcc dot gnu.org 1 sibling, 0 replies; 3+ messages in thread From: jiangning.liu at amperecomputing dot com @ 2021-04-07 2:03 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99946 --- Comment #1 from Jiangning Liu <jiangning.liu at amperecomputing dot com> --- Is there any gcc pass that can deal with this simple optimization? ^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug tree-optimization/99946] fail to exchange if conditions in terms of likely/unlikely probability 2021-04-07 2:01 [Bug tree-optimization/99946] New: fail to exchange if conditions in terms of likely/unlikely probability jiangning.liu at amperecomputing dot com 2021-04-07 2:03 ` [Bug tree-optimization/99946] " jiangning.liu at amperecomputing dot com @ 2021-04-07 7:33 ` rguenth at gcc dot gnu.org 1 sibling, 0 replies; 3+ messages in thread From: rguenth at gcc dot gnu.org @ 2021-04-07 7:33 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99946 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Last reconfirmed| |2021-04-07 Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- There's no pass doing all of this. There's ifcombine that could end up turning it into tem = likely(a>0) & unlikely(b>0); if (tem) g (); and then RTL expansion might expand it to branchy code again. But of course __builtin_expect is long gone then and we'll lose the likelyness of the individual tests. Still ifcombine has analysis logic as to "collecting" a complex predicate, what's then missing is to "re-associate" the tests according to probability. Which means implementing it in ifcombine should be feasible. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-04-07 7:33 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-07 2:01 [Bug tree-optimization/99946] New: fail to exchange if conditions in terms of likely/unlikely probability jiangning.liu at amperecomputing dot com 2021-04-07 2:03 ` [Bug tree-optimization/99946] " jiangning.liu at amperecomputing dot com 2021-04-07 7:33 ` rguenth at gcc dot gnu.org
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).