dpdk already does too much inling. need multiple performance benchmark before accepting
On Sun, Nov 1, 2026, 09:04 Sun Yuechi <[email protected]> wrote: > Add __rte_flatten, which inlines every call a function makes into it, > where the callee's body is available. > > __rte_always_inline marks the callee and inlines it at every call site. > Here the requirement is local to one caller, and the callees are shared > with paths that do not want inlining. Flatten applies at the boundary > that needs it. > > A spill slot has a fixed offset on a fixed-width vector ISA. With RVV > its size depends on VLEN and is known only at run time, and once the > frame holds such a slot the rest of it is addressed through vlenb. > Inlining such calls is then worth the code growth. > > Signed-off-by: Sun Yuechi <[email protected]> > --- > lib/eal/include/rte_common.h | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h > index fed373f412..e32b6b13d6 100644 > --- a/lib/eal/include/rte_common.h > +++ b/lib/eal/include/rte_common.h > @@ -547,6 +547,19 @@ static void > __attribute__((destructor(RTE_PRIO(prio)), used)) func(void) > #define __rte_noinline __attribute__((noinline)) > #endif > > +/** > + * Inline every call made by a function into it, where the callee's body > + * is available, whatever the callee's own inline annotation. > + * > + * Useful where a call inside a hot loop is costly in itself, > + * for example where values are held in registers that no call preserves. > + */ > +#ifdef RTE_TOOLCHAIN_MSVC > +#define __rte_flatten > +#else > +#define __rte_flatten __attribute__((flatten)) > +#endif > + > /** > * Hint function in the hot path > * > -- > 2.56.0 > >

