hliao added a comment.

Basically, I think that should be a generic issue. As argument coercing doesn't 
handle pointer previously, we need to that address pointer-specific issue. That 
is, if the original argument has qualifiers being able to map onto LLVM 
attributes, the coerced argument should be those qualifiers as well if the new 
coerced one is still a simple value as the original one. We may lose more 
useful attributes not limited to `noalias`.



================
Comment at: clang/lib/CodeGen/CGCall.cpp:2556-2563
+      // Restrict qualified HIP pointers that were coerced to global pointers
+      // can be marked with the noalias attribute.
+      if (isCoercedHIPGlobalPointer(*this, getLangOpts(), ArgI, Ty) &&
+          Arg->getType().isRestrictQualified()) {
+        auto AI = cast<llvm::Argument>(FnArgs[FirstIRArg]);
+        AI->addAttr(llvm::Attribute::NoAlias);
+      }
----------------
I don't think we need to check pointer address and/or HIP specific. As the 
generic argument processing, if the original type has any qualifiers, the 
coerced type (if it has a single value as the original parameter) should have 
those qualifiers as well. Here, we not only miss `restrict` but also alignment, 
`nonnull`, and etc. It should be fixed as a generic case instead of a target- 
or language-specific one.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79213



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

Reply via email to