Messages in this thread |  | | Date | Mon, 2 May 2022 09:46:33 +0200 | From | Peter Zijlstra <> | Subject | Re: [RFC PATCH 14/21] treewide: static_call: Pass call arguments to the macro |
| |
On Fri, Apr 29, 2022 at 05:49:21PM -0700, Sami Tolvanen wrote: > On Fri, Apr 29, 2022 at 4:21 PM Peter Zijlstra <peterz@infradead.org> wrote: > > Can you explain why this is needed? I don't think there are any indirect > > calls to get confused about. That is, if you have STATIC_CALL_INLINE > > then the compiler should be emitting direct calls to the trampoline. > > Clang emits an indirect call for ({ &f; })(), which is optimized into > a direct call when possible. Come to think of it, the recent > InstCombine change to the compiler patch should solve this issue. Let > me double check, I'd be more than happy to drop these two patches.
Oooh, but this must not require any magic. That is, we have a *ton* of code that relies on constant propagation of function pointers to not emit indirect calls.
Please make sure that 'just-works'.
Look at all the __always_inline functions in rbtree*.h for instance, some like latch and augment rely on quite complicated const propagation for the actual function pointer is in a const struct.
I've verified all that actually generates direct calls when we did that code (on GCC, clang wasn't really a thing back then).
|  |