@@ -514,6 +514,26 @@ static std::optional<OptimizationLevel> parseOptLevel(StringRef S) {
514
514
.Default (std::nullopt);
515
515
}
516
516
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
+
517
537
namespace {
518
538
519
539
// / Parser of parameters for HardwareLoops pass.
@@ -600,44 +620,29 @@ Expected<LoopUnrollOptions> parseLoopUnrollOptions(StringRef Params) {
600
620
return UnrollOpts;
601
621
}
602
622
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
-
622
623
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" );
624
626
}
625
627
626
628
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" );
628
631
}
629
632
630
633
Expected<bool > parseInlinerPassOptions (StringRef Params) {
631
- return parseSinglePassOption (Params, " only-mandatory" , " InlinerPass" );
634
+ return PassBuilder::parseSinglePassOption (Params, " only-mandatory" ,
635
+ " InlinerPass" );
632
636
}
633
637
634
638
Expected<bool > parseCoroSplitPassOptions (StringRef Params) {
635
- return parseSinglePassOption (Params, " reuse-storage" , " CoroSplitPass" );
639
+ return PassBuilder::parseSinglePassOption (Params, " reuse-storage" ,
640
+ " CoroSplitPass" );
636
641
}
637
642
638
643
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" );
641
646
}
642
647
643
648
Expected<CFGuardPass::Mechanism> parseCFGuardPassOptions (StringRef Params) {
@@ -661,19 +666,21 @@ Expected<CFGuardPass::Mechanism> parseCFGuardPassOptions(StringRef Params) {
661
666
}
662
667
663
668
Expected<bool > parseEarlyCSEPassOptions (StringRef Params) {
664
- return parseSinglePassOption (Params, " memssa" , " EarlyCSE" );
669
+ return PassBuilder:: parseSinglePassOption (Params, " memssa" , " EarlyCSE" );
665
670
}
666
671
667
672
Expected<bool > parseEntryExitInstrumenterPassOptions (StringRef Params) {
668
- return parseSinglePassOption (Params, " post-inline" , " EntryExitInstrumenter" );
673
+ return PassBuilder::parseSinglePassOption (Params, " post-inline" ,
674
+ " EntryExitInstrumenter" );
669
675
}
670
676
671
677
Expected<bool > parseLoopExtractorPassOptions (StringRef Params) {
672
- return parseSinglePassOption (Params, " single" , " LoopExtractor" );
678
+ return PassBuilder:: parseSinglePassOption (Params, " single" , " LoopExtractor" );
673
679
}
674
680
675
681
Expected<bool > parseLowerMatrixIntrinsicsPassOptions (StringRef Params) {
676
- return parseSinglePassOption (Params, " minimal" , " LowerMatrixIntrinsics" );
682
+ return PassBuilder::parseSinglePassOption (Params, " minimal" ,
683
+ " LowerMatrixIntrinsics" );
677
684
}
678
685
679
686
Expected<AddressSanitizerOptions> parseASanPassOptions (StringRef Params) {
@@ -1013,13 +1020,13 @@ parseStackLifetimeOptions(StringRef Params) {
1013
1020
}
1014
1021
1015
1022
Expected<bool > parseDependenceAnalysisPrinterOptions (StringRef Params) {
1016
- return parseSinglePassOption (Params, " normalized-results" ,
1017
- " DependenceAnalysisPrinter" );
1023
+ return PassBuilder:: parseSinglePassOption (Params, " normalized-results" ,
1024
+ " DependenceAnalysisPrinter" );
1018
1025
}
1019
1026
1020
1027
Expected<bool > parseSeparateConstOffsetFromGEPPassOptions (StringRef Params) {
1021
- return parseSinglePassOption (Params, " lower-gep" ,
1022
- " SeparateConstOffsetFromGEP" );
1028
+ return PassBuilder:: parseSinglePassOption (Params, " lower-gep" ,
1029
+ " SeparateConstOffsetFromGEP" );
1023
1030
}
1024
1031
1025
1032
Expected<OptimizationLevel>
@@ -1035,13 +1042,13 @@ parseFunctionSimplificationPipelineOptions(StringRef Params) {
1035
1042
}
1036
1043
1037
1044
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" );
1040
1047
}
1041
1048
1042
1049
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" );
1045
1052
}
1046
1053
1047
1054
Expected<std::string> parseMemProfUsePassOptions (StringRef Params) {
@@ -1062,13 +1069,13 @@ Expected<std::string> parseMemProfUsePassOptions(StringRef Params) {
1062
1069
}
1063
1070
1064
1071
Expected<bool > parseStructuralHashPrinterPassOptions (StringRef Params) {
1065
- return parseSinglePassOption (Params, " detailed" ,
1066
- " StructuralHashPrinterPass" );
1072
+ return PassBuilder:: parseSinglePassOption (Params, " detailed" ,
1073
+ " StructuralHashPrinterPass" );
1067
1074
}
1068
1075
1069
1076
Expected<bool > parseWinEHPrepareOptions (StringRef Params) {
1070
- return parseSinglePassOption (Params, " demote-catchswitch-only" ,
1071
- " WinEHPreparePass" );
1077
+ return PassBuilder:: parseSinglePassOption (Params, " demote-catchswitch-only" ,
1078
+ " WinEHPreparePass" );
1072
1079
}
1073
1080
1074
1081
Expected<GlobalMergeOptions> parseGlobalMergeOptions (StringRef Params) {
0 commit comments