[PATCH] D60455: [SYCL] Implement SYCL device code outlining
Anastasia Stulova via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 30 10:53:52 PDT 2019
Anastasia added inline comments.
================
Comment at: clang/include/clang/Basic/Attr.td:1017
+ let LangOpts = [SYCL];
+ let Documentation = [Undocumented];
+}
----------------
Undocumented -> SYCLKernelDocs
================
Comment at: clang/include/clang/Basic/AttrDocs.td:269
+
+ using namespace cl::sycl;
+ queue Q;
----------------
The example doesn't demonstrate the use of the attribute.
It explains how it is used by the toolchain only!
May be @aaron.ballman can help here as I am not sure what the format should be.
================
Comment at: clang/lib/Parse/ParseAST.cpp:171
+ if (S.getLangOpts().SYCLIsDevice) {
+ for (Decl *D : S.SyclDeviceFuncs()) {
----------------
Do you also need to prevent generation of non-device functions somehow?
================
Comment at: clang/lib/Sema/SemaSYCL.cpp:23
+
+ bool VisitCallExpr(CallExpr *e) {
+ if (FunctionDecl *Callee = e->getDirectCallee()) {
----------------
Anastasia wrote:
> bader wrote:
> > Anastasia wrote:
> > > This is probably not something we can change at this point but I wish we could avoid complexities like this. :(
> > >
> > > I think this is also preventing traditional linking of translation units. That is somewhat unfortunate.
> > >
> > > It is good direction however to keep this logic in a separate dedicated compilation unit.
> > >
> > > I would suggest to document it a bit more including any current limitations/assumption that you can mark under FIXME i.e. does your code handle lambdas yet, what if lambdas are used in function parameters, etc...
> > > I think this is also preventing traditional linking of translation units.
> >
> > Could you elaborate more on this topic, please?
> > What do you mean by "traditional linking of translation units" and what exactly "is preventing" it?
> > Do you compare with the linking of regular C++ code (i.e. which do not split into host and device code)?
> > If so, SYCL is different from this model and more similar to CUDA/OpenMP models, which also skip "linking" of irrelevant part (e.g. host code is not linked by the device compiler).
> > Mariya added Justin (@jlebar) and Alexey (@ABataev), who work on single-source programming models to make them aware and provide feedback if any.
> Yes indeed, I mean linking of modules in C/C++ even though it doesn't necessarily mean linking of object files. So you don't plan to support `SYCL_EXTERNAL` in clang?
>
> In CUDA the functions executed on device are annotated manually using `__device__` hence separate translation units can specify external device function... although I don't know if CUDA implementation in clang support this.
>
> I guess OpenMP is allowed to fall back to run on host?
Ping!
> I would suggest to document it a bit more including any current limitations/assumption that you can mark under FIXME i.e. does your code handle lambdas yet, what if lambdas are used in function parameters, etc...
================
Comment at: clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5520
DefinitionRequired, true);
- if (CurFD->isDefined())
+ if (CurFD->isDefined()) {
+ // Because all SYCL kernel functions are template functions - they
----------------
May be this should go into a helper function as it seems to be now a bigger chunk of code that is repeated?
Although, I am not very familiar with this code. You can try to get someone to review who has contributed to this more recently.
================
Comment at: clang/test/CodeGenSYCL/device-functions.cpp:24
+}
+// CHECK: define spir_func void @{{.*}}foo
+// CHECK: define linkonce_odr spir_func i32 @{{.*}}bar
----------------
I can't see where the SPIR calling convention is currently set for SYCL?
================
Comment at: clang/test/SemaSYCL/device-attributes-on-non-sycl.cpp:3
+// Now pretend that we're compiling regular C++ file without SYCL mode enabled.
+// There should be warnings.
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -x c++ %s
----------------
I don't think this comment is necessary.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60455/new/
https://reviews.llvm.org/D60455
More information about the cfe-commits
mailing list