Skip to content

Commit

Permalink
[llvm_stats] Do not import llvm.stats metadata for thinlto
Browse files Browse the repository at this point in the history
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
  • Loading branch information
wlei-llvm committed Nov 29, 2022
1 parent 28eb9ed commit ef0cb37
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
5 changes: 5 additions & 0 deletions llvm/lib/Linker/IRMover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
12 changes: 12 additions & 0 deletions llvm/test/ThinLTO/X86/Inputs/llvm-stats-import.ll
Original file line number Diff line number Diff line change
@@ -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}
28 changes: 28 additions & 0 deletions llvm/test/ThinLTO/X86/llvm-stats-import.ll
Original file line number Diff line number Diff line change
@@ -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}

0 comments on commit ef0cb37

Please sign in to comment.