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