-
Notifications
You must be signed in to change notification settings - Fork 755
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SYCL] Annotate virtual calls in device IR #14051
[SYCL] Annotate virtual calls in device IR #14051
Conversation
This commit is a part of virtual functions extension implementation that is proposed in intel#10540. As part of the feature, we would like to achieve both: - allow virtual function calls from SYCL kernels that are submitted with the right properties as described in the language extension specification - disallow virtual function calls from SYCL kernels that do not use any (or the right) properties to conform with the core SYCL 2020 specification Implementing such diagnostics will require call graph traversal to understand the origin of the call and that is not what's easy to do in FE. Therefore, the implementation design for virtual functions proposes that such diagnostic is offloaded to a pass. This commit is a preparations for it: it introduces an attribute to all virtual function calls in device code so they can be easily detected and not confused with plain function pointer calls (for which we don't have a language specification and therefore well-defined behavior yet).
…tate-virtual-calls-in-device-code
The only failed test is:
And it is unrelated to this PR, it was addressed in #14051. @intel/dpcpp-cfe-reviewers, could you please take a look? |
…tate-virtual-calls-in-device-code
Tagging @gmlueck here explicitly to review the added test case to check if our virtual calls detection is good enough in context of KhronosGroup/SYCL-Docs#565 and potential SYCL spec changes. |
…tate-virtual-calls-in-device-code
The test cases look good. I agree that the two cases labeled "Strictly speaking, this is a virtual function call, but clang emits it as a direct call" are a little weird, but it seems like both clang and gcc emit these as direct calls. Therefore, I think it is OK if we treat this as a direct call for diagnostic purposes. |
This commit is a part of virtual functions extension implementation that is proposed in #10540.
As part of the feature, we would like to achieve both:
Implementing such diagnostics will require call graph traversal to understand the origin of the call and that is not what's easy to do in FE. Therefore, the implementation design for virtual functions proposes that such diagnostic is offloaded to a pass. The draft of the analysis pass implementation can be seen in #14141
This commit is a preparations for it: it introduces an attribute to all virtual function calls in device code so they can be easily detected and not confused with plain function pointer calls (for which we don't have a language specification and therefore well-defined behavior yet).
Note that the new approach will relax virtual function call diagnostics, because it will allow non-virtual calls to virtual functions to be performed from kernels. This is in line with discussion in KhronosGroup/SYCL-Docs#565 about relaxing current SYCL 2020 restrictions about virtual functions.