rjmccall added a comment.

In D81311#2077944 <https://reviews.llvm.org/D81311#2077944>, @arsenm wrote:

> In D81311#2077868 <https://reviews.llvm.org/D81311#2077868>, @rjmccall wrote:
>
> > Most of the generalized optimization properties of this attribute seem to 
> > be redundant with existing attributes.  What are the properties you're 
> > trying to convey exactly?  The argument is a pointer to memory of a certain 
> > size and alignment, and that memory is known to be exclusive to this call 
> > and also constant?
>
>
> It's really just the in memory size and alignment. In this case, constantness 
> is implicit since I'll use a constant address space for the pointer (and 
> probably mark the parameter with readonly for good measure)


In principle, `readonly` has the same issues that lead to this attribute being 
necessary: it's not really a semantic contract, it's something that can be 
placed on the argument by IR.  But it's probably to separate that.

>> I don't think in practice those other attributes would ever not be preserved 
>> through IR passes, especially for kernels.  I guess they could be introduced 
>> by other analyses, and you wouldn't want this property to be confused with 
>> that?  Still, maybe it would be less redundant to just have this attribute 
>> require the existence of those other attributes (particularly 
>> `dereferenceable` and `align`) rather than providing its own structure.
> 
> I believe byval implies dereferencable already, and I was just trying to be 
> more explicit than what the others state. The alignment behavior also matches 
> what the other attributes already do. I expect in practice to always emit an 
> align attribute

It's generally best to insist on strong rules up front and then weaken them if 
there's really a use case.  There's no good reason not to carry an alignment.

>> Do you actually need any of the structure of the type beyond a size and 
>> alignment?
> 
> Not really. I just need to distinguish whether you are are using 
> sizeof(struct Foo) or a pointer sized slot in the argument buffer

Okay.  I think just carrying numbers is probably less representationally 
problematic.

My thinking here is that we can make this attribute something that we'd just 
add by default to all indirect arguments, and then the only special case 
behavior you need for kernels is that (1) there's a stable size and alignment 
that you can extract into the kernel-invocation system, which is probably not 
otherwise useful to IR beyond the existing attributes, and (2) the frontend 
needs to copy from the argument to form the mutable parameter variable.


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

https://reviews.llvm.org/D81311



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

Reply via email to