[llvm-dev] RFC: Supported Optimizations attribute
John McCall via llvm-dev
llvm-dev at lists.llvm.org
Mon Dec 3 20:52:17 PST 2018
Thank you for pushing this forward.
On 2 Dec 2018, at 12:47, Piotr Padlewski wrote:
> We propose a fine-grained, function-level solution to this problem,
> originally suggested by John McCall: mark each function with a list of
> such
> optimization requirements it complies
compiles
> invariant.group
In this proposal, it seems like you're assuming that only the
invariant.group
metadata needs to be parameterized with a supported_optimization.
Should you
also decorate all the other structures used as part of this
optimization, e.g.
the calls to llvm.strip.invariant.group and
llvm.launder.invariant.group?
This would also allow these intrinsics to be more explicit about exactly
which
family of invariant.group metadata they're supposed to be
laundering/stripping,
and correspondingly it would allow LLVM to remove these intrinsics when
it
strips invariant.group optimization information.
> As a transitional measure and for backwards compatibility reasons, any
> !invariant.group metadata with an empty argument (i.e. as before this
> RFC),
> shall not be subject to the above restrictions and shall remain
> applicable
> even when there is no supported_optimizations list provided for the
> enclosing function.
I don't think it's important to support this transitionally. AFAIK,
there are
no existing, non-experimental optimizations using invariant.group where
it's
crucial that we continue to perform the optimization when linking
existing .bc
files. We should just insist that invariant.group has a tag and
otherwise
strip it during deserialization.
> Possible extensions
>
> Instead of indiscriminately taking the intersection of supported
> optimizations' lists, we may imagine that some of such optimizations
> may be
> able to provide a conservative set of annotations to a function
> lacking
> them. By doing so, we may retain at least some level of information
> available to the optimizer, by preserving the annotations already
> present
> in the optimization-compliant function.
>
> For example, devirtualization may conservatively pass every load and
> function argument through a strip and every store and return value
> through
> a launder, which is a way of conservatively making an arbitrary
> function
> compliant with the requirements of this particular optimization.
Sure, that's a theoretical future enhancement that we could provide.
John.
More information about the llvm-dev
mailing list