MLIR 22.0.0git
Passes.h
Go to the documentation of this file.
1//===- Passes.h - Sparse tensor pass entry points ---------------*- 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 of all sparse tensor passes.
10//
11//===----------------------------------------------------------------------===//
13#ifndef MLIR_DIALECT_SPARSETENSOR_TRANSFORMS_PASSES_H_
14#define MLIR_DIALECT_SPARSETENSOR_TRANSFORMS_PASSES_H_
21//===----------------------------------------------------------------------===//
22// Include the generated pass header (which needs some early definitions).
23//===----------------------------------------------------------------------===//
24
25namespace mlir {
26
27namespace bufferization {
28struct OneShotBufferizationOptions;
29} // namespace bufferization
30
31/// Defines a parallelization strategy. Any independent loop is a candidate
32/// for parallelization. The loop is made parallel if (1) allowed by the
33/// strategy (e.g., AnyStorageOuterLoop considers either a dense or sparse
34/// outermost loop only), and (2) the generated code is an actual for-loop
35/// (and not a co-iterating while-loop).
43
44/// Defines a scope for reinterpret map pass.
46 kAll, // reinterprets all applicable operations
47 kGenericOnly, // reinterprets only linalg.generic
48 kExceptGeneric, // reinterprets operation other than linalg.generic
49};
50
51/// Defines a scope for reinterpret map pass.
53 kFunctional, // generate fully inlined (and functional) sparse iteration
54 kSparseIterator, // generate (experimental) loop using sparse iterator.
55 kDebugInterface, // generate only place-holder for sparse iteration
56};
57
58namespace sparse_tensor {
59
60/// Defines a strategy for loop ordering during sparse code generation.
61/// See Passes.td for strategy descriptions.
62enum class LoopOrderingStrategy : unsigned {
65};
66
67} // namespace sparse_tensor
68
69#define GEN_PASS_DECL
70#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc"
71
72//===----------------------------------------------------------------------===//
73// The SparseAssembler pass.
74//===----------------------------------------------------------------------===//
75
76void populateSparseAssembler(RewritePatternSet &patterns, bool directOut);
77
78std::unique_ptr<Pass> createSparseAssembler();
79std::unique_ptr<Pass> createSparseAssembler(bool directOut);
80
81//===----------------------------------------------------------------------===//
82// The SparseReinterpretMap pass.
83//===----------------------------------------------------------------------===//
84
89
90std::unique_ptr<Pass> createSparseReinterpretMapPass();
91std::unique_ptr<Pass> createSparseReinterpretMapPass(ReinterpretMapScope scope);
92std::unique_ptr<Pass>
95
96//===----------------------------------------------------------------------===//
97// The PreSparsificationRewriting pass.
98//===----------------------------------------------------------------------===//
99
101
102std::unique_ptr<Pass> createPreSparsificationRewritePass();
103
104//===----------------------------------------------------------------------===//
105// The Sparsification pass.
106//===----------------------------------------------------------------------===//
107
108/// Options for the Sparsification pass.
126
127/// Sets up sparsification rewriting rules with the given options.
131
132std::unique_ptr<Pass> createSparsificationPass();
133std::unique_ptr<Pass>
135
136//===----------------------------------------------------------------------===//
137// The StageSparseOperations pass.
138//===----------------------------------------------------------------------===//
139
140/// Sets up StageSparseOperation rewriting rules.
142
143std::unique_ptr<Pass> createStageSparseOperationsPass();
144
145//===----------------------------------------------------------------------===//
146// The LowerSparseOpsToForeach pass.
147//===----------------------------------------------------------------------===//
148
150 bool enableRT, bool enableConvert);
151
152std::unique_ptr<Pass> createLowerSparseOpsToForeachPass();
153std::unique_ptr<Pass> createLowerSparseOpsToForeachPass(bool enableRT,
154 bool enableConvert);
155
156//===----------------------------------------------------------------------===//
157// The LowerForeachToSCF pass.
158//===----------------------------------------------------------------------===//
161
162std::unique_ptr<Pass> createLowerForeachToSCFPass();
163
164//===----------------------------------------------------------------------===//
165// The LowerSparseIterationToSCF pass.
166//===----------------------------------------------------------------------===//
167
168/// Type converter for iter_space and iterator.
172
175
176std::unique_ptr<Pass> createLowerSparseIterationToSCFPass();
177
178//===----------------------------------------------------------------------===//
179// The SparseTensorConversion pass.
180//===----------------------------------------------------------------------===//
181
182/// Sparse tensor type converter into an opaque pointer.
187
188/// Sets up sparse tensor conversion rules.
191
192std::unique_ptr<Pass> createSparseTensorConversionPass();
193
194//===----------------------------------------------------------------------===//
195// The SparseTensorCodegen pass.
196//===----------------------------------------------------------------------===//
197
198/// Sparse tensor type converter into an actual buffer.
203
204/// Sets up sparse tensor codegen rules.
205void populateSparseTensorCodegenPatterns(const TypeConverter &typeConverter,
207 bool createSparseDeallocs,
208 bool enableBufferInitialization);
209
210std::unique_ptr<Pass> createSparseTensorCodegenPass();
211std::unique_ptr<Pass>
212createSparseTensorCodegenPass(bool createSparseDeallocs,
213 bool enableBufferInitialization);
214
215//===----------------------------------------------------------------------===//
216// The SparseBufferRewrite pass.
217//===----------------------------------------------------------------------===//
218
220 bool enableBufferInitialization);
221
222std::unique_ptr<Pass> createSparseBufferRewritePass();
223std::unique_ptr<Pass>
224createSparseBufferRewritePass(bool enableBufferInitialization);
225
226//===----------------------------------------------------------------------===//
227// The SparseVectorization pass.
228//===----------------------------------------------------------------------===//
229
231 unsigned vectorLength,
232 bool enableVLAVectorization,
233 bool enableSIMDIndex32);
234
235std::unique_ptr<Pass> createSparseVectorizationPass();
236std::unique_ptr<Pass> createSparseVectorizationPass(unsigned vectorLength,
237 bool enableVLAVectorization,
238 bool enableSIMDIndex32);
239
240//===----------------------------------------------------------------------===//
241// The SparseGPU pass.
242//===----------------------------------------------------------------------===//
243
245 unsigned numThreads);
246
248 bool enableRT);
249
250std::unique_ptr<Pass> createSparseGPUCodegenPass();
251std::unique_ptr<Pass> createSparseGPUCodegenPass(unsigned numThreads,
252 bool enableRT);
253
254//===----------------------------------------------------------------------===//
255// The SparseStorageSpecifierToLLVM pass.
256//===----------------------------------------------------------------------===//
257
262
265std::unique_ptr<Pass> createStorageSpecifierToLLVMPass();
266
267//===----------------------------------------------------------------------===//
268// The mini-pipeline for sparsification and bufferization.
269//===----------------------------------------------------------------------===//
270
273
274std::unique_ptr<Pass> createSparsificationAndBufferizationPass();
275
276std::unique_ptr<Pass> createSparsificationAndBufferizationPass(
277 const bufferization::OneShotBufferizationOptions &bufferizationOptions,
278 const SparsificationOptions &sparsificationOptions,
279 bool createSparseDeallocs, bool enableRuntimeLibrary,
280 bool enableBufferInitialization, unsigned vectorLength,
281 bool enableVLAVectorization, bool enableSIMDIndex32, bool enableGPULibgen,
282 SparseEmitStrategy emitStrategy,
283 SparseParallelizationStrategy parallelizationStrategy);
284
285//===----------------------------------------------------------------------===//
286// Sparse Iteration Transform Passes
287//===----------------------------------------------------------------------===//
288
289std::unique_ptr<Pass> createSparseSpaceCollapsePass();
290
291//===----------------------------------------------------------------------===//
292// Registration.
293//===----------------------------------------------------------------------===//
294
295/// Generate the code for registering passes.
296#define GEN_PASS_REGISTRATION
297#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc"
298
299} // namespace mlir
300
301#endif // MLIR_DIALECT_SPARSETENSOR_TRANSFORMS_PASSES_H_
true
Given two iterators into the same block, return "true" if a is before `b.
static llvm::ManagedStatic< PassManagerOptions > options
LoopOrderingStrategy
Defines a strategy for loop ordering during sparse code generation.
Definition Passes.h:62
Include the generated interface declarations.
std::unique_ptr< Pass > createSparseVectorizationPass()
std::unique_ptr< Pass > createSparseAssembler()
void populateStorageSpecifierToLLVMPatterns(const TypeConverter &converter, RewritePatternSet &patterns)
std::unique_ptr< Pass > createLowerSparseOpsToForeachPass()
std::unique_ptr< Pass > createSparseTensorCodegenPass()
void populateSparseTensorCodegenPatterns(const TypeConverter &typeConverter, RewritePatternSet &patterns, bool createSparseDeallocs, bool enableBufferInitialization)
Sets up sparse tensor codegen rules.
std::unique_ptr< Pass > createSparseGPUCodegenPass()
std::unique_ptr< Pass > createSparseSpaceCollapsePass()
bufferization::OneShotBufferizationOptions getBufferizationOptionsForSparsification(bool analysisOnly)
std::unique_ptr< Pass > createSparseReinterpretMapPass()
void populateSparseGPULibgenPatterns(RewritePatternSet &patterns, bool enableRT)
std::unique_ptr< Pass > createSparseTensorConversionPass()
std::unique_ptr< Pass > createSparseBufferRewritePass()
std::unique_ptr< Pass > createSparsificationAndBufferizationPass()
void populateSparseTensorConversionPatterns(const TypeConverter &typeConverter, RewritePatternSet &patterns)
Sets up sparse tensor conversion rules.
void populateSparseBufferRewriting(RewritePatternSet &patterns, bool enableBufferInitialization)
void populatePreSparsificationRewriting(RewritePatternSet &patterns)
void populateSparseVectorizationPatterns(RewritePatternSet &patterns, unsigned vectorLength, bool enableVLAVectorization, bool enableSIMDIndex32)
Populates the given patterns list with vectorization rules.
SparseParallelizationStrategy
Defines a parallelization strategy.
Definition Passes.h:36
ReinterpretMapScope
Defines a scope for reinterpret map pass.
Definition Passes.h:45
void populateSparsificationPatterns(RewritePatternSet &patterns, const SparsificationOptions &options=SparsificationOptions())
Sets up sparsification rewriting rules with the given options.
const FrozenRewritePatternSet & patterns
void populateLowerSparseIterationToSCFPatterns(const TypeConverter &converter, RewritePatternSet &patterns)
SparseEmitStrategy
Defines a scope for reinterpret map pass.
Definition Passes.h:52
void populateLowerSparseOpsToForeachPatterns(RewritePatternSet &patterns, bool enableRT, bool enableConvert)
std::unique_ptr< Pass > createStorageSpecifierToLLVMPass()
std::unique_ptr< Pass > createPreSparsificationRewritePass()
std::unique_ptr< Pass > createLowerForeachToSCFPass()
void populateSparseAssembler(RewritePatternSet &patterns, bool directOut)
void populateStageSparseOperationsPatterns(RewritePatternSet &patterns)
Sets up StageSparseOperation rewriting rules.
std::unique_ptr< Pass > createLowerSparseIterationToSCFPass()
void populateSparseGPUCodegenPatterns(RewritePatternSet &patterns, unsigned numThreads)
std::unique_ptr< Pass > createStageSparseOperationsPass()
std::unique_ptr< Pass > createSparsificationPass()
void populateSparseReinterpretMap(RewritePatternSet &patterns, ReinterpretMapScope scope, sparse_tensor::LoopOrderingStrategy strategy=sparse_tensor::LoopOrderingStrategy::kDefault)
void populateLowerForeachToSCFPatterns(RewritePatternSet &patterns)
Options for the Sparsification pass.
Definition Passes.h:109
SparseEmitStrategy sparseEmitStrategy
Definition Passes.h:123
SparseParallelizationStrategy parallelizationStrategy
Definition Passes.h:122
SparsificationOptions(SparseParallelizationStrategy p, SparseEmitStrategy d, bool enableRT)
Definition Passes.h:110
SparsificationOptions(SparseParallelizationStrategy p, bool enableRT)
Definition Passes.h:115
Options for analysis-enabled bufferization.