On Wed, Apr 21, 2021 at 10:09 AM Martin Sebor <mse...@gmail.com> wrote: > > On 4/14/21 4:39 PM, H.J. Lu wrote: > > commit 87c753ac241f25d222d46ba1ac66ceba89d6a200 > > Author: H.J. Lu <hjl.to...@gmail.com> > > Date: Fri Aug 21 09:42:49 2020 -0700 > > > > x86: Add target("general-regs-only") function attribute > > > > is incomplete since it is impossible to call integer intrinsics from > > a function with general-regs-only target attribute. > > > > 1. Add general_regs_only function attribute to inform the compiler that > > functions use only general purpose registers. When making inlining > > decisions on such functions, non-GPR compiler options are excluded. > > 2. Add general_regs_only attribute to x86 intrinsics which use only > > general purpose registers. > > > ... > > --- a/gcc/doc/extend.texi > > +++ b/gcc/doc/extend.texi > > @@ -7066,6 +7066,11 @@ On x86 targets, the @code{fentry_section} attribute > > sets the name > > of the section to record function entry instrumentation calls in when > > enabled with @option{-pg -mrecord-mcount} > > > > +@item general_regs_only > > +@cindex @code{general_regs_only} function attribute, x86 > > +The @code{general_regs_only} attribute on functions is used to > > +inform the compiler that functions use only general purpose registers. > > I'll just reiterate basically the same comment as before: it's not > clear from the very brief description above what the requirements > are for using the attribute. I'm guessing it can be applied to > any function (inline or otherwise) but only has any effect when > the function is actually inlined and otherwise doesn't constrain > what the function can do. (Whatever the constraints are, I think > the manual should spell them out, and likewise for its effects.)
That is correct. > Similarly it's not clear what should be expected when the function > does use some other register. Ideally, I think GCC would check and > issue a nice error message whether or not the function is inlined > or called. I suspect that might only be possible for inline > functions that are actually called and for which the back end must > emit code. This is what GCC does today: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99744 > Other than that, I'd suggest to improve the phrasing a bit: > > The @code{general_regs_only} function attribute indicates that > the function uses only general purpose registers... [text > explaining constraints and errors follows]. > > Martin How about this @item general_regs_only @cindex @code{general_regs_only} function attribute, x86 The @code{general_regs_only} attribute on functions is used to inform the compiler that functions use only general purpose registers. It can be used together with the @code{always_inline} attribute to avoid inlining failure when there is a mismatch in compiler vector options. Thanks. -- H.J.