[Reducer] Improve simplification for reducing strategies (#15080)
This patch makes the existing reducing strategies produce smaller code.
Without this patch, unused private dispatches are left in the final
output along with other dead code.
diff --git a/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchOperandToResult.cpp b/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchOperandToResult.cpp
index d0477a9..22b8db3 100644
--- a/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchOperandToResult.cpp
+++ b/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchOperandToResult.cpp
@@ -42,16 +42,18 @@
return;
}
- // Replace all dispatch ops with random inputs.
+ // Replace all dispatch ops with the chosen operand.
for (auto [result, operand] : resultToOperand) {
result.replaceAllUsesWith(operand);
}
- // Simplify.
PassManager pm(module.getContext());
- pm.addPass(createCanonicalizerPass());
+ // Dead code eliminate the dispatch ops.
pm.addPass(createCSEPass());
+ // Dead code eliminate the weights.
pm.addPass(createSymbolDCEPass());
+ // Canonicalize the module.
+ pm.addPass(createCanonicalizerPass());
if (failed(pm.run(module))) {
return;
}
diff --git a/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchResultBySplat.cpp b/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchResultBySplat.cpp
index f954e80..c90f0fe 100644
--- a/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchResultBySplat.cpp
+++ b/compiler/src/iree/compiler/Reducer/Strategies/ReduceFlowDispatchResultBySplat.cpp
@@ -80,4 +80,17 @@
// Erase the dispatch.
dispatch.erase();
}
+
+ PassManager pm(module.getContext());
+ // Dead code eliminate the dispatch ops.
+ pm.addPass(createCSEPass());
+ // Dead code eliminate globals.
+ pm.addPass(createSymbolDCEPass());
+ // Canonicalize so that the splats are fused with reshapes.
+ pm.addPass(createCanonicalizerPass());
+ // CSE again to de-duplicate splats.
+ pm.addPass(createCSEPass());
+ if (failed(pm.run(module))) {
+ return;
+ }
}
diff --git a/compiler/src/iree/compiler/Reducer/Strategies/ReduceLinalgOnTensorsDelta.cpp b/compiler/src/iree/compiler/Reducer/Strategies/ReduceLinalgOnTensorsDelta.cpp
index 2b755b8..d85c990 100644
--- a/compiler/src/iree/compiler/Reducer/Strategies/ReduceLinalgOnTensorsDelta.cpp
+++ b/compiler/src/iree/compiler/Reducer/Strategies/ReduceLinalgOnTensorsDelta.cpp
@@ -121,8 +121,12 @@
}
PassManager pm(module.getContext());
- pm.addPass(createCanonicalizerPass());
+ // Dead code eliminate.
pm.addPass(createCSEPass());
+ // De-duplicate identical fills.
+ pm.addPass(createCanonicalizerPass());
+ // Remove dead globals.
+ pm.addPass(createSymbolDCEPass());
if (failed(pm.run(module)))
return;
}