[llvm] r335760 - [ThinLTO] Print names in function import debug messages when available
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 27 11:03:39 PDT 2018
Author: tejohnson
Date: Wed Jun 27 11:03:39 2018
New Revision: 335760
URL: http://llvm.org/viewvc/llvm-project?rev=335760&view=rev
Log:
[ThinLTO] Print names in function import debug messages when available
Summary:
Rather than just print the GUID, when it is available in the index,
print the global name as well in the function import thin link debug
messages. Names will be available when the combined index is being
built by the same process, e.g. a linker or "llvm-lto2 run".
Reviewers: davidxl
Subscribers: mehdi_amini, inglorion, eraman, steven_wu, llvm-commits
Differential Revision: https://reviews.llvm.org/D48612
Added:
llvm/trunk/test/ThinLTO/X86/Inputs/funcimport-debug.ll
llvm/trunk/test/ThinLTO/X86/funcimport-debug.ll
Modified:
llvm/trunk/include/llvm/IR/ModuleSummaryIndex.h
llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
llvm/trunk/test/ThinLTO/X86/deadstrip.ll
Modified: llvm/trunk/include/llvm/IR/ModuleSummaryIndex.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/ModuleSummaryIndex.h?rev=335760&r1=335759&r2=335760&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/ModuleSummaryIndex.h (original)
+++ llvm/trunk/include/llvm/IR/ModuleSummaryIndex.h Wed Jun 27 11:03:39 2018
@@ -181,6 +181,13 @@ struct ValueInfo {
bool isDSOLocal() const;
};
+inline raw_ostream &operator<<(raw_ostream &OS, const ValueInfo &VI) {
+ OS << VI.getGUID();
+ if (!VI.name().empty())
+ OS << " (" << VI.name() << ")";
+ return OS;
+}
+
inline bool operator==(const ValueInfo &A, const ValueInfo &B) {
assert(A.getRef() && B.getRef() &&
"Need ValueInfo with non-null Ref for comparison");
Modified: llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp?rev=335760&r1=335759&r2=335760&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp Wed Jun 27 11:03:39 2018
@@ -254,7 +254,7 @@ static void computeImportForReferencedGl
continue;
}
- LLVM_DEBUG(dbgs() << " ref -> " << VI.getGUID() << "\n");
+ LLVM_DEBUG(dbgs() << " ref -> " << VI << "\n");
for (auto &RefSummary : VI.getSummaryList())
if (RefSummary->getSummaryKind() == GlobalValueSummary::GlobalVarKind &&
@@ -284,8 +284,8 @@ static void computeImportForFunction(
static int ImportCount = 0;
for (auto &Edge : Summary.calls()) {
ValueInfo VI = Edge.first;
- LLVM_DEBUG(dbgs() << " edge -> " << VI.getGUID()
- << " Threshold:" << Threshold << "\n");
+ LLVM_DEBUG(dbgs() << " edge -> " << VI << " Threshold:" << Threshold
+ << "\n");
if (ImportCutoff >= 0 && ImportCount >= ImportCutoff) {
LLVM_DEBUG(dbgs() << "ignored! import-cutoff value of " << ImportCutoff
@@ -399,8 +399,13 @@ static void ComputeImportForModule(
// Populate the worklist with the import for the functions in the current
// module
for (auto &GVSummary : DefinedGVSummaries) {
+#ifndef NDEBUG
+ // FIXME: Change the GVSummaryMapTy to hold ValueInfo instead of GUID
+ // so this map look up (and possibly others) can be avoided.
+ auto VI = Index.getValueInfo(GVSummary.first);
+#endif
if (!Index.isGlobalValueLive(GVSummary.second)) {
- LLVM_DEBUG(dbgs() << "Ignores Dead GUID: " << GVSummary.first << "\n");
+ LLVM_DEBUG(dbgs() << "Ignores Dead GUID: " << VI << "\n");
continue;
}
auto *FuncSummary =
@@ -408,7 +413,7 @@ static void ComputeImportForModule(
if (!FuncSummary)
// Skip import for global variables
continue;
- LLVM_DEBUG(dbgs() << "Initialize import for " << GVSummary.first << "\n");
+ LLVM_DEBUG(dbgs() << "Initialize import for " << VI << "\n");
computeImportForFunction(*FuncSummary, Index, ImportInstrLimit,
DefinedGVSummaries, Worklist, ImportList,
ExportLists);
@@ -600,14 +605,16 @@ void llvm::computeDeadSymbols(
}
// Add values flagged in the index as live roots to the worklist.
- for (const auto &Entry : Index)
+ for (const auto &Entry : Index) {
+ auto VI = Index.getValueInfo(Entry);
for (auto &S : Entry.second.SummaryList)
if (S->isLive()) {
- LLVM_DEBUG(dbgs() << "Live root: " << Entry.first << "\n");
- Worklist.push_back(ValueInfo(/*IsAnalysis=*/false, &Entry));
+ LLVM_DEBUG(dbgs() << "Live root: " << VI << "\n");
+ Worklist.push_back(VI);
++LiveSymbols;
break;
}
+ }
// Make value live and add it to the worklist if it was not live before.
auto visit = [&](ValueInfo VI) {
Added: llvm/trunk/test/ThinLTO/X86/Inputs/funcimport-debug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/Inputs/funcimport-debug.ll?rev=335760&view=auto
==============================================================================
--- llvm/trunk/test/ThinLTO/X86/Inputs/funcimport-debug.ll (added)
+++ llvm/trunk/test/ThinLTO/X86/Inputs/funcimport-debug.ll Wed Jun 27 11:03:39 2018
@@ -0,0 +1,10 @@
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+
+define void @foo() #0 {
+entry:
+ ret void
+}
+
+ at baz = constant i32 10, align 4
Modified: llvm/trunk/test/ThinLTO/X86/deadstrip.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/deadstrip.ll?rev=335760&r1=335759&r2=335760&view=diff
==============================================================================
--- llvm/trunk/test/ThinLTO/X86/deadstrip.ll (original)
+++ llvm/trunk/test/ThinLTO/X86/deadstrip.ll Wed Jun 27 11:03:39 2018
@@ -1,3 +1,6 @@
+; Require asserts for -debug-only
+; REQUIRES: asserts
+
; RUN: opt -module-summary %s -o %t1.bc
; RUN: opt -module-summary %p/Inputs/deadstrip.ll -o %t2.bc
; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t1.bc %t2.bc
@@ -18,7 +21,9 @@
; RUN: -r %t2.bc,_baz,pl \
; RUN: -r %t2.bc,_boo,pl \
; RUN: -r %t2.bc,_dead_func,l \
-; RUN: -r %t2.bc,_another_dead_func,pl
+; RUN: -r %t2.bc,_another_dead_func,pl \
+; RUN: -thinlto-threads=1 \
+; RUN: -debug-only=function-import 2>&1 | FileCheck %s --check-prefix=DEBUG
; RUN: llvm-dis < %t.out.1.3.import.bc | FileCheck %s --check-prefix=LTO2
; RUN: llvm-dis < %t.out.2.3.import.bc | FileCheck %s --check-prefix=LTO2-CHECK2
; RUN: llvm-nm %t.out.1 | FileCheck %s --check-prefix=CHECK2-NM
@@ -71,6 +76,13 @@
; CHECK-NM-NOT: bar
; CHECK-NM-NOT: dead
+; DEBUG: Live root: 2412314959268824392 (llvm.global_ctors)
+; DEBUG: Live root: 15822663052811949562 (main)
+; DEBUG: Ignores Dead GUID: 7342339837106705152 (dead_func)
+; DEBUG: Ignores Dead GUID: 7546896869197086323 (baz)
+; DEBUG: Initialize import for 15611644523426561710 (boo)
+; DEBUG: Ignores Dead GUID: 2384416018110111308 (another_dead_func)
+
; Next test the case where Inputs/deadstrip.ll does not get a module index,
; which will cause it to be handled by regular LTO in the new LTO API.
; In that case there are uses of @dead_func in the regular LTO partition
Added: llvm/trunk/test/ThinLTO/X86/funcimport-debug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/funcimport-debug.ll?rev=335760&view=auto
==============================================================================
--- llvm/trunk/test/ThinLTO/X86/funcimport-debug.ll (added)
+++ llvm/trunk/test/ThinLTO/X86/funcimport-debug.ll Wed Jun 27 11:03:39 2018
@@ -0,0 +1,35 @@
+; Test of function importing debug messages
+
+; Require asserts for -debug-only
+; REQUIRES: asserts
+
+; Do setup work for all below tests: generate bitcode and combined index
+; RUN: opt -module-summary %s -o %t1.bc
+; RUN: opt -module-summary %p/Inputs/funcimport-debug.ll -o %t2.bc
+
+; RUN: llvm-lto2 run %t1.bc %t2.bc -o %t.o -save-temps \
+; RUN: -r=%t1.bc,_main,plx \
+; RUN: -r=%t1.bc,_foo,l \
+; RUN: -r=%t1.bc,_baz,l \
+; RUN: -r=%t2.bc,_foo,plx \
+; RUN: -r=%t2.bc,_baz,plx \
+; RUN: -thinlto-threads=1 \
+; RUN: -debug-only=function-import 2>&1 | FileCheck %s
+
+; CHECK-DAG: Initialize import for 6699318081062747564 (foo)
+; CHECK-DAG: Initialize import for 15822663052811949562 (main)
+; CHECK-DAG: ref -> 7546896869197086323 (baz)
+; CHECK-DAG: edge -> 6699318081062747564 (foo) Threshold:100
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+define i32 @main() #0 {
+entry:
+ call void (...) @foo()
+ %0 = load i32, i32* @baz, align 4
+ ret i32 %0
+}
+
+declare void @foo(...) #1
+ at baz = external global i32
More information about the llvm-commits
mailing list