33#define GEN_PASS_DEF_SPARSIFICATIONANDBUFFERIZATION
34#include "mlir/Dialect/SparseTensor/Transforms/Passes.h.inc"
60 SparsificationAndBufferizationPass> {
66 bool createSparseDeallocs,
bool enableRuntimeLibrary,
67 bool enableBufferInitialization)
68 : bufferizationOptions(bufferizationOptions),
69 sparsificationOptions(sparsificationOptions),
70 createSparseDeallocs(createSparseDeallocs),
71 enableRuntimeLibrary(enableRuntimeLibrary),
72 enableBufferInitialization(enableBufferInitialization) {}
77 bool createSparseDeallocs,
bool enableRuntimeLibrary,
78 bool enableBufferInitialization,
unsigned vl,
bool vla,
bool index32,
81 : bufferizationOptions(bufferizationOptions),
82 sparsificationOptions(sparsificationOptions),
83 createSparseDeallocs(createSparseDeallocs),
84 enableRuntimeLibrary(enableRuntimeLibrary),
85 enableBufferInitialization(enableBufferInitialization) {
100 bufferizationOptions;
102 updatedOptions.opFilter.denyOperation([&](
Operation *op) {
106 if (
auto funcOp = dyn_cast<func::FuncOp>(op)) {
107 FunctionType funcType = funcOp.getFunctionType();
115 bufferization::BufferizationState bufferizationState;
118 bufferizationState)))
152 bufferization::BufferizationState bufferizationState;
155 getOperation(), bufferizationOptions, bufferizationState)))
161 if (bufferizationOptions.testAnalysisOnly)
173 if (sparsificationOptions.sparseEmitStrategy ==
190 if (enableRuntimeLibrary) {
194 enableBufferInitialization));
209 bool createSparseDeallocs;
210 bool enableRuntimeLibrary;
211 bool enableBufferInitialization;
221 options.bufferizeFunctionBoundaries =
true;
222 options.setFunctionBoundaryTypeConversion(LayoutMapOption::IdentityLayoutMap);
226 return getMemRefTypeWithStaticIdentityLayout(tensorType, memorySpace);
229 options.testAnalysisOnly =
true;
237 options.allowUnknownOps =
true;
243 return std::make_unique<
255 bool createSparseDeallocs,
bool enableRuntimeLibrary,
256 bool enableBufferInitialization,
unsigned vectorLength,
257 bool enableVLAVectorization,
bool enableSIMDIndex32,
bool enableGPULibgen,
260 return std::make_unique<
262 bufferizationOptions, sparsificationOptions, createSparseDeallocs,
263 enableRuntimeLibrary, enableBufferInitialization, vectorLength,
264 enableVLAVectorization, enableSIMDIndex32, enableGPULibgen, emitStrategy,
265 parallelizationStrategy);
static llvm::ManagedStatic< PassManagerOptions > options
Attributes are known-constant values of operations.
void addPass(std::unique_ptr< Pass > pass)
Add the given pass to this pass manager.
void addNestedPass(std::unique_ptr< Pass > pass)
Add the given pass to a nested pass manager for the given operation kind OpT.
Operation is the basic unit of execution within MLIR.
operand_range getOperands()
Returns an iterator on the underlying Value's.
result_range getResults()
LogicalResult runPipeline(OpPassManager &pipeline, Operation *op)
Schedule an arbitrary pass pipeline on the provided operation.
friend class OpPassManager
Allow access to 'clone'.
void signalPassFailure()
Signal that some invariant was broken when running.
Tensor types represent multi-dimensional arrays, and have two variants: RankedTensorType and Unranked...
This class provides an abstraction over the various different ranges of value types.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
::mlir::Pass::Option< mlir::SparseParallelizationStrategy > parallelization
::mlir::Pass::Option< mlir::SparseEmitStrategy > sparseEmitStrategy
::mlir::Pass::Option< bool > enableGPULibgen
::mlir::Pass::Option< bool > enableVLAVectorization
::mlir::Pass::Option< int32_t > vectorLength
::mlir::Pass::Option< bool > enableSIMDIndex32
A pass that lowers tensor ops to memref ops, regardless of whether they are dense or sparse.
SparsificationAndBufferizationPass(const bufferization::OneShotBufferizationOptions &bufferizationOptions, const SparsificationOptions &sparsificationOptions, bool createSparseDeallocs, bool enableRuntimeLibrary, bool enableBufferInitialization, unsigned vl, bool vla, bool index32, bool gpu, SparseEmitStrategy emitStrategy, SparseParallelizationStrategy parallelizationStrategy)
void runOnOperation() override
The polymorphic API that runs the pass over the currently held operation.
LogicalResult runDenseBufferization()
Bufferize all dense ops.
SparsificationAndBufferizationPass(const bufferization::OneShotBufferizationOptions &bufferizationOptions, const SparsificationOptions &sparsificationOptions, bool createSparseDeallocs, bool enableRuntimeLibrary, bool enableBufferInitialization)
llvm::LogicalResult bufferizeModuleOp(Operation *moduleOp, const OneShotBufferizationOptions &options, BufferizationState &state, BufferizationStatistics *statistics=nullptr)
Bufferize an ops nested ops that implement BufferizableOpInterface.
void removeBufferizationAttributesInModule(Operation *moduleOp)
Remove bufferization attributes on every FuncOp arguments in the SymbolTable op.
LogicalResult insertTensorCopies(Operation *op, const OneShotBufferizationOptions &options, const BufferizationState &bufferizationState, BufferizationStatistics *statistics=nullptr)
Resolve RaW and other conflicts by inserting bufferization.alloc_tensor ops.
std::unique_ptr<::mlir::Pass > createEmptyTensorToAllocTensorPass()
static bool containsSparseTensor(TypeRange types)
Return true if one of the given types is a sparse tensor type.
SparseTensorEncodingAttr getSparseTensorEncoding(Type type)
Convenience method to get a sparse encoding attribute from a type.
Include the generated interface declarations.
std::unique_ptr< Pass > createSparseVectorizationPass()
std::unique_ptr< Pass > createLowerSparseOpsToForeachPass()
std::unique_ptr< Pass > createSparseTensorCodegenPass()
std::unique_ptr< Pass > createSparseGPUCodegenPass()
std::unique_ptr< Pass > createSparseSpaceCollapsePass()
std::unique_ptr< Pass > createLoopInvariantCodeMotionPass()
Creates a loop invariant code motion pass that hoists loop invariant instructions out of the loop.
bufferization::OneShotBufferizationOptions getBufferizationOptionsForSparsification(bool analysisOnly)
std::unique_ptr< Pass > createSparseReinterpretMapPass()
std::unique_ptr< Pass > createSparseTensorConversionPass()
std::unique_ptr< Pass > createSparseBufferRewritePass()
std::unique_ptr< Pass > createSparsificationAndBufferizationPass()
SparseParallelizationStrategy
Defines a parallelization strategy.
SparseEmitStrategy
Defines a scope for reinterpret map pass.
std::unique_ptr< Pass > createPreSparsificationRewritePass()
std::unique_ptr< Pass > createLowerForeachToSCFPass()
std::unique_ptr< Pass > createLowerSparseIterationToSCFPass()
std::unique_ptr< Pass > createStageSparseOperationsPass()
std::unique_ptr< Pass > createSparsificationPass()
Options for the Sparsification pass.
Options for analysis-enabled bufferization.