yaxunl added inline comments.

================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:9381
+      M.getTarget().getTargetOpts().CodeObjectVersion != 500) {
+    F->addFnAttr("amdgpu-no-hostcall-ptr");
+  }
----------------
scott.linder wrote:
> arsenm wrote:
> > sameerds wrote:
> > > The frontend does not need to worry about this attribute. See the comment 
> > > in the MetadataStreamer. A worthwhile check would be to generate an error 
> > > if we are able to detect that some hostcall service is being used in 
> > > OpenCL on code-object-v4 or lower. None exists right now, but we should 
> > > add the check if such services show up. But those checks are likely to be 
> > > in a different place. For example, enabling asan on OpenCL for 
> > > code-object-v4 should result in an error in the place where asan 
> > > commandline options are parsed.
> > Should be all opencl, not just kernels. Also < instead of !=?
> > The frontend does not need to worry about this attribute. See the comment 
> > in the MetadataStreamer. 
> 
> The reason I went this route is that otherwise the MetadataStreamer can only 
> go off of the presence of the OCL printf metadata to infer that hostcall 
> argument metadata is invalid and will be ignored by the runtime. Ideally, the 
> MetadataStreamer or Verifier or something would actually //require// that a 
> module does not have both OCL printf metadata and functions which are not 
> "amdgpu-no-hostcall-ptr", but I didn't go that far as it would break old 
> IR/bitcode that relies on the implicit behavior.
> 
> I'm OK with removing this code, and the rest of the patch remains essentially 
> unchanged. We will still have an implicit rule based on code-object-version 
> and presence of printf metadata, and at least conceptually you will still be 
> able to compile OCL for pre-V5 and end up with hostcall argument metadata. 
> That case is benign if the runtime just ignores it, but it still seems 
> needlessly relaxed when we can just add the correct attribute in Clang 
> codegen.
> 
> > Should be all opencl, not just kernels. Also < instead of !=?
> 
> Yes, my mistake, I'll update this
+1 for using < instead of !=

However,  device library is written in OpenCL language. There are functions 
using hostcall buffer. We cannot mark all OpenCL functions with this attribute.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D121951

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

Reply via email to