[llvm] ef0cb37 - [llvm_stats] Do not import llvm.stats metadata for thinlto

via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 28 16:47:39 PST 2022


Author: wlei
Date: 2022-11-28T16:47:20-08:00
New Revision: ef0cb372dc80c9f71a181125e6dca22e5c59ece5

URL: https://github.com/llvm/llvm-project/commit/ef0cb372dc80c9f71a181125e6dca22e5c59ece5
DIFF: https://github.com/llvm/llvm-project/commit/ef0cb372dc80c9f71a181125e6dca22e5c59ece5.diff

LOG: [llvm_stats] Do not import llvm.stats metadata for thinlto

The stats are computed per module and will all be merged in the binary, importing the metadata will cause duplication of the stats.

Reviewed By: hoy, wenlei

Differential Revision: https://reviews.llvm.org/D138833

Added: 
    llvm/test/ThinLTO/X86/Inputs/llvm-stats-import.ll
    llvm/test/ThinLTO/X86/llvm-stats-import.ll

Modified: 
    llvm/lib/Linker/IRMover.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index d9dcd613bd7c..518f1a162210 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -1244,6 +1244,11 @@ void IRLinker::linkNamedMDNodes() {
                     DstM.getModuleIdentifier() + "' is not\n");
       continue;
     }
+    // The stats are computed per module and will all be merged in the binary.
+    // Importing the metadata will cause duplication of the stats.
+    if (IsPerformingImport && NMD.getName() == "llvm.stats")
+      continue;
+
     NamedMDNode *DestNMD = DstM.getOrInsertNamedMetadata(NMD.getName());
     // Add Src elements into Dest node.
     for (const MDNode *Op : NMD.operands())

diff  --git a/llvm/test/ThinLTO/X86/Inputs/llvm-stats-import.ll b/llvm/test/ThinLTO/X86/Inputs/llvm-stats-import.ll
new file mode 100644
index 000000000000..5e981fec9e35
--- /dev/null
+++ b/llvm/test/ThinLTO/X86/Inputs/llvm-stats-import.ll
@@ -0,0 +1,12 @@
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @foo() {
+entry:
+  ret void
+}
+
+attributes #0 = { inaccessiblememonly nounwind willreturn }
+
+!llvm.stats = !{!0}
+!0 = !{!"foo", i64 456}

diff  --git a/llvm/test/ThinLTO/X86/llvm-stats-import.ll b/llvm/test/ThinLTO/X86/llvm-stats-import.ll
new file mode 100644
index 000000000000..4250cdd59193
--- /dev/null
+++ b/llvm/test/ThinLTO/X86/llvm-stats-import.ll
@@ -0,0 +1,28 @@
+; RUN: opt -module-summary %s -o %t1.bc
+; RUN: opt -module-summary %p/Inputs/llvm-stats-import.ll -o %t2.bc
+; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t1.bc %t2.bc
+
+; RUN: llvm-lto -thinlto-action=import %t1.bc -thinlto-index=%t.index.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=CHECK-MAIN
+; RUN: llvm-lto -thinlto-action=import %t2.bc -thinlto-index=%t.index.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=CHECK-FOO
+
+; CHECK-MAIN: !0 = !{!"main", i64 123}
+; CHECK-MAIN-NOT: !{!"foo", i64 456}
+
+; CHECK-FOO: !0 = !{!"foo", i64 456}
+; CHECK-FOO-NOT: !{!"main", i64 123}
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @main() {
+entry:
+  call void (...) @foo()
+  ret i32 0
+}
+
+declare void @foo(...)
+
+attributes #0 = { inaccessiblememonly nounwind willreturn }
+
+!llvm.stats = !{!0}
+!0 = !{!"main", i64 123}


        


More information about the llvm-commits mailing list