Skip to content

Commit 4d7f28a

Browse files
authored
[Passes] Expose parseSinglePassOption (#86226)
Reland #86225, adjust the name space.
1 parent 718fbbe commit 4d7f28a

File tree

2 files changed

+55
-41
lines changed

2 files changed

+55
-41
lines changed

llvm/include/llvm/Passes/PassBuilder.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,13 @@ class PassBuilder {
672672
return Result;
673673
}
674674

675+
/// Handle passes only accept one bool-valued parameter.
676+
///
677+
/// \return false when Params is empty.
678+
static Expected<bool> parseSinglePassOption(StringRef Params,
679+
StringRef OptionName,
680+
StringRef PassName);
681+
675682
private:
676683
// O1 pass pipeline
677684
FunctionPassManager

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,26 @@ static std::optional<OptimizationLevel> parseOptLevel(StringRef S) {
514514
.Default(std::nullopt);
515515
}
516516

517+
Expected<bool> PassBuilder::parseSinglePassOption(StringRef Params,
518+
StringRef OptionName,
519+
StringRef PassName) {
520+
bool Result = false;
521+
while (!Params.empty()) {
522+
StringRef ParamName;
523+
std::tie(ParamName, Params) = Params.split(';');
524+
525+
if (ParamName == OptionName) {
526+
Result = true;
527+
} else {
528+
return make_error<StringError>(
529+
formatv("invalid {1} pass parameter '{0}' ", ParamName, PassName)
530+
.str(),
531+
inconvertibleErrorCode());
532+
}
533+
}
534+
return Result;
535+
}
536+
517537
namespace {
518538

519539
/// Parser of parameters for HardwareLoops pass.
@@ -600,44 +620,29 @@ Expected<LoopUnrollOptions> parseLoopUnrollOptions(StringRef Params) {
600620
return UnrollOpts;
601621
}
602622

603-
Expected<bool> parseSinglePassOption(StringRef Params, StringRef OptionName,
604-
StringRef PassName) {
605-
bool Result = false;
606-
while (!Params.empty()) {
607-
StringRef ParamName;
608-
std::tie(ParamName, Params) = Params.split(';');
609-
610-
if (ParamName == OptionName) {
611-
Result = true;
612-
} else {
613-
return make_error<StringError>(
614-
formatv("invalid {1} pass parameter '{0}' ", ParamName, PassName)
615-
.str(),
616-
inconvertibleErrorCode());
617-
}
618-
}
619-
return Result;
620-
}
621-
622623
Expected<bool> parseGlobalDCEPassOptions(StringRef Params) {
623-
return parseSinglePassOption(Params, "vfe-linkage-unit-visibility", "GlobalDCE");
624+
return PassBuilder::parseSinglePassOption(
625+
Params, "vfe-linkage-unit-visibility", "GlobalDCE");
624626
}
625627

626628
Expected<bool> parseCGProfilePassOptions(StringRef Params) {
627-
return parseSinglePassOption(Params, "in-lto-post-link", "CGProfile");
629+
return PassBuilder::parseSinglePassOption(Params, "in-lto-post-link",
630+
"CGProfile");
628631
}
629632

630633
Expected<bool> parseInlinerPassOptions(StringRef Params) {
631-
return parseSinglePassOption(Params, "only-mandatory", "InlinerPass");
634+
return PassBuilder::parseSinglePassOption(Params, "only-mandatory",
635+
"InlinerPass");
632636
}
633637

634638
Expected<bool> parseCoroSplitPassOptions(StringRef Params) {
635-
return parseSinglePassOption(Params, "reuse-storage", "CoroSplitPass");
639+
return PassBuilder::parseSinglePassOption(Params, "reuse-storage",
640+
"CoroSplitPass");
636641
}
637642

638643
Expected<bool> parsePostOrderFunctionAttrsPassOptions(StringRef Params) {
639-
return parseSinglePassOption(Params, "skip-non-recursive-function-attrs",
640-
"PostOrderFunctionAttrs");
644+
return PassBuilder::parseSinglePassOption(
645+
Params, "skip-non-recursive-function-attrs", "PostOrderFunctionAttrs");
641646
}
642647

643648
Expected<CFGuardPass::Mechanism> parseCFGuardPassOptions(StringRef Params) {
@@ -661,19 +666,21 @@ Expected<CFGuardPass::Mechanism> parseCFGuardPassOptions(StringRef Params) {
661666
}
662667

663668
Expected<bool> parseEarlyCSEPassOptions(StringRef Params) {
664-
return parseSinglePassOption(Params, "memssa", "EarlyCSE");
669+
return PassBuilder::parseSinglePassOption(Params, "memssa", "EarlyCSE");
665670
}
666671

667672
Expected<bool> parseEntryExitInstrumenterPassOptions(StringRef Params) {
668-
return parseSinglePassOption(Params, "post-inline", "EntryExitInstrumenter");
673+
return PassBuilder::parseSinglePassOption(Params, "post-inline",
674+
"EntryExitInstrumenter");
669675
}
670676

671677
Expected<bool> parseLoopExtractorPassOptions(StringRef Params) {
672-
return parseSinglePassOption(Params, "single", "LoopExtractor");
678+
return PassBuilder::parseSinglePassOption(Params, "single", "LoopExtractor");
673679
}
674680

675681
Expected<bool> parseLowerMatrixIntrinsicsPassOptions(StringRef Params) {
676-
return parseSinglePassOption(Params, "minimal", "LowerMatrixIntrinsics");
682+
return PassBuilder::parseSinglePassOption(Params, "minimal",
683+
"LowerMatrixIntrinsics");
677684
}
678685

679686
Expected<AddressSanitizerOptions> parseASanPassOptions(StringRef Params) {
@@ -1013,13 +1020,13 @@ parseStackLifetimeOptions(StringRef Params) {
10131020
}
10141021

10151022
Expected<bool> parseDependenceAnalysisPrinterOptions(StringRef Params) {
1016-
return parseSinglePassOption(Params, "normalized-results",
1017-
"DependenceAnalysisPrinter");
1023+
return PassBuilder::parseSinglePassOption(Params, "normalized-results",
1024+
"DependenceAnalysisPrinter");
10181025
}
10191026

10201027
Expected<bool> parseSeparateConstOffsetFromGEPPassOptions(StringRef Params) {
1021-
return parseSinglePassOption(Params, "lower-gep",
1022-
"SeparateConstOffsetFromGEP");
1028+
return PassBuilder::parseSinglePassOption(Params, "lower-gep",
1029+
"SeparateConstOffsetFromGEP");
10231030
}
10241031

10251032
Expected<OptimizationLevel>
@@ -1035,13 +1042,13 @@ parseFunctionSimplificationPipelineOptions(StringRef Params) {
10351042
}
10361043

10371044
Expected<bool> parseMemorySSAPrinterPassOptions(StringRef Params) {
1038-
return parseSinglePassOption(Params, "no-ensure-optimized-uses",
1039-
"MemorySSAPrinterPass");
1045+
return PassBuilder::parseSinglePassOption(Params, "no-ensure-optimized-uses",
1046+
"MemorySSAPrinterPass");
10401047
}
10411048

10421049
Expected<bool> parseSpeculativeExecutionPassOptions(StringRef Params) {
1043-
return parseSinglePassOption(Params, "only-if-divergent-target",
1044-
"SpeculativeExecutionPass");
1050+
return PassBuilder::parseSinglePassOption(Params, "only-if-divergent-target",
1051+
"SpeculativeExecutionPass");
10451052
}
10461053

10471054
Expected<std::string> parseMemProfUsePassOptions(StringRef Params) {
@@ -1062,13 +1069,13 @@ Expected<std::string> parseMemProfUsePassOptions(StringRef Params) {
10621069
}
10631070

10641071
Expected<bool> parseStructuralHashPrinterPassOptions(StringRef Params) {
1065-
return parseSinglePassOption(Params, "detailed",
1066-
"StructuralHashPrinterPass");
1072+
return PassBuilder::parseSinglePassOption(Params, "detailed",
1073+
"StructuralHashPrinterPass");
10671074
}
10681075

10691076
Expected<bool> parseWinEHPrepareOptions(StringRef Params) {
1070-
return parseSinglePassOption(Params, "demote-catchswitch-only",
1071-
"WinEHPreparePass");
1077+
return PassBuilder::parseSinglePassOption(Params, "demote-catchswitch-only",
1078+
"WinEHPreparePass");
10721079
}
10731080

10741081
Expected<GlobalMergeOptions> parseGlobalMergeOptions(StringRef Params) {

0 commit comments

Comments
 (0)