This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/66584] New: gcc differs in static, branch-prediction cost from icc in switch.
- From: "jmcguiness at liquidcapital dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 18 Jun 2015 10:16:27 +0000
- Subject: [Bug c++/66584] New: gcc differs in static, branch-prediction cost from icc in switch.
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66584
Bug ID: 66584
Summary: gcc differs in static, branch-prediction cost from icc
in switch.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jmcguiness at liquidcapital dot com
Target Milestone: ---
This means that code optimised for icc is sub-optimal for icc and the reverse
is true. I feel that this feature should be more clearly documented in the web
pages & man pages.
For the following code:
extern void bar1();
extern void bar2();
extern void bar3();
void foo(int i) {
switch(i) {
case 1:
bar1(); // gcc: least likely | icc: most likely
break;
case 2:
bar2(); // gcc: less likely | icc: less likely
break;
default:
bar3(); // gcc: most likely | icc: least likely
}
}
gcc v4.8.2 & v5.10 for -O2 & -O3 produce:
foo(int):
cmpl $1, %edi
je .L3
cmpl $2, %edi
jne .L8
jmp bar2()
.L8:
jmp bar3()
.L3:
jmp bar1()
>From which the static probabilities are quoted, above.
Conversely icc produces:
foo(int):
cmpl $1, %edi #9.10
jne ..B1.3 # Prob 67% #9.10
jmp bar1() #11.2
..B1.3: # Preds ..B1.1
cmpl $2, %edi #9.10
jne ..B1.5 # Prob 50% #9.10
jmp bar2() #14.5
..B1.5: # Preds ..B1.3
jmp bar3() #17.5
>From which the static probabilities are quoted, above.
Please not: I feel this is *only* a bug in the documentation!
It would be nice if my optimised (for speed) code would be optimised (for
speed) on both platforms in the same way, so that I wouldn't have to optimise
my code, but that is only my taste.