@@ -92,21 +92,28 @@ void populateVectorPasses(mlir::OpPassManager &pm) {
92
92
93
93
// scf + arith + math + vector + memref + linalg.brgemm
94
94
void populateBufferizationPasses (mlir::OpPassManager &pm) {
95
+ // The flow follows https://mlir.llvm.org/docs/Bufferization/#overview
96
+ pm.addPass (bufferization::createEmptyTensorEliminationPass ());
95
97
bufferization::OneShotBufferizationOptions options;
96
98
options.bufferizeFunctionBoundaries = true ;
97
99
options.setFunctionBoundaryTypeConversion (
98
100
bufferization::LayoutMapOption::IdentityLayoutMap);
99
101
pm.addPass (bufferization::createOneShotBufferizePass (options));
100
102
pm.addPass (createCanonicalizerPass ());
101
103
pm.addPass (createCSEPass ());
104
+ pm.addPass (createCanonicalizerPass ());
105
+ pm.addNestedPass <func::FuncOp>(bufferization::createBufferHoistingPass ());
106
+ pm.addNestedPass <func::FuncOp>(bufferization::createBufferLoopHoistingPass ());
107
+ // todo: buffer schedule pass
108
+ // todo: Need to improve this pass to support nested parallel.
102
109
bufferization::BufferResultsToOutParamsOpts opt{};
103
110
opt.hoistStaticAllocs = true ;
104
111
pm.addPass (bufferization::createBufferResultsToOutParamsPass (opt));
105
- // todo: buffer schedule pass
106
- // todo: Need to improve this pass to support nested parallel.
107
- pm. addNestedPass <func::FuncOp>( bufferization::createBufferHoistingPass ());
108
- pm. addNestedPass <func::FuncOp>( bufferization::createBufferLoopHoistingPass ()) ;
109
- pm. addNestedPass <func::FuncOp>( bufferization::createBufferDeallocationPass () );
112
+ pm. addPass ( bufferization::createDropEquivalentBufferResultsPass ());
113
+ pm. addNestedPass <func::FuncOp>(
114
+ bufferization::createPromoteBuffersToStackPass ());
115
+ bufferization::BufferDeallocationPipelineOptions deallocOption ;
116
+ bufferization::buildBufferDeallocationPipeline (pm, deallocOption );
110
117
pm.addPass (createBufferizationToMemRefPass ());
111
118
populateCleanUpPasses (pm);
112
119
}
0 commit comments