On Sun, Dec 14, 2025 at 3:33 PM Martin Uecker via Gcc <[email protected]> wrote:
>
> Am Sonntag, dem 14.12.2025 um 15:10 +0100 schrieb Andreas Schwab:
> > On Dez 14 2025, Martin Uecker via Gcc wrote:
> >
> > > One could use templates in C++ or macros, but then this is
> > > rather heavy weight and also rigid as one has to structure the
> > > code around it.   I am rather looking for some lightweight
> > > solution such as annotation I could put on the argument or variable
> > > that says: If this is value is known to be a compile-time
> > > constant, please create a specialized code path when optimizing.
> > > (maybe with some limit on recursion), maybe only for specified
> > > parameter ranges.
> > >
> > > Or are there other better ways to do this already?
> >
> > Is __builtin_constant_p what you are looking for?
>
> Not really.  I know I can use it in some inline wrapper to
> add my own compile-time specialization, but I want the compiler
> to create the specialized code for me without having to duplicate
> it the source.  It can specialize code already just fine if it
> likes to do so, but there seems to be no good  way to
> enforce this.

It only specializes at calls with constant arguments.  And it will not
replace calls to with non-constant arguments with if (val == constant)
specialization(); else regular();
either.  IIRC at some point we've talked about collecting
"interesting" constants and directing
all calls to a dispatcher.  There might be a PR about this.

So, do you actually want to have the unspecialized function replaced by
a dispatcher that has a few values specialized?

Richard.

>
> Martin

Reply via email to