[GlobalOpt] Unset encodings for non-CPU backends. (#15453)
This is a step toward turning data-tiling on by default.
diff --git a/compiler/src/iree/compiler/GlobalOptimization/BUILD.bazel b/compiler/src/iree/compiler/GlobalOptimization/BUILD.bazel
index 4700c4d..5d176a4 100644
--- a/compiler/src/iree/compiler/GlobalOptimization/BUILD.bazel
+++ b/compiler/src/iree/compiler/GlobalOptimization/BUILD.bazel
@@ -60,6 +60,7 @@
deps = [
":PassHeaders",
":PassesIncGen",
+ "//compiler/src/iree/compiler/Codegen/Common",
"//compiler/src/iree/compiler/Codegen/Common/CPU:CommonCPUPasses",
"//compiler/src/iree/compiler/Dialect/Flow/IR",
"//compiler/src/iree/compiler/Dialect/Flow/Transforms",
diff --git a/compiler/src/iree/compiler/GlobalOptimization/CMakeLists.txt b/compiler/src/iree/compiler/GlobalOptimization/CMakeLists.txt
index 4d2eb4e..73aa647 100644
--- a/compiler/src/iree/compiler/GlobalOptimization/CMakeLists.txt
+++ b/compiler/src/iree/compiler/GlobalOptimization/CMakeLists.txt
@@ -73,6 +73,7 @@
MLIRTensorTransforms
MLIRTensorUtils
MLIRTransforms
+ iree::compiler::Codegen::Common
iree::compiler::Codegen::Common::CPU::CommonCPUPasses
iree::compiler::Dialect::Flow::IR
iree::compiler::Dialect::Flow::Transforms
diff --git a/compiler/src/iree/compiler/GlobalOptimization/MaterializeHomogeneousEncodings.cpp b/compiler/src/iree/compiler/GlobalOptimization/MaterializeHomogeneousEncodings.cpp
index 1ed56ef..2ec27fc 100644
--- a/compiler/src/iree/compiler/GlobalOptimization/MaterializeHomogeneousEncodings.cpp
+++ b/compiler/src/iree/compiler/GlobalOptimization/MaterializeHomogeneousEncodings.cpp
@@ -5,6 +5,7 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "iree/compiler/Codegen/Common/CPU/Passes.h"
+#include "iree/compiler/Codegen/Common/Passes.h"
#include "iree/compiler/Dialect/HAL/IR/HALDialect.h"
#include "iree/compiler/Dialect/HAL/IR/HALOps.h"
#include "iree/compiler/GlobalOptimization/PassDetail.h"
@@ -17,6 +18,7 @@
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Diagnostics.h"
#include "mlir/Pass/Pass.h"
+#include "mlir/Transforms/Passes.h"
namespace mlir {
namespace iree_compiler {
@@ -44,20 +46,26 @@
if (executableTargets.size() != 1) {
return;
}
- // TODO(hanchung): Move *CPUMateralize* methods to Codegen/Common. They
- // could be generalized to other backends (by looking into something like
- // ExecutableTarget things). Only llvm-cpu backends handle encodings for
- // now.
+ // TODO: vmvx has its own logic about supporting dynamic tile
+ // sizes. It is not fully integrated into the pipeline, so we remain the
+ // materialization to the end.
auto executableTarget = executableTargets[0];
- if (executableTarget.getBackend() != "llvm-cpu") {
+ if (executableTarget.getBackend() == "vmvx") {
return;
}
+ // Only llvm-cpu backends handle encodings for now, others just go with nop.
OpPassManager passManager(moduleOp.getOperationName());
- passManager.addNestedPass<func::FuncOp>(
- createCPUMaterializeUpperBoundTileSizePass(executableTargets));
- passManager.addNestedPass<func::FuncOp>(
- createCPUMaterializeEncodingPass(executableTarget));
+ if (executableTarget.getBackend() == "llvm-cpu") {
+ passManager.addNestedPass<func::FuncOp>(
+ createCPUMaterializeUpperBoundTileSizePass(executableTargets));
+ passManager.addNestedPass<func::FuncOp>(
+ createCPUMaterializeEncodingPass(executableTarget));
+ } else {
+ passManager.addNestedPass<func::FuncOp>(
+ createMaterializeEncodingIntoNopPass());
+ passManager.addNestedPass<func::FuncOp>(createCanonicalizerPass());
+ }
if (failed(runPipeline(passManager, moduleOp))) {
return signalPassFailure();
diff --git a/compiler/src/iree/compiler/GlobalOptimization/test/materialize_homogeneous_encodings.mlir b/compiler/src/iree/compiler/GlobalOptimization/test/materialize_homogeneous_encodings.mlir
index 88f13fe..bcbc917 100644
--- a/compiler/src/iree/compiler/GlobalOptimization/test/materialize_homogeneous_encodings.mlir
+++ b/compiler/src/iree/compiler/GlobalOptimization/test/materialize_homogeneous_encodings.mlir
@@ -51,7 +51,7 @@
}
}
-// vulkan does not implement buildMaterializeEncodingsPassPipeline method.
+// vulkan uses default materialization patterns which unsets the encodings.
// CHECK-LABEL: func.func @lhs_encoding
-// CHECK: iree_linalg_ext.upper_bound_tile_size
-// CHECK: iree_linalg_ext.set_encoding
+// CHECK-SAME: %[[ARG0:[a-zA-Z0-9]+]]
+// CHECK: return %[[ARG0]]