From 030f3fe713fd8b264c6b3547832d480900840738 Mon Sep 17 00:00:00 2001 From: Paul Kirth Date: Thu, 26 Jun 2025 16:04:39 -0700 Subject: [PATCH] =?UTF-8?q?Revert=20"[llvm][EmbedBitcodePass]=20Prevent=20?= =?UTF-8?q?modifying=20the=20module=20with=20ThinLTO=20(#=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 55c7d5cdadc4dd0fab843992e0fb31ef7ea6fda4. --- llvm/lib/Transforms/IPO/EmbedBitcodePass.cpp | 6 +----- llvm/test/Transforms/EmbedBitcode/embed-wpd.ll | 7 +++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/llvm/lib/Transforms/IPO/EmbedBitcodePass.cpp b/llvm/lib/Transforms/IPO/EmbedBitcodePass.cpp index 5e8b2a4e3d842..73f567734a91b 100644 --- a/llvm/lib/Transforms/IPO/EmbedBitcodePass.cpp +++ b/llvm/lib/Transforms/IPO/EmbedBitcodePass.cpp @@ -16,7 +16,6 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/Triple.h" #include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h" -#include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Transforms/Utils/ModuleUtils.h" #include @@ -34,11 +33,8 @@ PreservedAnalyses EmbedBitcodePass::run(Module &M, ModuleAnalysisManager &AM) { std::string Data; raw_string_ostream OS(Data); - // Clone the module with Thin LTO, since ThinLTOBitcodeWriterPass changes - // vtable linkage that would break the non-lto object code for FatLTO. if (IsThinLTO) - ThinLTOBitcodeWriterPass(OS, /*ThinLinkOS=*/nullptr) - .run(*llvm::CloneModule(M), AM); + ThinLTOBitcodeWriterPass(OS, /*ThinLinkOS=*/nullptr).run(M, AM); else BitcodeWriterPass(OS, /*ShouldPreserveUseListOrder=*/false, EmitLTOSummary) .run(M, AM); diff --git a/llvm/test/Transforms/EmbedBitcode/embed-wpd.ll b/llvm/test/Transforms/EmbedBitcode/embed-wpd.ll index 54931be42b4eb..f1f7712f54039 100644 --- a/llvm/test/Transforms/EmbedBitcode/embed-wpd.ll +++ b/llvm/test/Transforms/EmbedBitcode/embed-wpd.ll @@ -1,13 +1,12 @@ ; RUN: opt --mtriple x86_64-unknown-linux-gnu < %s -passes="embed-bitcode" -S | FileCheck %s -; CHECK: $_ZTV3Foo = comdat any +; CHECK-NOT: $_ZTV3Foo = comdat any $_ZTV3Foo = comdat any $_ZTI3Foo = comdat any -;; ThinLTOBitcodeWriter will remove the vtable for Foo, and make it an external symbol -; CHECK: @_ZTV3Foo = linkonce_odr hidden unnamed_addr constant { [5 x ptr] } { [5 x ptr] [ptr null, ptr @_ZTI3Foo, ptr @_ZN3FooD2Ev, ptr @_ZN3FooD0Ev, ptr @_ZNKSt13runtime_error4whatEv] }, comdat, align 8, !type !0, !type !1, !type !2, !type !3, !type !4, !type !5 -; CHECK-NOT: @foo = external unnamed_addr constant { [5 x ptr] }, align 8 +; CHECK: @_ZTV3Foo = external hidden unnamed_addr constant { [5 x ptr] }, align 8 +; CHECK: @_ZTI3Foo = linkonce_odr hidden constant { ptr, ptr, ptr } { ptr getelementptr inbounds (ptr, ptr @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2), ptr @_ZTS3Foo, ptr @_ZTISt13runtime_error }, comdat, align 8 ; CHECK: @llvm.embedded.object = private constant {{.*}}, section ".llvm.lto", align 1 ; CHECK: @llvm.compiler.used = appending global [1 x ptr] [ptr @llvm.embedded.object], section "llvm.metadata" @_ZTV3Foo = linkonce_odr hidden unnamed_addr constant { [5 x ptr] } { [5 x ptr] [ptr null, ptr @_ZTI3Foo, ptr @_ZN3FooD2Ev, ptr @_ZN3FooD0Ev, ptr @_ZNKSt13runtime_error4whatEv] }, comdat, align 8, !type !0, !type !1, !type !2, !type !3, !type !4, !type !5