Re: Unimpressed with pg_attribute_always_inline
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>,
Andres Freund <andres@anarazel.de>,
Thomas Munro <thomas.munro@enterprisedb.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-01-09T01:20:09Z
Lists: pgsql-hackers
Peter Geoghegan <pg@bowt.ie> writes: > On Mon, Jan 8, 2018 at 5:09 PM, Peter Eisentraut > <peter.eisentraut@2ndquadrant.com> wrote: >> However, at <https://gcc.gnu.org/onlinedocs/gcc/Inline.html> it says, >> "GCC does not inline any functions when not optimizing unless you >> specify the ‘always_inline’ attribute for the function". So, >> apparently, if the goal is to turn off inlining when not optimizing, >> then we should just use the normal inline attribute. > The compiler isn't obligated to inline anything with the normal inline > attribute. The whole point of always_inline is that the programmer may > know better than the compiler about inlining in some specific cases, > and may therefore want to make inlining absolutely mandatory. IIUC, > that's almost what we want, except that it also inlines with -O0, > which we do not want. > Have I missed the point here? No, you have it right. I checked locally and confirmed Andres' assertion that by default, gcc (my version anyway) is not persuaded to inline ExecHashJoinImpl simply by "inline", but "always_inline" persuades it. Maybe at some level higher than -O2, or with some other weird flag, it would do what we want; but we probably don't want to mess with global compiler flags for this. regards, tom lane
Commits
-
Improve implementation of pg_attribute_always_inline.
- 434e6e148441 11.0 landed
-
Add pg_attribute_always_inline.
- dbb3d6f0102e 11.0 cited