REPOSITORY
  rL LLVM

================
Comment at: lib/Sema/SemaExpr.cpp:4393
@@ +4392,3 @@
+
+        Expr *PtrArg = DefaultFunctionArrayLvalueConversion(Arg).get();
+        QualType PtrTy = PtrArg->getType();
----------------
Anastasia wrote:
> tstellarAMD wrote:
> > Anastasia wrote:
> > > Not sure if this cast might create a problem in some OpenCL-GPU 
> > > architectures, because spec generally disallows conversion between 
> > > constant and any other address spaces (see OpenCL C v2.0 s6.5.5). 
> > > 
> > > I feel like a better way to handle this would be to create separate 
> > > builtins overloads for constant and generic address space in OpenCL v2.0 
> > > and for all address spaces in OpenCL <v2.0. But this seems more work to 
> > > me.
> > I'm not sure about the cast issue.  I do see that for memcpy addrspacecast 
> > IR instructions are emitted.
> > 
> > I'm open to adding separate overloads, I just wanted to try a generic 
> > solution first.
> Could you please look into this. The solution doesn't seem generic to me, 
> because in OpenCL conversions from constant to other address spaces are not 
> allowed. Which means this would most likely be a problem to handle correctly 
> on the later compiler steps. In Clang however, we can avoid this issue by 
> creating different overloads for such builtins and calling directly the right 
> overload instead of having one overload and adding conversions to match it. 
not sure how to align this with C, but for OpenCL code we would need something 
like:

 if address space of ptr not given, create multiple signatures of the 
corresponding builtin.

For example for this builtin:

BUILTIN(builtin_test, "vcC*" , "nc"), Clang would have to add the following to 
the list of known declarations in CL2.0:

void builtin_test(generic const char* ptr);
void builtin_test(constant const char* ptr);

and for all earlier OpenCL versions:

void builtin_test(local const char* ptr);
void builtin_test(global const char* ptr);
void builtin_test(private const char* ptr);
void builtin_test(constant const char* ptr);

However, your fix might be acceptable for C.

http://reviews.llvm.org/D8082

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to