sepavloff marked an inline comment as done. sepavloff added inline comments.
================ Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:890 + "cannot apply to inline functions, ignoring pragma">, + InGroup<IgnoredPragmas>; ---------------- 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. 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