MLIR 22.0.0git
Passes.h
Go to the documentation of this file.
1//===- Passes.h - Pass Entrypoints ------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This header file defines prototypes that expose pass constructors in the loop
10// transformation library.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MLIR_TRANSFORMS_PASSES_H
15#define MLIR_TRANSFORMS_PASSES_H
16
17#include "mlir/Pass/Pass.h"
22#include "llvm/Support/Debug.h"
23#include <limits>
24#include <memory>
25
26namespace mlir {
27
29
30//===----------------------------------------------------------------------===//
31// Passes
32//===----------------------------------------------------------------------===//
33
34#define GEN_PASS_DECL_BUBBLEDOWNMEMORYSPACECASTS
35#define GEN_PASS_DECL_CSE
36#define GEN_PASS_DECL_CANONICALIZER
37#define GEN_PASS_DECL_COMPOSITEFIXEDPOINTPASS
38#define GEN_PASS_DECL_CONTROLFLOWSINK
39#define GEN_PASS_DECL_GENERATERUNTIMEVERIFICATION
40#define GEN_PASS_DECL_LOOPINVARIANTCODEMOTION
41#define GEN_PASS_DECL_INLINER
42#define GEN_PASS_DECL_MEM2REG
43#define GEN_PASS_DECL_PRINTIRPASS
44#define GEN_PASS_DECL_PRINTOPSTATS
45#define GEN_PASS_DECL_REMOVEDEADVALUES
46#define GEN_PASS_DECL_SCCP
47#define GEN_PASS_DECL_SROA
48#define GEN_PASS_DECL_STRIPDEBUGINFO
49#define GEN_PASS_DECL_SYMBOLDCE
50#define GEN_PASS_DECL_SYMBOLPRIVATIZE
51#define GEN_PASS_DECL_TOPOLOGICALSORT
52#include "mlir/Transforms/Passes.h.inc"
53
54/// Creates an instance of the Canonicalizer pass, configured with default
55/// settings (which can be overridden by pass options on the command line).
56std::unique_ptr<Pass> createCanonicalizerPass();
57
58/// Creates an instance of the Canonicalizer pass with the specified config.
59/// `disabledPatterns` is a set of labels used to filter out input patterns with
60/// a debug label or debug name in this set. `enabledPatterns` is a set of
61/// labels used to filter out input patterns that do not have one of the labels
62/// in this set. Debug labels must be set explicitly on patterns or when adding
63/// them with `RewritePatternSet::addWithLabel`. Debug names may be empty, but
64/// patterns created with `RewritePattern::create` have their default debug name
65/// set to their type name.
66std::unique_ptr<Pass>
67createCanonicalizerPass(const GreedyRewriteConfig &config,
68 ArrayRef<std::string> disabledPatterns = {},
69 ArrayRef<std::string> enabledPatterns = {});
70
71/// Creates a pass to perform control-flow sinking.
72std::unique_ptr<Pass> createControlFlowSinkPass();
73
74/// Creates a pass to perform common sub expression elimination.
75std::unique_ptr<Pass> createCSEPass();
76
77/// Creates a pass to print IR on the debug stream.
78std::unique_ptr<Pass> createPrintIRPass(const PrintIRPassOptions & = {});
79
80/// Creates a pass that generates IR to verify ops at runtime.
81std::unique_ptr<Pass> createGenerateRuntimeVerificationPass();
82
83/// Creates a loop invariant code motion pass that hoists loop invariant
84/// instructions out of the loop.
85std::unique_ptr<Pass> createLoopInvariantCodeMotionPass();
86
87/// Creates a pass that hoists loop-invariant subset ops.
88std::unique_ptr<Pass> createLoopInvariantSubsetHoistingPass();
89
90/// Creates a pass to strip debug information from a function.
91std::unique_ptr<Pass> createStripDebugInfoPass();
92
93/// Creates a pass which prints the list of ops and the number of occurrences in
94/// the module.
95std::unique_ptr<Pass> createPrintOpStatsPass(raw_ostream &os = llvm::errs());
96
97/// Creates a pass which prints the list of ops and the number of occurrences in
98/// the module with the output format option.
99std::unique_ptr<Pass> createPrintOpStatsPass(raw_ostream &os, bool printAsJSON);
100
101/// Creates a pass which inlines calls and callable operations as defined by
102/// the CallGraph.
103std::unique_ptr<Pass> createInlinerPass();
104/// Creates an instance of the inliner pass, and use the provided pass managers
105/// when optimizing callable operations with names matching the key type.
106/// Callable operations with a name not within the provided map will use the
107/// default inliner pipeline during optimization.
108std::unique_ptr<Pass>
109createInlinerPass(llvm::StringMap<OpPassManager> opPipelines);
110/// Creates an instance of the inliner pass, and use the provided pass managers
111/// when optimizing callable operations with names matching the key type.
112/// Callable operations with a name not within the provided map will use the
113/// provided default pipeline builder.
114std::unique_ptr<Pass>
115createInlinerPass(llvm::StringMap<OpPassManager> opPipelines,
116 std::function<void(OpPassManager &)> defaultPipelineBuilder);
117
118/// Creates an optimization pass to remove dead values.
119std::unique_ptr<Pass> createRemoveDeadValuesPass();
120
121/// Creates a pass which performs sparse conditional constant propagation over
122/// nested operations.
123std::unique_ptr<Pass> createSCCPPass();
124
125/// Creates a pass which delete symbol operations that are unreachable. This
126/// pass may *only* be scheduled on an operation that defines a SymbolTable.
127std::unique_ptr<Pass> createSymbolDCEPass();
128
129/// Creates a pass which marks top-level symbol operations as `private` unless
130/// listed in `excludeSymbols`.
131std::unique_ptr<Pass>
133
134/// Creates a pass that recursively sorts nested regions without SSA dominance
135/// topologically such that, as much as possible, users of values appear after
136/// their producers.
137std::unique_ptr<Pass> createTopologicalSortPass();
138
139/// Create composite pass, which runs provided set of passes until fixed point
140/// or maximum number of iterations reached.
141std::unique_ptr<Pass> createCompositeFixedPointPass(
142 std::string name, llvm::function_ref<void(OpPassManager &)> populateFunc,
143 int maxIterations = 10);
144
145//===----------------------------------------------------------------------===//
146// Registration
147//===----------------------------------------------------------------------===//
148
149/// Generate the code for registering passes.
150#define GEN_PASS_REGISTRATION
151#include "mlir/Transforms/Passes.h.inc"
152
153} // namespace mlir
154
155#endif // MLIR_TRANSFORMS_PASSES_H
This class allows control over how the GreedyPatternRewriteDriver works.
This class represents a pass manager that runs passes on either a specific operation type,...
Definition PassManager.h:46
Include the generated interface declarations.
std::unique_ptr< Pass > createPrintIRPass(const PrintIRPassOptions &={})
Creates a pass to print IR on the debug stream.
Definition PrintIR.cpp:34
std::unique_ptr< Pass > createCSEPass()
Creates a pass to perform common sub expression elimination.
Definition CSE.cpp:412
std::unique_ptr< Pass > createLoopInvariantCodeMotionPass()
Creates a loop invariant code motion pass that hoists loop invariant instructions out of the loop.
std::unique_ptr< Pass > createStripDebugInfoPass()
Creates a pass to strip debug information from a function.
const FrozenRewritePatternSet GreedyRewriteConfig config
std::unique_ptr< Pass > createTopologicalSortPass()
Creates a pass that recursively sorts nested regions without SSA dominance topologically such that,...
std::unique_ptr< Pass > createCompositeFixedPointPass(std::string name, llvm::function_ref< void(OpPassManager &)> populateFunc, int maxIterations=10)
Create composite pass, which runs provided set of passes until fixed point or maximum number of itera...
std::unique_ptr< Pass > createSCCPPass()
Creates a pass which performs sparse conditional constant propagation over nested operations.
Definition SCCP.cpp:133
std::unique_ptr< Pass > createSymbolDCEPass()
Creates a pass which delete symbol operations that are unreachable.
std::unique_ptr< Pass > createInlinerPass()
Creates a pass which inlines calls and callable operations as defined by the CallGraph.
std::unique_ptr< Pass > createGenerateRuntimeVerificationPass()
Creates a pass that generates IR to verify ops at runtime.
std::unique_ptr< Pass > createCanonicalizerPass()
Creates an instance of the Canonicalizer pass, configured with default settings (which can be overrid...
std::unique_ptr< Pass > createRemoveDeadValuesPass()
Creates an optimization pass to remove dead values.
std::unique_ptr< Pass > createPrintOpStatsPass(raw_ostream &os=llvm::errs())
Creates a pass which prints the list of ops and the number of occurrences in the module.
Definition OpStats.cpp:114
std::unique_ptr< Pass > createControlFlowSinkPass()
Creates a pass to perform control-flow sinking.
std::unique_ptr< Pass > createLoopInvariantSubsetHoistingPass()
Creates a pass that hoists loop-invariant subset ops.
std::unique_ptr< Pass > createSymbolPrivatizePass(ArrayRef< std::string > excludeSymbols={})
Creates a pass which marks top-level symbol operations as private unless listed in excludeSymbols.