https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94146
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> (In reply to Jakub Jelinek from comment #3)
> > If not already marked clearly as an ICF created thunk, I'd say it should be
> > and then inliner should take it into account (and only inline if the
> > function became very small or not at all).
>
> It looks like ICF really creates a forwarding call:
>
> ternary2 (int i)
> {
> int retval.4;
>
> <bb 2> [local count: 1073741824]:
> retval.4_3 = ternary (i_2(D)); [tail call]
> return retval.4_3;
>
> }
>
> so IMHO for small functions the inlining is good (but why don't we create
> an alias or an alternate entry symbol instead of a full (aligned) function?)
ICF has I think 3 options, one is adjust all callers if they can be adjusted,
another one is to use alias and another one to use a thunk. Whether to use an
alias or thunk depends on whether something might perform function address
comparisons.