summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/IR/ModuleSummaryIndexYAML.h23
-rw-r--r--llvm/lib/Transforms/IPO/LowerTypeTests.cpp3
-rw-r--r--llvm/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml3
-rw-r--r--llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-dead.yaml7
-rw-r--r--llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-typeid2.yaml3
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-dead.ll14
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-nothing.ll1
-rw-r--r--llvm/test/Transforms/LowerTypeTests/import-unsat.ll5
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/Inputs/export.yaml3
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/Inputs/import-indir.yaml3
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/export-nothing.ll1
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll1
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/export-uniform-ret-val.ll3
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/export-unique-ret-val.ll3
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/export-unsuccessful-checked.ll2
-rw-r--r--llvm/test/Transforms/WholeProgramDevirt/import-indir.ll4
16 files changed, 59 insertions, 20 deletions
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
index 78fdb602027..891d84c2dbc 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
@@ -128,6 +128,8 @@ template <> struct MappingTraits<TypeIdSummary> {
};
struct FunctionSummaryYaml {
+ unsigned Linkage;
+ bool NotEligibleToImport, Live;
std::vector<uint64_t> TypeTests;
std::vector<FunctionSummary::VFuncId> TypeTestAssumeVCalls,
TypeCheckedLoadVCalls;
@@ -168,6 +170,9 @@ namespace yaml {
template <> struct MappingTraits<FunctionSummaryYaml> {
static void mapping(IO &io, FunctionSummaryYaml& summary) {
+ io.mapOptional("Linkage", summary.Linkage);
+ io.mapOptional("NotEligibleToImport", summary.NotEligibleToImport);
+ io.mapOptional("Live", summary.Live);
io.mapOptional("TypeTests", summary.TypeTests);
io.mapOptional("TypeTestAssumeVCalls", summary.TypeTestAssumeVCalls);
io.mapOptional("TypeCheckedLoadVCalls", summary.TypeCheckedLoadVCalls);
@@ -199,12 +204,12 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {
}
auto &Elem = V[KeyInt];
for (auto &FSum : FSums) {
- GlobalValueSummary::GVFlags GVFlags(GlobalValue::ExternalLinkage, false,
- false);
Elem.SummaryList.push_back(llvm::make_unique<FunctionSummary>(
- GVFlags, 0, ArrayRef<ValueInfo>{},
- ArrayRef<FunctionSummary::EdgeTy>{}, std::move(FSum.TypeTests),
- std::move(FSum.TypeTestAssumeVCalls),
+ GlobalValueSummary::GVFlags(
+ static_cast<GlobalValue::LinkageTypes>(FSum.Linkage),
+ FSum.NotEligibleToImport, FSum.Live),
+ 0, ArrayRef<ValueInfo>{}, ArrayRef<FunctionSummary::EdgeTy>{},
+ std::move(FSum.TypeTests), std::move(FSum.TypeTestAssumeVCalls),
std::move(FSum.TypeCheckedLoadVCalls),
std::move(FSum.TypeTestAssumeConstVCalls),
std::move(FSum.TypeCheckedLoadConstVCalls)));
@@ -216,8 +221,10 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {
for (auto &Sum : P.second.SummaryList) {
if (auto *FSum = dyn_cast<FunctionSummary>(Sum.get()))
FSums.push_back(FunctionSummaryYaml{
- FSum->type_tests(), FSum->type_test_assume_vcalls(),
- FSum->type_checked_load_vcalls(),
+ FSum->flags().Linkage,
+ static_cast<bool>(FSum->flags().NotEligibleToImport),
+ static_cast<bool>(FSum->flags().Live), FSum->type_tests(),
+ FSum->type_test_assume_vcalls(), FSum->type_checked_load_vcalls(),
FSum->type_test_assume_const_vcalls(),
FSum->type_checked_load_const_vcalls()});
}
@@ -231,6 +238,8 @@ template <> struct MappingTraits<ModuleSummaryIndex> {
static void mapping(IO &io, ModuleSummaryIndex& index) {
io.mapOptional("GlobalValueMap", index.GlobalValueMap);
io.mapOptional("TypeIdMap", index.TypeIdMap);
+ io.mapOptional("WithGlobalValueDeadStripping",
+ index.WithGlobalValueDeadStripping);
}
};
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index ca4ee92f971..7bec50d9d25 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -1442,9 +1442,8 @@ bool LowerTypeTestsModule::lower() {
for (auto &P : *ExportSummary) {
for (auto &S : P.second.SummaryList) {
auto *FS = dyn_cast<FunctionSummary>(S.get());
- if (!FS)
+ if (!FS || !ExportSummary->isGlobalValueLive(FS))
continue;
- // FIXME: Only add live functions.
for (GlobalValue::GUID G : FS->type_tests())
for (Metadata *MD : MetadataByGUID[G])
AddTypeIdUse(MD).IsExported = true;
diff --git a/llvm/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml b/llvm/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml
index b7a1d208fc6..cfac37986bd 100644
--- a/llvm/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml
+++ b/llvm/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml
@@ -1,7 +1,8 @@
---
GlobalValueMap:
42:
- - TypeTests: [123]
+ - Live: true
+ TypeTests: [123]
TypeIdMap:
typeid1:
TTRes:
diff --git a/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-dead.yaml b/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-dead.yaml
new file mode 100644
index 00000000000..7baa02ada86
--- /dev/null
+++ b/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-dead.yaml
@@ -0,0 +1,7 @@
+---
+GlobalValueMap:
+ 42:
+ - Live: false
+ TypeTests: [14276520915468743435] # guid("typeid1")
+WithGlobalValueDeadStripping: true
+...
diff --git a/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-typeid2.yaml b/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-typeid2.yaml
index 031b2e8de04..f30257cfc0d 100644
--- a/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-typeid2.yaml
+++ b/llvm/test/Transforms/LowerTypeTests/Inputs/use-typeid1-typeid2.yaml
@@ -1,5 +1,6 @@
---
GlobalValueMap:
42:
- - TypeTests: [14276520915468743435, 15427464259790519041] # guid("typeid1"), guid("typeid2")
+ - Live: true
+ TypeTests: [14276520915468743435, 15427464259790519041] # guid("typeid1"), guid("typeid2")
...
diff --git a/llvm/test/Transforms/LowerTypeTests/export-dead.ll b/llvm/test/Transforms/LowerTypeTests/export-dead.ll
new file mode 100644
index 00000000000..265402b34a6
--- /dev/null
+++ b/llvm/test/Transforms/LowerTypeTests/export-dead.ll
@@ -0,0 +1,14 @@
+; The only use of "typeid1" is in a dead function. Export nothing.
+
+; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/use-typeid1-dead.yaml -lowertypetests-write-summary=%t < %s | FileCheck %s
+; RUN: FileCheck --check-prefix=SUMMARY %s < %t
+
+@foo = constant i32 42, !type !0
+
+!0 = !{i32 0, !"typeid1"}
+
+; CHECK-NOT: @__typeid_typeid1_global_addr =
+
+; SUMMARY: TypeIdMap:
+; SUMMARY-NEXT: WithGlobalValueDeadStripping: true
+; SUMMARY-NEXT: ...
diff --git a/llvm/test/Transforms/LowerTypeTests/export-nothing.ll b/llvm/test/Transforms/LowerTypeTests/export-nothing.ll
index 9ab41b5f6cb..8ad33153994 100644
--- a/llvm/test/Transforms/LowerTypeTests/export-nothing.ll
+++ b/llvm/test/Transforms/LowerTypeTests/export-nothing.ll
@@ -4,4 +4,5 @@
; CHECK: ---
; CHECK-NEXT: GlobalValueMap:
; CHECK-NEXT: TypeIdMap:
+; CHECK-NEXT: WithGlobalValueDeadStripping: false
; CHECK-NEXT: ...
diff --git a/llvm/test/Transforms/LowerTypeTests/import-unsat.ll b/llvm/test/Transforms/LowerTypeTests/import-unsat.ll
index 76b24400198..6cb9b26fb57 100644
--- a/llvm/test/Transforms/LowerTypeTests/import-unsat.ll
+++ b/llvm/test/Transforms/LowerTypeTests/import-unsat.ll
@@ -4,7 +4,10 @@
; SUMMARY: GlobalValueMap:
; SUMMARY-NEXT: 42:
-; SUMMARY-NEXT: - TypeTests: [ 123 ]
+; SUMMARY-NEXT: - Linkage: 0
+; SUMMARY-NEXT: NotEligibleToImport: false
+; SUMMARY-NEXT: Live: true
+; SUMMARY-NEXT: TypeTests: [ 123 ]
; SUMMARY-NEXT: TypeIdMap:
; SUMMARY-NEXT: typeid1:
; SUMMARY-NEXT: TTRes:
diff --git a/llvm/test/Transforms/WholeProgramDevirt/Inputs/export.yaml b/llvm/test/Transforms/WholeProgramDevirt/Inputs/export.yaml
index 0f6f59de752..71cf38b216c 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/Inputs/export.yaml
+++ b/llvm/test/Transforms/WholeProgramDevirt/Inputs/export.yaml
@@ -1,7 +1,8 @@
---
GlobalValueMap:
42:
- - TypeTestAssumeVCalls:
+ - Live: true
+ TypeTestAssumeVCalls:
- GUID: 14276520915468743435 # typeid1
Offset: 0
TypeCheckedLoadVCalls:
diff --git a/llvm/test/Transforms/WholeProgramDevirt/Inputs/import-indir.yaml b/llvm/test/Transforms/WholeProgramDevirt/Inputs/import-indir.yaml
index 1cb3ad3f134..30159c5012b 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/Inputs/import-indir.yaml
+++ b/llvm/test/Transforms/WholeProgramDevirt/Inputs/import-indir.yaml
@@ -1,7 +1,8 @@
---
GlobalValueMap:
42:
- - TypeTestAssumeVCalls:
+ - Live: true
+ TypeTestAssumeVCalls:
- GUID: 123
Offset: 0
- GUID: 456
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-nothing.ll b/llvm/test/Transforms/WholeProgramDevirt/export-nothing.ll
index e0814efbf9c..4707eaa17ea 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-nothing.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-nothing.ll
@@ -4,4 +4,5 @@
; CHECK: ---
; CHECK-NEXT: GlobalValueMap:
; CHECK-NEXT: TypeIdMap:
+; CHECK-NEXT: WithGlobalValueDeadStripping: false
; CHECK-NEXT: ...
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll b/llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll
index f4f3fd054c4..15de77381ed 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll
@@ -38,6 +38,7 @@
; SUMMARY-NEXT: Kind: SingleImpl
; SUMMARY-NEXT: SingleImplName: 'vf4$merged'
; SUMMARY-NEXT: ResByArg:
+; SUMMARY-NEXT: WithGlobalValueDeadStripping: false
; SUMMARY-NEXT: ...
; CHECK: @vt1 = constant void (i8*)* @vf1
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-uniform-ret-val.ll b/llvm/test/Transforms/WholeProgramDevirt/export-uniform-ret-val.ll
index 1d7030c41fd..11b1c5de4d8 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-uniform-ret-val.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-uniform-ret-val.ll
@@ -1,8 +1,7 @@
; RUN: opt -wholeprogramdevirt -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck %s
; RUN: FileCheck --check-prefix=SUMMARY %s < %t
-; SUMMARY: - TypeTests:
-; SUMMARY-NEXT: TypeTestAssumeVCalls:
+; SUMMARY-NOT: TypeTests:
; SUMMARY: TypeIdMap:
; SUMMARY-NEXT: typeid4:
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-unique-ret-val.ll b/llvm/test/Transforms/WholeProgramDevirt/export-unique-ret-val.ll
index 174a573b5b0..0878d01cce0 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-unique-ret-val.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-unique-ret-val.ll
@@ -1,8 +1,7 @@
; RUN: opt -wholeprogramdevirt -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck %s
; RUN: FileCheck --check-prefix=SUMMARY %s < %t
-; SUMMARY: - TypeTests:
-; SUMMARY-NEXT: TypeTestAssumeVCalls:
+; SUMMARY-NOT: TypeTests:
; SUMMARY: TypeIdMap:
; SUMMARY-NEXT: typeid3:
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-unsuccessful-checked.ll b/llvm/test/Transforms/WholeProgramDevirt/export-unsuccessful-checked.ll
index 0785ade2857..3132444a9f3 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-unsuccessful-checked.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-unsuccessful-checked.ll
@@ -1,7 +1,7 @@
; RUN: opt -wholeprogramdevirt -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -o /dev/null %s
; RUN: FileCheck %s < %t
-; CHECK: - TypeTests: [ 15427464259790519041, 17525413373118030901 ]
+; CHECK: TypeTests: [ 15427464259790519041, 17525413373118030901 ]
; CHECK-NEXT: TypeTestAssumeVCalls:
@vt1a = constant void (i8*)* @vf1a, !type !0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/import-indir.ll b/llvm/test/Transforms/WholeProgramDevirt/import-indir.ll
index 1de9352eeb2..73c982b1789 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/import-indir.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/import-indir.ll
@@ -4,7 +4,9 @@
; SUMMARY: GlobalValueMap:
; SUMMARY-NEXT: 42:
-; SUMMARY-NEXT: - TypeTests:
+; SUMMARY-NEXT: - Linkage: 0
+; SUMMARY-NEXT: NotEligibleToImport: false
+; SUMMARY-NEXT: Live: true
; SUMMARY-NEXT: TypeTestAssumeVCalls:
; SUMMARY-NEXT: - GUID: 123
; SUMMARY-NEXT: Offset: 0
OpenPOWER on IntegriCloud