Re: partition function into cold and hot function by using __builtin_expect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The "split one function to two” was handle by gcc "-freorder-blocks-and-partition”
I don’t know this phase really handle __builtin_expect and [[unlikely]] ?

We can ensure from the gcc source code :)

> 2021年5月7日 上午4:49,Xi Ruoyao <xry111@xxxxxxxxxxxxxxxx> 写道:
> 
> On Fri, 2021-05-07 at 00:12 +0800, 陈云星 via Gcc-help wrote:
>> In my test : https://godbolt.org/z/87dWMejPP < 
>> https://godbolt.org/z/87dWMejPP>
>> 
>> It seems [[likely]] and [[unlikely]] just have same effective like
>> __builtin_expect;
>> 
>> Will not split function into cold function and hot function ( which
>> __attribute__((cold)) on callee function can do so).
> 
> In your test case, if the compiler split out a function for unlikely
> branch, there will be no performance gain at all.  If the compiler just
> transform it into two separate functions blindly, the behavior will be a
> bug.
> 
> A famous quote:
> 
>> All optimizations are transformations, but not all transformations are
>> optimizations.
> 
> Segher replied that GCC is already optimizing on this.  You can run
> objdump -t on some "real-life" binaries (they are large enough so the
> optimization will really make some difference, for example
> /lib/libc.so.6) and find some functions with name "xxxx.cold", which is
> the "cold" function seperated from the normal one.
> -- 
> Xi Ruoyao <xry111@xxxxxxxxxxxxxxxx>
> School of Aerospace Science and Technology, Xidian University
> 





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux