Skip to content

Commit

Permalink
[DispatchCreation] Run preprocessing before elementwise fusion (#18920)
Browse files Browse the repository at this point in the history
I think it makes sense to run `FusionPreprocessingPass` before
`ElementwiseOpFusionPass` because it helps put the IR in a better state
for fusion (e.g. interchanging `linalg.generic` indexing maps). But
also, reshapes have been propagated to the edges of the program, which
allows the `GatherFusionPattern` to be more effective.


Fixes compilation error from
#17226 (comment).

---------

Signed-off-by: Ian Wood <[email protected]>
  • Loading branch information
IanWood1 authored Oct 29, 2024
1 parent 3b69679 commit fa752ae
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions compiler/src/iree/compiler/DispatchCreation/Passes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,12 @@ static void addCleanupPatterns(OpPassManager &passManager) {
//===----------------------------------------------------------------------===//

void addDispatchRegionCreationPreprocessingPasses(OpPassManager &passManager) {
// 1. Do some simple elementwise op fusion. This could be skipped,
// but could reduce the surface area of ops to handle later.
FunctionLikeNest(passManager)
.addPass(IREE::Flow::createCanonicalizerPass)
.addPass(mlir::createCSEPass)
.addPass(DispatchCreation::createFusionPreprocessingPass)
// 1. Do some simple elementwise op fusion. This could be skipped,
// but could reduce the surface area of ops to handle later.
.addPass([]() {
return DispatchCreation::createElementwiseOpFusionPass(
ElementwiseOpFusionPassOptions{
Expand All @@ -148,6 +151,7 @@ void addDispatchRegionCreationPreprocessingPasses(OpPassManager &passManager) {

// 3. Perform elementwise operation fusion again (now with higher
// dimensionality).
.addPass(DispatchCreation::createFusionPreprocessingPass)
.addPass([]() {
return DispatchCreation::createElementwiseOpFusionPass(
ElementwiseOpFusionPassOptions{
Expand Down Expand Up @@ -294,12 +298,6 @@ void buildDispatchCreationPassPipeline(
IREE::Util::createFixedPointIteratorPass(std::move(ipoPipeline)));
}

FunctionLikeNest(passManager)
// Preprocess the input to a form more amenable for fusion.
.addPass(DispatchCreation::createFusionPreprocessingPass)
.addPass(IREE::Flow::createCanonicalizerPass)
.addPass(mlir::createCSEPass);

addDispatchRegionCreationPreprocessingPasses(passManager);
addDispatchRegionCreationPasses(passManager);

Expand Down

0 comments on commit fa752ae

Please sign in to comment.