Branch taken rate of Linux kernel compiled with GCC 4.9
Pengfei Yuan
0xcoolypf@gmail.com
Tue Jan 13 14:22:00 GMT 2015
Thank you for the explanation!
I tried the following simple code:
int test(int k)
{
int x = 0;
for (int i = 0; i < k; ++i)
x += i;
return x;
}
It was compiled (-O2) to something like:
int test(int k)
{
if (k == 0) goto ret0;
int x = 0;
int i = 0;
loop:
x += i;
i += 1;
if (i != k) goto loop;
return x;
ret0:
return 0;
}
Now I figure out why it doesn't make sense to reverse the branch
(without profile feedback).
2015-01-13 20:44 GMT+08:00 Alexander Monakov <amonakov@ispras.ru>:
> Your measurement includes the conditional branches at the end of loop bodies.
> When loops iterate, those branches are taken, and it doesn't make sense to
> reverse them.
>
> HTH
> Alexander
More information about the Gcc
mailing list