hfinkel added inline comments.

================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:890
+  "cannot apply to inline functions, ignoring pragma">,
+   InGroup<IgnoredPragmas>;
 
----------------
sepavloff wrote:
> hfinkel wrote:
> > sepavloff wrote:
> > > hfinkel wrote:
> > > > andrew.w.kaylor wrote:
> > > > > rjmccall wrote:
> > > > > > What's the purpose of this restriction?  Whether `inline` really 
> > > > > > has much to do with inlining depends a lot on the exact language 
> > > > > > settings.  (Also, even if this restriction were okay, the 
> > > > > > diagnostic is quite bad given that there are three separate 
> > > > > > conditions that can lead to it firing.)
> > > > > > 
> > > > > > Also, I thought we were adding instruction-level annotations for 
> > > > > > this kind of thing to LLVM IR.  Was that not in service of 
> > > > > > implementing this pragma?
> > > > > > 
> > > > > > I'm not categorically opposed to taking patches that only partially 
> > > > > > implement a feature, but I do want to feel confident that there's a 
> > > > > > reasonable technical path forward to the full implementation.  In 
> > > > > > this case, it feels like the function-level attribute is a dead end 
> > > > > > technically.
> > > > > I'm guessing this is intended to avoid the optimization problems that 
> > > > > would occur (currently) if a function with strictfp were inlined into 
> > > > > a function without it. I'm just guessing though, so correct me if I'm 
> > > > > wrong.
> > > > > 
> > > > > As I've said elsewhere, I hope this is a temporary problem. It is a 
> > > > > real problem though (as is the fact that the inliner isn't currently 
> > > > > handling this case correctly).
> > > > > 
> > > > > What would you think of a new command line option that caused us to 
> > > > > mark functions with strictfp as noinline? We'd still need an error 
> > > > > somewhat like this, but I feel like that would be more likely to 
> > > > > accomplish what we want on a broad scale.
> > > > We would not want to prevent all inlining, just inlining where the 
> > > > attributes don't match. We should fix his first. I think we just need 
> > > > to add a CompatRule to include/llvm/IR/Attributes.td (or something like 
> > > > that).
> > > As Andrew already said, `noinline` attribute is a mean to limit negative 
> > > performance impact. Of course, to inline or not to inline - such decision 
> > > is made by backend. However it a user requested a function to be inline, 
> > > a warning looks useful.
> > > 
> > > When constrained intrinsics get full support in optimizations, this 
> > > restriction will become unnecessary.
> > > 
> > > Outlining is one of the ways that converts this solution into full pragma 
> > > implementation. Another is implementation of constrained intrinsics 
> > > support in optimization transformations.
> > > 
> > > As for a new command line option that caused us to mark functions with 
> > > strictfp as noinline, it loos a good idea, but we must adapt inliner 
> > > first, so that it can convert ordinary floating operations to constrained 
> > > intrinsics during inlining.
> > > 
> > > In the case of `#pragma STDC FENV_ACCESS` we cannot in general say if 
> > > attributes are compatible so a function can be inlined into another. The 
> > > pragma only says that user modified floating point environment. One 
> > > function may set only rounding mode and another use different exception 
> > > handling, in this case we cannot do inlining. More fine grained pragmas, 
> > > like that proposed in https://reviews.llvm.org/D65997 could enable more 
> > > flexible inlining.
> > > Of course, to inline or not to inline - such decision is made by backend. 
> > > However it a user requested a function to be inline, a warning looks 
> > > useful.
> > 
> > We need to be careful. inline is not just an optimizaiton hint. It also 
> > affects function linkage. Also, when inlining into functions with similar 
> > constraints, there's no problem with the inlining.
> > 
> > > One function may set only rounding mode and another use different 
> > > exception handling, in this case we cannot do inlining.
> > 
> > Can you please explain this? It does not seem like that should block 
> > inlining when both the caller and callee are marked as fenv_access-enabled.
> > We need to be careful. inline is not just an optimizaiton hint. It also 
> > affects function linkage. Also, when inlining into functions with similar 
> > constraints, there's no problem with the inlining.
> This is an argument in favor of the warning on conflicting attributes.
> 
> >> One function may set only rounding mode and another use different 
> >> exception handling, in this case we cannot do inlining.
> >Can you please explain this? It does not seem like that should block 
> >inlining when both the caller and callee are marked as fenv_access-enabled. 
> 
> I was wrong. If a function correctly restores FP state, it can be inlined 
> into another fenv_access-enabled function.
> This is an argument in favor of the warning on conflicting attributes.

No, because they're not conflicting (as you note, we can still inline), and 
because the a function might need inline linkage even if the user doesn't care 
about actual function inlining (this is an unfortunate side effect of the C/C++ 
specifications providing one keyword for both an optimization hint and a 
linkage modifier).



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69272/new/

https://reviews.llvm.org/D69272



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to