MLIR 23.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.
67
68} // namespace sparse_tensor
69
70#define GEN_PASS_DECL
71#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc"
72
73//===----------------------------------------------------------------------===//
74// The SparseAssembler pass.
75//===----------------------------------------------------------------------===//
76
77void populateSparseAssembler(RewritePatternSet &patterns, bool directOut);
78
79std::unique_ptr<Pass> createSparseAssembler();
80std::unique_ptr<Pass> createSparseAssembler(bool directOut);
81
82//===----------------------------------------------------------------------===//
83// The SparseReinterpretMap pass.
84//===----------------------------------------------------------------------===//
85
90
91std::unique_ptr<Pass> createSparseReinterpretMapPass();
92std::unique_ptr<Pass> createSparseReinterpretMapPass(ReinterpretMapScope scope);
93std::unique_ptr<Pass>
96
97//===----------------------------------------------------------------------===//
98// The PreSparsificationRewriting pass.
99//===----------------------------------------------------------------------===//
100
102
103std::unique_ptr<Pass> createPreSparsificationRewritePass();
104
105//===----------------------------------------------------------------------===//
106// The Sparsification pass.
107//===----------------------------------------------------------------------===//
108
109/// Options for the Sparsification pass.
127
128/// Sets up sparsification rewriting rules with the given options.
130 RewritePatternSet &patterns,
132
133std::unique_ptr<Pass> createSparsificationPass();
134std::unique_ptr<Pass>
136
137//===----------------------------------------------------------------------===//
138// The StageSparseOperations pass.
139//===----------------------------------------------------------------------===//
140
141/// Sets up StageSparseOperation rewriting rules.
143
144std::unique_ptr<Pass> createStageSparseOperationsPass();
145
146//===----------------------------------------------------------------------===//
147// The LowerSparseOpsToForeach pass.
148//===----------------------------------------------------------------------===//
149
151 bool enableRT, bool enableConvert);
152
153std::unique_ptr<Pass> createLowerSparseOpsToForeachPass();
154std::unique_ptr<Pass> createLowerSparseOpsToForeachPass(bool enableRT,
155 bool enableConvert);
156
157//===----------------------------------------------------------------------===//
158// The LowerForeachToSCF pass.
159//===----------------------------------------------------------------------===//
160
162
163std::unique_ptr<Pass> createLowerForeachToSCFPass();
164
165//===----------------------------------------------------------------------===//
166// The LowerSparseIterationToSCF pass.
167//===----------------------------------------------------------------------===//
168
169/// Type converter for iter_space and iterator.
173
175 RewritePatternSet &patterns);
176
177std::unique_ptr<Pass> createLowerSparseIterationToSCFPass();
178
179//===----------------------------------------------------------------------===//
180// The SparseTensorConversion pass.
181//===----------------------------------------------------------------------===//
182
183/// Sparse tensor type converter into an opaque pointer.
188
189/// Sets up sparse tensor conversion rules.
191 RewritePatternSet &patterns);
192
193std::unique_ptr<Pass> createSparseTensorConversionPass();
194
195//===----------------------------------------------------------------------===//
196// The SparseTensorCodegen pass.
197//===----------------------------------------------------------------------===//
198
199/// Sparse tensor type converter into an actual buffer.
204
205/// Sets up sparse tensor codegen rules.
206void populateSparseTensorCodegenPatterns(const TypeConverter &typeConverter,
207 RewritePatternSet &patterns,
208 bool createSparseDeallocs,
209 bool enableBufferInitialization);
210
211std::unique_ptr<Pass> createSparseTensorCodegenPass();
212std::unique_ptr<Pass>
213createSparseTensorCodegenPass(bool createSparseDeallocs,
214 bool enableBufferInitialization);
215
216//===----------------------------------------------------------------------===//
217// The SparseBufferRewrite pass.
218//===----------------------------------------------------------------------===//
219
221 bool enableBufferInitialization);
222
223std::unique_ptr<Pass> createSparseBufferRewritePass();
224std::unique_ptr<Pass>
225createSparseBufferRewritePass(bool enableBufferInitialization);
226
227//===----------------------------------------------------------------------===//
228// The SparseVectorization pass.
229//===----------------------------------------------------------------------===//
230
232 unsigned vectorLength,
233 bool enableVLAVectorization,
234 bool enableSIMDIndex32);
235
236std::unique_ptr<Pass> createSparseVectorizationPass();
237std::unique_ptr<Pass> createSparseVectorizationPass(unsigned vectorLength,
238 bool enableVLAVectorization,
239 bool enableSIMDIndex32);
240
241//===----------------------------------------------------------------------===//
242// The SparseGPU pass.
243//===----------------------------------------------------------------------===//
244
246 unsigned numThreads);
247
249 bool enableRT);
250
251std::unique_ptr<Pass> createSparseGPUCodegenPass();
252std::unique_ptr<Pass> createSparseGPUCodegenPass(unsigned numThreads,
253 bool enableRT);
254
255//===----------------------------------------------------------------------===//
256// The SparseStorageSpecifierToLLVM pass.
257//===----------------------------------------------------------------------===//
258
263
265 RewritePatternSet &patterns);
266std::unique_ptr<Pass> createStorageSpecifierToLLVMPass();
267
268//===----------------------------------------------------------------------===//
269// The mini-pipeline for sparsification and bufferization.
270//===----------------------------------------------------------------------===//
271
274
275std::unique_ptr<Pass> createSparsificationAndBufferizationPass();
276
277std::unique_ptr<Pass> createSparsificationAndBufferizationPass(
278 const bufferization::OneShotBufferizationOptions &bufferizationOptions,
279 const SparsificationOptions &sparsificationOptions,
280 bool createSparseDeallocs, bool enableRuntimeLibrary,
281 bool enableBufferInitialization, unsigned vectorLength,
282 bool enableVLAVectorization, bool enableSIMDIndex32, bool enableGPULibgen,
283 SparseEmitStrategy emitStrategy,
284 SparseParallelizationStrategy parallelizationStrategy);
285
286//===----------------------------------------------------------------------===//
287// Sparse Iteration Transform Passes
288//===----------------------------------------------------------------------===//
289
290std::unique_ptr<Pass> createSparseSpaceCollapsePass();
291
292//===----------------------------------------------------------------------===//
293// Registration.
294//===----------------------------------------------------------------------===//
295
296/// Generate the code for registering passes.
297#define GEN_PASS_REGISTRATION
298#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc"
299
300} // namespace mlir
301
302#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.
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:110
SparseEmitStrategy sparseEmitStrategy
Definition Passes.h:124
SparseParallelizationStrategy parallelizationStrategy
Definition Passes.h:123
SparsificationOptions(SparseParallelizationStrategy p, SparseEmitStrategy d, bool enableRT)
Definition Passes.h:111
SparsificationOptions(SparseParallelizationStrategy p, bool enableRT)
Definition Passes.h:116
Options for analysis-enabled bufferization.