This is good idea. Some times ago I played with "hot" attribute, and didn't get any improvement, but we really may get something with "cold".
Thanks. Dmitry. On Mon, Aug 17, 2015 at 1:26 PM, Matt Wilmas <php_li...@realplain.com> wrote: > Hi Dmitry, all, > > Has it been considered to use __attribute__((cold)) on, for example, > error-type functions? I happened to notice this part about it in the GCC > docs [1] a couple days ago: "The paths leading to calls of cold functions > within code are marked as unlikely by the branch prediction mechanism." > > A while ago I figured that, technically, many if () conditions for errors > could use UNEXPECTED(), but that would be overkill for each possible tiny > advantage. But that sort of happens automatically for conditions leading > to "cold" functions! :^) > > I was thinking of widely-used functions like php_error_docref*, zend_error > (and related); also noticed exception/throwing functions, or even > zend_accel_error in opcache. > > I didn't do any profiling, just simply tried marking *only* > php_error_docref0 cold. With GCC 4.8, it reduced the size by almost 4 KB > (-O2, --disable-all CLI). And checking through the code, it did indeed > move the calls around (e.g. out of fast path) in many cases compared to > default (some cases didn't optimize more). > > Looks like more zend_error calls in VM that aren't already part of > UNEXPECTED() conditions could be moved "out of the way" if marked cold... > > [1] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html > > Thoughts? > > > Thanks, > Matt >