llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Joseph Huber (jhuber6) <details> <summary>Changes</summary> Summary: Currently, we only use `-mmlink-builtin-bitcode` for non-LTO NVIDIA compiliations. THis has the problem that it will internalize the RPC client symbol which needs to be visible to the host. To counteract that, I put `retain` on it, but this also prevents optimizations on the global itself, so the passes we have that remove the symbol don't work on OpenMP anymore. This patch does the dumbest solution, adding a special string check for it in clang. Not the best solution, the runner up would be to habe a clang attribute for `externally_inititliazed` because those can't be internalized, but that might have some unfortunate side-effects. Alternatively we could make NVIDIA compilations do LTO all the time, but that would affect some users and it's harder than I thought. --- Full diff: https://github.com/llvm/llvm-project/pull/118661.diff 2 Files Affected: - (modified) clang/lib/CodeGen/CodeGenAction.cpp (+2-1) - (modified) offload/DeviceRTL/src/Misc.cpp (+1-4) ``````````diff diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index cc927f44e0326e..db762b22560f28 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -246,7 +246,8 @@ bool BackendConsumer::LinkInModules(llvm::Module *M) { *M, std::move(LM.Module), LM.LinkFlags, [](llvm::Module &M, const llvm::StringSet<> &GVS) { internalizeModule(M, [&GVS](const llvm::GlobalValue &GV) { - return !GV.hasName() || (GVS.count(GV.getName()) == 0); + return !GV.hasName() || (GVS.count(GV.getName()) == 0) || + GV.getName().starts_with("__llvm_rpc_client"); }); }); } else diff --git a/offload/DeviceRTL/src/Misc.cpp b/offload/DeviceRTL/src/Misc.cpp index c1df477365bcb6..e6f1a341e4d769 100644 --- a/offload/DeviceRTL/src/Misc.cpp +++ b/offload/DeviceRTL/src/Misc.cpp @@ -113,10 +113,7 @@ void *indirectCallLookup(void *HstPtr) { } /// The openmp client instance used to communicate with the server. -/// FIXME: This is marked as 'retain' so that it is not removed via -/// `-mlink-builtin-bitcode` -[[gnu::visibility("protected"), gnu::weak, - gnu::retain]] rpc::Client Client asm("__llvm_rpc_client"); +[[gnu::visibility("protected"), gnu::weak]] rpc::Client Client asm("__llvm_rpc_client"); } // namespace impl } // namespace ompx `````````` </details> https://github.com/llvm/llvm-project/pull/118661 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits