Skip to content

Commit 922424c

Browse files
maleadtgiordano
authored andcommitted
[NewPM] Add pass options for InternalizePass to preserve GVs (reland) (llvm#92383)
1 parent 947be24 commit 922424c

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
@@ -1135,6 +1135,24 @@ Expected<GlobalMergeOptions> parseGlobalMergeOptions(StringRef Params) {
11351135
return Result;
11361136
}
11371137

1138+
Expected<SmallVector<std::string, 0>> parseInternalizeGVs(StringRef Params) {
1139+
SmallVector<std::string, 1> PreservedGVs;
1140+
while (!Params.empty()) {
1141+
StringRef ParamName;
1142+
std::tie(ParamName, Params) = Params.split(';');
1143+
1144+
if (ParamName.consume_front("preserve-gv=")) {
1145+
PreservedGVs.push_back(ParamName.str());
1146+
} else {
1147+
return make_error<StringError>(
1148+
formatv("invalid Internalize pass parameter '{0}' ", ParamName).str(),
1149+
inconvertibleErrorCode());
1150+
}
1151+
}
1152+
1153+
return Expected<SmallVector<std::string, 0>>(std::move(PreservedGVs));
1154+
}
1155+
11381156
} // namespace
11391157

11401158
/// 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
@@ -77,7 +77,6 @@ MODULE_PASS("inliner-wrapper-no-mandatory-first",
7777
MODULE_PASS("insert-gcov-profiling", GCOVProfilerPass())
7878
MODULE_PASS("instrorderfile", InstrOrderFilePass())
7979
MODULE_PASS("instrprof", InstrProfilingLoweringPass())
80-
MODULE_PASS("internalize", InternalizePass())
8180
MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass())
8281
MODULE_PASS("iroutliner", IROutlinerPass())
8382
MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass())
@@ -172,6 +171,20 @@ MODULE_PASS_WITH_PARAMS(
172171
"hwasan", "HWAddressSanitizerPass",
173172
[](HWAddressSanitizerOptions Opts) { return HWAddressSanitizerPass(Opts); },
174173
parseHWASanPassOptions, "kernel;recover")
174+
MODULE_PASS_WITH_PARAMS(
175+
"internalize", "InternalizePass",
176+
[](SmallVector<std::string, 0> PreservedGVs) {
177+
if (PreservedGVs.empty())
178+
return InternalizePass();
179+
auto MustPreserveGV = [=](const GlobalValue &GV) {
180+
for (auto &PreservedGV : PreservedGVs)
181+
if (GV.getName() == PreservedGV)
182+
return true;
183+
return false;
184+
};
185+
return InternalizePass(MustPreserveGV);
186+
},
187+
parseInternalizeGVs, "preserve-gv=GV")
175188
MODULE_PASS_WITH_PARAMS(
176189
"ipsccp", "IPSCCPPass", [](IPSCCPOptions Opts) { return IPSCCPPass(Opts); },
177190
parseIPSCCPOptions, "no-func-spec;func-spec")

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)