yaxunl added a comment.

In D155850#4523051 <https://reviews.llvm.org/D155850#4523051>, @AlexVlx wrote:

> @yaxunl interesting point - are you worried about cases where due to missing 
> inlining / const prop an indirect call site that can be replaced with a 
> direct one would remain indirect? I think the problem in that case would 
> actually be different, in that possibly reachable functions would not be 
> identified as such and would be erroneously removed. I'm not sure there's any 
> case where we'd fail to remove a meant to be unreachable function. We can 
> definitely go with the `__clang_unsupported` approach, but I think I'd prefer 
> these to be compile time errors rather than remarks + runtime `printf`, not 
> in the least because `printf` adds some overhead. A way to ensure we don't 
> "miss a spot" might be to check after removal for any remaining unsupported 
> builtins, instead of doing it during reachability computation (this is 
> coupled with the special naming from the prior post).

For programs having multiple TUs we cannot decide whether an unsupported 
function is used by a kernel during the compilation of a single TU. We can only 
decide that when we have the IR for the whole program. Currently, the HIP 
toolchain uses LTO of lld for multiple TUs, I am not sure whether we can emit 
clang diagnostics from lld. If not, then we need to use remarks. If we are 
confident to remove most unreachable unsupported functions at -O0, we may not 
need to use printf at run time. Remarks at LTO should be sufficient.

  if (foundGPU())
    func_use_amdgpu_builtin();
  else
    func_use_x64_builtin();



In D155850#4523051 <https://reviews.llvm.org/D155850#4523051>, @AlexVlx wrote:

> @yaxunl interesting point - are you worried about cases where due to missing 
> inlining / const prop an indirect call site that can be replaced with a 
> direct one would remain indirect? I think the problem in that case would 
> actually be different, in that possibly reachable functions would not be 
> identified as such and would be erroneously removed. I'm not sure there's any 
> case where we'd fail to remove a meant to be unreachable function. We can 
> definitely go with the `__clang_unsupported` approach, but I think I'd prefer 
> these to be compile time errors rather than remarks + runtime `printf`, not 
> in the least because `printf` adds some overhead. A way to ensure we don't 
> "miss a spot" might be to check after removal for any remaining unsupported 
> builtins, instead of doing it during reachability computation (this is 
> coupled with the special naming from the prior post).




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D155850

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

Reply via email to