19#define GEN_PASS_DEF_COMPOSITEFIXEDPOINTPASS
20#include "mlir/Transforms/Passes.h.inc"
26struct CompositeFixedPointPass final
28 using CompositeFixedPointPassBase::CompositeFixedPointPassBase;
30 CompositeFixedPointPass(
31 std::string name_, llvm::function_ref<
void(OpPassManager &)> populateFunc,
33 name = std::move(name_);
34 maxIter = maxIterations;
35 populateFunc(dynamicPM);
37 llvm::raw_string_ostream os(pipelineStr);
40 [&]() { os <<
","; });
43 LogicalResult initializeOptions(
45 function_ref<LogicalResult(
const Twine &)> errorHandler)
override {
46 if (
failed(CompositeFixedPointPassBase::initializeOptions(
options,
51 return errorHandler(
"Failed to parse composite pass pipeline");
56 LogicalResult
initialize(MLIRContext *context)
override {
58 return emitError(UnknownLoc::get(context))
59 <<
"Invalid maxIterations value: " << maxIter <<
"\n";
64 void getDependentDialects(DialectRegistry ®istry)
const override {
65 dynamicPM.getDependentDialects(registry);
68 void runOnOperation()
override {
69 auto *op = getOperation();
70 OperationFingerPrint fp(op);
73 int maxIterVal = maxIter;
75 if (
failed(runPipeline(dynamicPM, op)))
76 return signalPassFailure();
78 if (currentIter++ >= maxIterVal) {
79 op->emitWarning(
"Composite pass \"" + llvm::Twine(name) +
80 "\"+ didn't converge in " + llvm::Twine(maxIterVal) +
85 OperationFingerPrint newFp(op);
94 llvm::StringRef getName()
const override {
return name; }
97 OpPassManager dynamicPM;
105 return std::make_unique<CompositeFixedPointPass>(std::move(name),
106 populateFunc, maxIterations);
LogicalResult initialize(unsigned origNumLoops, ArrayRef< ReassociationIndices > foldedIterationDims)
static llvm::ManagedStatic< PassManagerOptions > options
This class represents a pass manager that runs passes on either a specific operation type,...
void printAsTextualPipeline(raw_ostream &os, bool pretty=false)
Prints out the pass in the textual representation of pipelines.
Include the generated interface declarations.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
std::unique_ptr<::mlir::Pass > createCompositeFixedPointPass()
LogicalResult parsePassPipeline(StringRef pipeline, OpPassManager &pm, raw_ostream &errorStream=llvm::errs())
Parse the textual representation of a pass pipeline, adding the result to 'pm' on success.
llvm::function_ref< Fn > function_ref