While collecting reachable callees (from kernels), ignore call graph node which
does not have associated function or associated function is not a definition.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/test/CodeGen/AMDGPU/replace-lds-by-ptr-call-to-declare-only-func.ll | ||
---|---|---|
2 | Surely you don't need -amdgpu-enable-lds-replace-with-pointer=true here. |
llvm/test/CodeGen/AMDGPU/replace-lds-by-ptr-call-to-declare-only-func.ll | ||
---|---|---|
2 | Correct, but now the pass is disabled (off by default) because of the two openmp issues reported. Please refer https://reviews.llvm.org/D104962. |
llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp | ||
---|---|---|
73 | What will happen if we have a call to a real function, but bitcasted/aliased? getFunction() will return nullptr, but the function is still reachable. |
llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp | ||
---|---|---|
73 | We have not yet handled bitcasted/aliased function pointers. We have planned it as a separate patch. We definetely need to relook into it at that point. But, for now, this check is essentailly required. This is the root cause behind the openmp compile time issue reported at https://reviews.llvm.org/D103225. |
llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp | ||
---|---|---|
73 | I understand. But is it safe if we have a bitcast and you reenable the pass? |
llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp | ||
---|---|---|
73 | If we have bitcast, then this pass will not reach those bitcasted functions. So, it will not replace any LDS used within those functions. Then LDS lowering pass will directly pack those LDS into a module struct which possibly results in unoptimized use of LDS but the program is safe. |
LGTM
llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp | ||
---|---|---|
73 | OK, this is conservatively correct but suboptimal. That is what I wanted to know. |
What will happen if we have a call to a real function, but bitcasted/aliased? getFunction() will return nullptr, but the function is still reachable.