Skip to content

Commit 2ac9941

Browse files
committed
[NewPM] Add pass options for InternalizePass to preserve GVs.
1 parent 5865482 commit 2ac9941

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,24 @@ Expected<GlobalMergeOptions> parseGlobalMergeOptions(StringRef Params) {
11421142
return Result;
11431143
}
11441144

1145+
Expected<SmallVector<std::string, 0>> parseInternalizeGVs(StringRef Params) {
1146+
SmallVector<std::string, 1> PreservedGVs;
1147+
while (!Params.empty()) {
1148+
StringRef ParamName;
1149+
std::tie(ParamName, Params) = Params.split(';');
1150+
1151+
if (ParamName.consume_front("preserve-gv=")) {
1152+
PreservedGVs.push_back(ParamName.str());
1153+
} else {
1154+
return make_error<StringError>(
1155+
formatv("invalid Internalize pass parameter '{0}' ", ParamName).str(),
1156+
inconvertibleErrorCode());
1157+
}
1158+
}
1159+
1160+
return PreservedGVs;
1161+
}
1162+
11451163
} // namespace
11461164

11471165
/// Tests whether a pass name starts with a valid prefix for a default pipeline

llvm/lib/Passes/PassRegistry.def

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ MODULE_PASS("insert-gcov-profiling", GCOVProfilerPass())
7878
MODULE_PASS("instrorderfile", InstrOrderFilePass())
7979
MODULE_PASS("instrprof", InstrProfilingLoweringPass())
8080
MODULE_PASS("ctx-instr-lower", PGOCtxProfLoweringPass())
81-
MODULE_PASS("internalize", InternalizePass())
8281
MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass())
8382
MODULE_PASS("iroutliner", IROutlinerPass())
8483
MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass())
@@ -200,6 +199,20 @@ MODULE_PASS_WITH_PARAMS(
200199
return StructuralHashPrinterPass(dbgs(), EnableDetailedStructuralHash);
201200
},
202201
parseStructuralHashPrinterPassOptions, "detailed")
202+
MODULE_PASS_WITH_PARAMS(
203+
"internalize", "InternalizePass",
204+
[](SmallVector<std::string, 0> PreservedGVs) {
205+
if (PreservedGVs.empty())
206+
return InternalizePass();
207+
auto MustPreserveGV = [=](const GlobalValue &GV) {
208+
for (auto &PreservedGV : PreservedGVs)
209+
if (GV.getName() == PreservedGV)
210+
return true;
211+
return false;
212+
};
213+
return InternalizePass(MustPreserveGV);
214+
},
215+
parseInternalizeGVs, "preserve-gv=GV")
203216
#undef MODULE_PASS_WITH_PARAMS
204217

205218
#ifndef CGSCC_ANALYSIS

llvm/test/Transforms/Internalize/lists.ll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
; -file and -list options should be merged, the apifile contains foo and j
1414
; RUN: opt < %s -passes=internalize -internalize-public-api-list bar -internalize-public-api-file %S/apifile -S | FileCheck --check-prefix=FOO_J_AND_BAR %s
1515

16+
; specifying through pass builder option
17+
; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=j>' -S | FileCheck --check-prefix=FOO_AND_J %s
18+
; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=bar>' -S | FileCheck --check-prefix=FOO_AND_BAR %s
19+
; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=j;preserve-gv=bar>' -S | FileCheck --check-prefix=FOO_J_AND_BAR %s
20+
1621
; ALL: @i = internal global
1722
; FOO_AND_J: @i = internal global
1823
; FOO_AND_BAR: @i = internal global

0 commit comments

Comments
 (0)