[PATCH] D89909: [SYCL] Implement SYCL address space attributes handling

Andrew Savonichev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 13 07:20:50 PST 2020


asavonic added inline comments.


================
Comment at: clang/lib/CodeGen/CGExpr.cpp:4554
+
+      // Language rules define if it is legal to cast from one address space
+      // to another, and which address space we should use as a "common
----------------
bader wrote:
> asavonic wrote:
> > sdmitriev wrote:
> > > bader wrote:
> > > > Anastasia wrote:
> > > > > What language rules?
> > > > I suppose it's a generic note and author didn't meant some particular language here. This change was contributed by @sdmitriev. 
> > > > @sdmitriev, could you clarify, please?
> > > This comment was originally added by @asavonic to clang/lib/CodeGen/CGExprScalar.cpp (lines 2962-2965 in this patch), and later I reused his code along with the comment in this file while fixing a very similar issue. So, I guess it would be more correct to ask Andrew to clarify. @asavonic, can you please comment on this?
> > > This comment was originally added by @asavonic to clang/lib/CodeGen/CGExprScalar.cpp (lines 2962-2965 in this patch), and later I reused his code along with the comment in this file while fixing a very similar issue.
> > 
> > There is `if (Opts.SYCLIsDevice)` In CGExprScalar.cpp, so we handle SYCL language rules.
> > In SYCL, (almost) all pointers have default address space in AST, but in CG some pointers become private/local/global, and some are lowered as generic pointers. We need to add an implicit addrspacecast in CG to emit an expression that expects the same type for its operands.
> > 
> > For example:
> >     const char *str = ... ;
> >     const char *phi_str = i > 2 ? str : "hello world!";
> > 
> > In AST types of `str` and `"hello world"` are the same (`const char *`). In CG we emit `str` as `i8 addrspace(4)*` and `"hello world"` as `i8*`. At this point we have to decide what type `phi_str` should have, and addrspacecast the operands accordingly.
> Is it possible to avoid fixing address space mismatch at this point by adjusting AST as suggested by John in this comment: https://reviews.llvm.org/D89909#inline-837495?
> 
> I wonder if it can be done w/o impacting C++ template metaprogramming as noted in this thread: http://clang-developers.42468.n3.nabble.com/RFC-Re-use-OpenCL-address-space-attributes-for-SYCL-td4068754.html.
> Is it possible to avoid fixing address space mismatch at this point by adjusting AST

Some address space mismatches are present in CG already, see CodeGenModule::getStringLiteralAddressSpace and CodeGenModule::GetGlobalVarAddressSpace. This should be moved to AST (or replaced) as well, right?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D89909



More information about the cfe-commits mailing list