[Mlir-commits] [mlir] [mlir][vector] Implement speculation for vector.transferx ops (PR #111533)
Kunwar Grover
llvmlistbot at llvm.org
Wed Oct 9 05:38:31 PDT 2024
================
@@ -1209,3 +1209,85 @@ func.func @hoist_linalg_ops_div_by_zero(%a : tensor<128x128xi32>,
func.return %final : tensor<?x128xi32>
}
+
+// -----
+
+// CHECK-LABEL: func @hoist_vector_transfer_ops
+// CHECK: vector.transfer_read
+// CHECK: scf.for
+// CHECK-NOT: vector.transfer_read
+// CHECK: arith.addf
+// CHECK: scf.yield
+func.func @hoist_vector_transfer_ops(
+ %a : tensor<128x128xf32>,
+ %lb : index,
+ %ub : index,
+ %step : index,
+ %ida : index,
+ %idb : index) -> vector<4x4xf32> {
+ %cst_0 = arith.constant 0.0 : f32
+ %cst = arith.constant dense<0.0> : vector<4x4xf32>
+ %final =
+ scf.for %i = %lb to %ub step %step iter_args(%acc = %cst) -> vector<4x4xf32> {
+ %read = vector.transfer_read %a[%ida, %idb], %cst_0 : tensor<128x128xf32>, vector<4x4xf32>
+ %out = arith.addf %read, %acc : vector<4x4xf32>
+ scf.yield %out : vector<4x4xf32>
+ }
+ func.return %final : vector<4x4xf32>
+}
+
+// -----
+
+// CHECK-LABEL: func @hoist_vector_transfer_ops
+// CHECK: vector.transfer_write
+// CHECK: vector.transfer_read
+// CHECK: scf.for
+// CHECK-NOT: vector.transfer_write
+// CHECK-NOT: vector.transfer_read
+// CHECK: arith.addf
+// CHECK: scf.yield
+func.func @hoist_vector_transfer_ops(
+ %lb : index,
+ %ub : index,
+ %step : index,
+ %ida : index,
+ %idb : index) -> vector<4x4xf32> {
+ %c0 = arith.constant 0 : index
+ %cst_0 = arith.constant 0.0 : f32
+ %cst = arith.constant dense<0.0> : vector<4x4xf32>
+ %empty = tensor.empty() : tensor<4x4xf32>
+ %final =
+ scf.for %i = %lb to %ub step %step iter_args(%acc = %cst) -> vector<4x4xf32> {
+ %a = vector.transfer_write %cst, %empty[%c0, %c0] : vector<4x4xf32>, tensor<4x4xf32>
+ %read = vector.transfer_read %a[%c0, %c0], %cst_0 : tensor<4x4xf32>, vector<4x4xf32>
+ %out = arith.addf %read, %acc : vector<4x4xf32>
+ scf.yield %out : vector<4x4xf32>
+ }
+ func.return %final : vector<4x4xf32>
+}
+
+// -----
+
+// CHECK-LABEL: func @hoist_vector_transfer_ops
+// CHECK-NOT: vector.transfer_read
+// CHECK: scf.for
+// CHECK: vector.transfer_read
+// CHECK: arith.addf
+// CHECK: scf.yield
+func.func @hoist_vector_transfer_ops_memref(
----------------
Groverkss wrote:
added do_not prefix to test name and added a negative test for tensors.
https://github.com/llvm/llvm-project/pull/111533
More information about the Mlir-commits
mailing list