Move peephole optimization at the top of the flow pipeline (#7058)
- Drop `-iree-flow-enable-1x1-conv-to-matmul` as it was true by default.
- Move the linalg -> linalg peephole optimizations passes to the top of the flow pipeline.
diff --git a/iree/compiler/Dialect/Flow/Transforms/Passes.cpp b/iree/compiler/Dialect/Flow/Transforms/Passes.cpp
index fd90e92..d005ef7 100644
--- a/iree/compiler/Dialect/Flow/Transforms/Passes.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/Passes.cpp
@@ -37,12 +37,6 @@
"unconditionally before main flow conversions"),
llvm::cl::init(false));
-static llvm::cl::opt<bool> clEnable1x1ConvToMatmul(
- "iree-flow-enable-1x1-conv-to-matmul",
- llvm::cl::desc("Enable converting 1x1 linalg convolution ops to linalg "
- "matmul ops pass."),
- llvm::cl::init(true));
-
static llvm::cl::opt<bool> clEnableConvToImg2Col(
"iree-flow-enable-conv-img2col-transform",
llvm::cl::desc("Enable converting convolution ops to img2col form."),
@@ -73,6 +67,19 @@
namespace Flow {
void buildFlowTransformPassPipeline(OpPassManager &passManager) {
+ // Special case peephole optimizations.
+ {
+ passManager.addNestedPass<FuncOp>(createConvertConv2D1x1ToMatmulPass());
+ if (clEnableConvToImg2Col) {
+ passManager.addNestedPass<FuncOp>(createConvertConv2DToImg2ColPass());
+ }
+ // Pad linalg op
+ if (clEnablePaddingLinalgOps) {
+ passManager.addNestedPass<FuncOp>(
+ createPadLinalgOpsToIntegerMultiplePass(clLinalgOpsPaddingSize));
+ }
+ }
+
passManager.addNestedPass<mlir::FuncOp>(createVerifyInputLegalityPass());
// Simplify util.global accesses early on; this can help with dispatch
@@ -101,20 +108,6 @@
// previous pass.
passManager.addPass(Shape::createExpandFunctionDynamicDimsPass());
- // Special case peephole optimizations.
- {
- if (clEnable1x1ConvToMatmul) {
- passManager.addNestedPass<FuncOp>(createConvertConv2D1x1ToMatmulPass());
- }
- if (clEnableConvToImg2Col) {
- passManager.addNestedPass<FuncOp>(createConvertConv2DToImg2ColPass());
- }
- // Pad linalg op
- if (clEnablePaddingLinalgOps) {
- passManager.addNestedPass<FuncOp>(
- createPadLinalgOpsToIntegerMultiplePass(clLinalgOpsPaddingSize));
- }
- }
passManager.addPass(createPadTensorToSubTensorInsertPass());
// Elementwise, fusion, tiling and distribution.