ABataev added a comment.

In D71241#1782742 <https://reviews.llvm.org/D71241#1782742>, @hfinkel wrote:

> In D71241#1782703 <https://reviews.llvm.org/D71241#1782703>, @ABataev wrote:
>
> >
>
>
> ...
>
> >>>>>> 
> >>>>>> 
> >>>>>>> Given we have two implementations, each at different points in the 
> >>>>>>> pipeline, it might be constructive to each write down why you each 
> >>>>>>> choose said point. I suspect the rationale is hidden by the 
> >>>>>>> implementation details.
> >>>>> 
> >>>>> Actually, early resolution will break tbe tools, not help them. It will 
> >>>>> definitely break clangd, for example. The user will try to navigate to 
> >>>>> originally called function `base` and instead he will be redirected to 
> >>>>> the function `hst`.
> >>>> 
> >>>> Can you please be more specific? Please explain why the user would 
> >>>> consider this incorrect behavior. If the point of the tool is to allow 
> >>>> the user to navigate to the function actually being called, then 
> >>>> navigating to `base` seems incorrect if that's not the function being 
> >>>> called. This is just like any other kind of overload resolution - the 
> >>>> user likely wants to navigate to the function being called.
> >>>> 
> >>>> Now the user might want an OpenMP-aware tool that understands 
> >>>> differences between host and accelerator behavior, how that affects 
> >>>> which functions are called, etc. The user might want this for 
> >>>> host/device overloads in CUDA too, but this is really an orthogonal 
> >>>> concern.
> >>> 
> >>> You wrote the code. You called a function in the expression. Now you want 
> >>> to navivate to this function. Clicked on it and instead of the called 
> >>> `base` you are redirected to `hst` because AST has the link to `hst` 
> >>> functiin inthe expression instead of the `base`.
> >> 
> >> Sure, but it has that link because that `hst` function is actually the 
> >> function being called (assuming that the clangd-using-tool is configured 
> >> to interpret the code as if compiling for the host). When I click on a 
> >> function call in a source file, I want to navigate to the function 
> >> actually being called. I certainly understand that the function being 
> >> called now depends on compilation context, and the tool in our example is 
> >> only providing the resolution in one context, but at least it provides one 
> >> valid answer. An OpenMP-aware tool could navigate to the base function (we 
> >> do need to preserve information to make this possible). This is just like 
> >> dealing with some host/device functions in CUDA (where there are separate 
> >> overloads) - if you click on the function in such a tool you'll probably 
> >> navigate to the host variant of the function (even if, in some other 
> >> context, the device overload might be called).
> >> 
> >> Again, I see this as exactly analogous to overload resolution, or as 
> >> another example, when calling a function template with specializations. 
> >> When using such a tool, my experience is that users want to click on the 
> >> function and navigate to the function actually being called. If, for 
> >> example, I have a function template with specializations, if the 
> >> specialized one is being called, I should navigate to the specialization 
> >> being called (not the base function template).
> > 
> > You wrote wrong context matcher. You has a bug in the base function, which 
> > should be called by default everu sw here but the host, and want to fix it. 
> > Etc.
>
> I understand, but this is a generic problem. Same with host/device overloads 
> in CUDA. Your tool only gets one compilation context, and thus only one 
> callee. In addition, FWIW, having a base version called everywhere except on 
> the host seems like an uncommon use case. Normally, the base version *is* the 
> version called on the host. The named variants are likely the ones 
> specialized for various accelerators.
>
> Regardless, this is exactly why we should do this in Sema. We can represent 
> links to both Decls in the AST (as I indicated in an earlier comment), and 
> then it will be *possible* for an OpenMP-aware tool to decide on which it 
> wants. Right now, it's not easily possible to write a tool that can use an 
> appropriate set of contexts to examine the AST where the actual callees are 
> represented.


No need to worry for the right decl. See D7097 
<https://reviews.llvm.org/D7097>. If you see a refernce for function, before 
doing something with it, just call member function 
`getOpenMPDeclareVariantFunction()` and you get the function that must be 
actually called here. The tool must do the same. That's hiw the tools work. 
They must be aware of special costructs/attributes.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71241



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

Reply via email to