@@ -92,21 +92,28 @@ void populateVectorPasses(mlir::OpPassManager &pm) {
9292
9393// scf + arith + math + vector + memref + linalg.brgemm
9494void populateBufferizationPasses (mlir::OpPassManager &pm) {
95+ // The flow follows https://mlir.llvm.org/docs/Bufferization/#overview
96+ pm.addPass (bufferization::createEmptyTensorEliminationPass ());
9597 bufferization::OneShotBufferizationOptions options;
9698 options.bufferizeFunctionBoundaries = true ;
9799 options.setFunctionBoundaryTypeConversion (
98100 bufferization::LayoutMapOption::IdentityLayoutMap);
99101 pm.addPass (bufferization::createOneShotBufferizePass (options));
100102 pm.addPass (createCanonicalizerPass ());
101103 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.
102109 bufferization::BufferResultsToOutParamsOpts opt{};
103110 opt.hoistStaticAllocs = true ;
104111 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 );
110117 pm.addPass (createBufferizationToMemRefPass ());
111118 populateCleanUpPasses (pm);
112119}
0 commit comments