summaryrefslogtreecommitdiff
path: root/llvm/lib/Passes/PassBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Passes/PassBuilder.cpp')
-rw-r--r--llvm/lib/Passes/PassBuilder.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index b7edeea08276..8cf277657a54 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -69,6 +69,7 @@
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
+#include "llvm/Analysis/ScalarEvolutionDivision.h"
#include "llvm/Analysis/ScopedNoAliasAA.h"
#include "llvm/Analysis/StackLifetime.h"
#include "llvm/Analysis/StackSafetyAnalysis.h"
@@ -184,6 +185,7 @@
#include "llvm/IR/Verifier.h"
#include "llvm/IRPrinter/IRPrintingPasses.h"
#include "llvm/Passes/OptimizationLevel.h"
+#include "llvm/Support/CodeGen.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
@@ -1491,6 +1493,27 @@ parseBoundsCheckingOptions(StringRef Params) {
return Options;
}
+Expected<CodeGenOptLevel> parseExpandFpOptions(StringRef Param) {
+ if (Param.empty())
+ return CodeGenOptLevel::None;
+
+ // Parse a CodeGenOptLevel, e.g. "O1", "O2", "O3".
+ auto [Prefix, Digit] = Param.split('O');
+
+ uint8_t N;
+ if (!Prefix.empty() || Digit.getAsInteger(10, N))
+ return createStringError("invalid expand-fp pass parameter '%s'",
+ Param.str().c_str());
+
+ std::optional<CodeGenOptLevel> Level = CodeGenOpt::getLevel(N);
+ if (!Level.has_value())
+ return createStringError(
+ "invalid optimization level for expand-fp pass: %s",
+ Digit.str().c_str());
+
+ return *Level;
+}
+
Expected<RAGreedyPass::Options>
parseRegAllocGreedyFilterFunc(PassBuilder &PB, StringRef Params) {
if (Params.empty() || Params == "all")