rjmccall added a comment.

In D79744#2035109 <https://reviews.llvm.org/D79744#2035109>, @arsenm wrote:

> In D79744#2030710 <https://reviews.llvm.org/D79744#2030710>, @rjmccall wrote:
>
> > Okay.  So the only real ABI here is the layout of the memory that the 
> > arguments are actually written into?  And that memory needs to be treated 
> > as constant?
>
>
> Yes, the actual kernel ABI is supposed to invisible.
>
> > Unfortunately, I think `byval` just doesn't match what you want because of 
> > the mutability — the frontend *has* to have a copy into a local to get IR 
> > with correct semantics, because `byval` is assumed to be locally mutable by 
> > both IR-generation and (potentially) LLVM optimization.  And I don't think 
> > you really want non-`byval` indirect.  So I guess the question is what we 
> > can do in the frontend to get the optimizer behavior you need.
>
> You are allowed to have readonly on a byval pointer argument, in which case 
> optimizations wouldn't be allowed to write into it. Is just adding readonly 
> parameter attributes sufficient? It would be somewhat contrived, but could 
> also define byval as constant if it's not in the alloca address space.


`byval` is fundamentally about expressing that something is passed on the 
stack.  If you want an indirect readonly noalias argument, you can make one; 
however, to convince IRGen to do it, you really need to think of this as a new 
kind of argument-passing, because "pass the address of an immutable object that 
the callee can't modify" is not something that we normally need to do in 
calling-convention lowering.  That feels like a lot of complexity to solve a 
rather narrow problem.

A completely different approach: OpenMP has to solve some very similar problems 
and just lowers them completely in the frontend; have you considered just doing 
that?  Kernels need a ton of special-case handling anyway, and IIUC you can 
never optimize over the boundary anyway.


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

https://reviews.llvm.org/D79744



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

Reply via email to