diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 34 | ||||
| -rw-r--r-- | llvm/lib/Passes/PassRegistry.def | 6 | 
2 files changed, 39 insertions, 1 deletions
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index a36956e121c..b26ee96092d 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -1422,6 +1422,40 @@ Expected<MemorySanitizerOptions> parseMSanPassOptions(StringRef Params) {    return Result;  } +/// Parser of parameters for SimplifyCFG pass. +Expected<SimplifyCFGOptions> parseSimplifyCFGOptions(StringRef Params) { +  SimplifyCFGOptions Result; +  while (!Params.empty()) { +    StringRef ParamName; +    std::tie(ParamName, Params) = Params.split(';'); + +    bool Enable = !ParamName.consume_front("no-"); +    if (ParamName == "forward-switch-cond") { +      Result.forwardSwitchCondToPhi(Enable); +    } else if (ParamName == "switch-to-lookup") { +      Result.convertSwitchToLookupTable(Enable); +    } else if (ParamName == "keep-loops") { +      Result.needCanonicalLoops(Enable); +    } else if (ParamName == "sink-common-insts") { +      Result.sinkCommonInsts(Enable); +    } else if (Enable && ParamName.consume_front("bonus-inst-threshold=")) { +      APInt BonusInstThreshold; +      if (ParamName.getAsInteger(0, BonusInstThreshold)) +        return make_error<StringError>( +            formatv("invalid argument to SimplifyCFG pass bonus-threshold " +                    "parameter: '{0}' ", +                    ParamName).str(), +            inconvertibleErrorCode()); +      Result.bonusInstThreshold(BonusInstThreshold.getSExtValue()); +    } else { +      return make_error<StringError>( +          formatv("invalid SimplifyCFG pass parameter '{0}' ", ParamName).str(), +          inconvertibleErrorCode()); +    } +  } +  return Result; +} +  } // namespace  /// Tests whether a pass name starts with a valid prefix for a default pipeline diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index 518b10dc5d5..781d6d850bb 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -218,7 +218,6 @@ FUNCTION_PASS("print<stack-safety-local>", StackSafetyPrinterPass(dbgs()))  FUNCTION_PASS("reassociate", ReassociatePass())  FUNCTION_PASS("scalarizer", ScalarizerPass())  FUNCTION_PASS("sccp", SCCPPass()) -FUNCTION_PASS("simplify-cfg", SimplifyCFGPass())  FUNCTION_PASS("sink", SinkingPass())  FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())  FUNCTION_PASS("speculative-execution", SpeculativeExecutionPass()) @@ -253,6 +252,11 @@ FUNCTION_PASS_WITH_PARAMS("msan",                               return MemorySanitizerPass(Opts);                             },                             parseMSanPassOptions) +FUNCTION_PASS_WITH_PARAMS("simplify-cfg", +                           [](SimplifyCFGOptions Opts) { +                             return SimplifyCFGPass(Opts); +                           }, +                           parseSimplifyCFGOptions)  #undef FUNCTION_PASS_WITH_PARAMS  #ifndef LOOP_ANALYSIS  | 

