Anastasia added inline comments.

================
Comment at: include/clang/Basic/BuiltinsAMDGPU.def:49
+
+// FIXME: Need to disallow constant address space.
 BUILTIN(__builtin_amdgcn_div_scale, "dddbb*", "n")
----------------
arsenm wrote:
> Anastasia wrote:
> > Do you plan to provide the support for it later? Or if else perhaps we 
> > should elaborate more what's to be done.
> I'm not sure. I don't know how to best enforce this
The only way I guess if we list overloads with each address space explicitly 
(apart from `constant`)? Or may be with the use of `generic` AS, although that 
will only work for CL2.0.


================
Comment at: lib/AST/ASTContext.cpp:9093
       unsigned AddrSpace = strtoul(Str, &End, 10);
-      if (End != Str && AddrSpace != 0) {
-        Type = Context.getAddrSpaceQualType(Type,
-                                            getLangASFromTargetAS(AddrSpace));
+      if (End != Str) {
+        // Note AddrSpace == 0 is not the same as an unspecified address space.
----------------
arsenm wrote:
> Anastasia wrote:
> > Could we check against LangAS::Default instead of removing this completely.
> I don't think that really make sense, since that would be leaving this the 
> same. I don't really need it for this patch, but I fundamentally think 
> specifying address space 0 is different from an unspecified address space. 
> According to the description for builtins, if no address space is specified 
> than any address space will be accepted. This is different from a builtin 
> requiring address space 0
I thought `Default` AS was meant to be for the case no AS is specified but I 
guess it doesn't work the same in Builtins specification syntax.


================
Comment at: lib/CodeGen/CGBuiltin.cpp:3500
+        if (auto *PtrTy = dyn_cast<llvm::PointerType>(PTy)) {
+          if (PtrTy->getAddressSpace() !=
+              ArgValue->getType()->getPointerAddressSpace()) {
----------------
arsenm wrote:
> Anastasia wrote:
> > Would this be correct for OpenCL? Should we use  `isAddressSpaceSupersetOf` 
> > helper instead? Would it also sort the issue with constant AS (at least for 
> > OpenCL)? 
> The issue I mentioned for the other builtin is that it modifies the memory, 
> and doesn't have to do with the casting.
> 
> At this point the AddrSpaceCast has to be emitted. The checking if the cast 
> is legal I guess would be in the SemaExpr part. I know at one point I was 
> trying to use isAddressSpaceSupersetOf in rewriteBuiltinFunctionDecl, but 
> there was some problem with that. I think it didn't make sense with the magic 
> where the builtin without an address space is supposed to accept any address 
> space or something along those lines.
Yes, I think Sema has to check it before indeed. I am not sure it works right 
with OpenCL rules though for the Builtin functions.  Would it make sense to add 
a negative test for this then? 


https://reviews.llvm.org/D47154



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

Reply via email to