Changeset View
Changeset View
Standalone View
Standalone View
mlir/lib/Dialect/SparseTensor/Pipelines/SparseTensorPipelines.cpp
Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | |||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// Pipeline implementation. | // Pipeline implementation. | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
void mlir::sparse_tensor::buildSparseCompiler( | void mlir::sparse_tensor::buildSparseCompiler( | ||||
OpPassManager &pm, const SparseCompilerOptions &options) { | OpPassManager &pm, const SparseCompilerOptions &options) { | ||||
pm.addNestedPass<func::FuncOp>(createLinalgGeneralizationPass()); | pm.addNestedPass<func::FuncOp>(createLinalgGeneralizationPass()); | ||||
pm.addPass( | pm.addPass(createSparsificationAndBufferizationPass( | ||||
bufferization::createTensorCopyInsertionPass(getBufferizationOptions( | getBufferizationOptions(options.testBufferizationAnalysisOnly), | ||||
/*analysisOnly=*/options.testBufferizationAnalysisOnly))); | options.sparsificationOptions(), options.sparseTensorConversionOptions(), | ||||
options.enableRuntimeLibrary, options.enableBufferInitialization)); | |||||
if (options.testBufferizationAnalysisOnly) | if (options.testBufferizationAnalysisOnly) | ||||
return; | return; | ||||
pm.addPass(createPreSparsificationRewritePass()); | |||||
aartbik: At very first glance, I am a bit -1 on moving these passes out of the pipeline into a… | |||||
pm.addPass(createSparsificationPass(options.sparsificationOptions())); | |||||
pm.addPass(createPostSparsificationRewritePass(options.enableRuntimeLibrary)); | |||||
if (options.enableRuntimeLibrary) { | |||||
pm.addPass(createSparseTensorConversionPass( | |||||
options.sparseTensorConversionOptions())); | |||||
} else { | |||||
pm.addPass( | |||||
createSparseTensorCodegenPass(options.enableBufferInitialization)); | |||||
pm.addPass( | |||||
createSparseBufferRewritePass(options.enableBufferInitialization)); | |||||
} | |||||
pm.addPass(createDenseBufferizationPass( | |||||
getBufferizationOptions(/*analysisOnly=*/false))); | |||||
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass()); | pm.addNestedPass<func::FuncOp>(createCanonicalizerPass()); | ||||
I wonder if this is still relevant here? Before this differential this conditional bailed out before doing all our various sparse passes, but now it's only doing so after all of SparseBufferizationPass. So I'm thinking the conditional should either be moved into SparseBufferizationPass or else removed entirely wrengr: I wonder if this is still relevant here? Before this differential this conditional bailed out… | |||||
pm.addNestedPass<func::FuncOp>( | pm.addNestedPass<func::FuncOp>( | ||||
mlir::bufferization::createFinalizingBufferizePass()); | mlir::bufferization::createFinalizingBufferizePass()); | ||||
// TODO(springerm): Add sparse support to the BufferDeallocation pass and add | // TODO(springerm): Add sparse support to the BufferDeallocation pass and add | ||||
// it to this pipeline. | // it to this pipeline. | ||||
pm.addNestedPass<func::FuncOp>(createConvertLinalgToLoopsPass()); | pm.addNestedPass<func::FuncOp>(createConvertLinalgToLoopsPass()); | ||||
pm.addNestedPass<func::FuncOp>(createConvertVectorToSCFPass()); | pm.addNestedPass<func::FuncOp>(createConvertVectorToSCFPass()); | ||||
pm.addNestedPass<func::FuncOp>(createConvertSCFToCFPass()); | pm.addNestedPass<func::FuncOp>(createConvertSCFToCFPass()); | ||||
pm.addPass(createLowerAffinePass()); | pm.addPass(createLowerAffinePass()); | ||||
Show All 24 Lines |
At very first glance, I am a bit -1 on moving these passes out of the pipeline into a bufferization pass.
I understand why you are doing this but is there any way you can still do this while not breaking this flow here?