[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
This commit is contained in:
wlei 2022-11-28 10:02:14 -08:00
parent 28eb9ed3bb
commit ef0cb372dc
3 changed files with 45 additions and 0 deletions

View File

@ -1244,6 +1244,11 @@ void IRLinker::linkNamedMDNodes() {
DstM.getModuleIdentifier() + "' is not\n"); DstM.getModuleIdentifier() + "' is not\n");
continue; 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()); NamedMDNode *DestNMD = DstM.getOrInsertNamedMetadata(NMD.getName());
// Add Src elements into Dest node. // Add Src elements into Dest node.
for (const MDNode *Op : NMD.operands()) for (const MDNode *Op : NMD.operands())

View File

@ -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}

View File

@ -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}