[llvm] [ThinLTO] Don't convert functions to declarations if `force-import-all` is enabled (PR #134541)

Shilei Tian via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 8 09:58:01 PDT 2025


================
@@ -1701,13 +1701,16 @@ void llvm::thinLTOFinalizeInModule(Module &TheModule,
     if (NewLinkage == GV.getLinkage())
       return;
 
+    bool ForceImportFunction = isa<Function>(GV) && ForceImportAll;
+
     // Check for a non-prevailing def that has interposable linkage
     // (e.g. non-odr weak or linkonce). In that case we can't simply
     // convert to available_externally, since it would lose the
     // interposable property and possibly get inlined. Simply drop
     // the definition in that case.
     if (GlobalValue::isAvailableExternallyLinkage(NewLinkage) &&
-        GlobalValue::isInterposableLinkage(GV.getLinkage())) {
+        GlobalValue::isInterposableLinkage(GV.getLinkage()) &&
+        !ForceImportFunction) {
----------------
shiltian wrote:

First of all, `force-import-all` is not a debug option. It was introduced to support targets that don’t support object linking, like AMDGPU.

Second, while the comment above explains the reasoning for this code block, it assumes that object linking is supported. For targets that don’t support object linking, none of what’s described in the comment will actually happen.

https://github.com/llvm/llvm-project/pull/134541


More information about the llvm-commits mailing list