summaryrefslogtreecommitdiff
path: root/mlir/test/python/dialects/linalg/ops.py
diff options
context:
space:
mode:
authorEmilio Cota <ecg@google.com>2024-10-11 05:08:23 -0400
committerEmilio Cota <ecg@google.com>2024-10-11 05:22:56 -0400
commit1276ce9e9713b2a0802004676fad7e40980396d5 (patch)
tree9a6ac7279b201dd37e0c3690d62f863408e0960a /mlir/test/python/dialects/linalg/ops.py
parent72f339de45bb590f25571c4c447a725e6f1dd8d7 (diff)
Revert "[mlir][linalg] Introduce transpose semantic to 'linalg.matmul' ops. (#104783)"
This reverts commit 03483737a7a2d72a257a5ab6ff01748ad9cf0f75 and 99c8557, which is a fix-up on top of the former. I'm reverting because this commit broke two tests: mlir/test/python/integration/dialects/linalg/opsrun.py mlir/test/python/integration/dialects/transform.py See https://lab.llvm.org/buildbot/#/builders/138/builds/4872 I'm not familiar with the tests, so I'm leaving it to the original author to either remove or adapt the broken tests, as discussed here: https://github.com/llvm/llvm-project/pull/104783#issuecomment-2406390905
Diffstat (limited to 'mlir/test/python/dialects/linalg/ops.py')
-rw-r--r--mlir/test/python/dialects/linalg/ops.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/mlir/test/python/dialects/linalg/ops.py b/mlir/test/python/dialects/linalg/ops.py
index 72045a07b2da..3bfbcf7d7f7c 100644
--- a/mlir/test/python/dialects/linalg/ops.py
+++ b/mlir/test/python/dialects/linalg/ops.py
@@ -84,6 +84,81 @@ def testNamedStructuredOpCustomForm():
print(module)
+
+# CHECK-LABEL: TEST: testNamedStructuredOpGenericForm
+@run
+def testNamedStructuredOpGenericForm():
+ with Context() as ctx, Location.unknown():
+ module = Module.create()
+ f32 = F32Type.get()
+ with InsertionPoint(module.body):
+
+ @func.FuncOp.from_py_func(
+ RankedTensorType.get((4, 16), f32), RankedTensorType.get((16, 8), f32)
+ )
+ def named_form(lhs, rhs):
+ init_result = tensor.empty([4, 8], f32)
+ # CHECK: "linalg.matmul"(%{{.*}})
+ # CHECK-SAME: cast = #linalg.type_fn<cast_signed>
+ # CHECK-SAME: operandSegmentSizes = array<i32: 2, 1>
+ # CHECK-NEXT: ^bb0(%{{.*}}: f32, %{{.*}}: f32, %{{.*}}: f32):
+ # CHECK-NEXT: arith.mulf{{.*}} (f32, f32) -> f32
+ # CHECK-NEXT: arith.addf{{.*}} (f32, f32) -> f32
+ # CHECK-NEXT: linalg.yield{{.*}} (f32) -> ()
+ # CHECK-NEXT: (tensor<4x16xf32>, tensor<16x8xf32>, tensor<4x8xf32>) -> tensor<4x8xf32>
+ return linalg.matmul(lhs, rhs, outs=[init_result])
+
+ module.operation.print(print_generic_op_form=True)
+
+
+# CHECK-LABEL: TEST: testNamedStructuredAsGenericOp
+@run
+def testNamedStructuredAsGenericOp():
+ with Context() as ctx, Location.unknown():
+ module = Module.create()
+ f32 = F32Type.get()
+ with InsertionPoint(module.body):
+
+ @func.FuncOp.from_py_func(
+ RankedTensorType.get((4, 16), f32), RankedTensorType.get((16, 8), f32)
+ )
+ def generic_form(lhs, rhs):
+ init_result = tensor.EmptyOp([4, 8], f32)
+ # CHECK: linalg.generic
+ return linalg.matmul(
+ lhs, rhs, outs=[init_result.result], emit_generic=True
+ )
+
+ print(module)
+
+
+# CHECK-LABEL: TEST: testOpResultFromOtherOp
+@run
+def testOpResultFromOtherOp():
+ with Context(), Location.unknown():
+ module = Module.create()
+ f32 = F32Type.get()
+ with InsertionPoint(module.body):
+
+ @func.FuncOp.from_py_func(
+ RankedTensorType.get((4, 16), f32), RankedTensorType.get((16, 8), f32)
+ )
+ def pass_an_op_directly(arg0, arg1):
+ one = arith.ConstantOp(F32Type.get(), 1.0)
+ # CHECK: %[[LHS:.*]] = linalg.fill
+ lhs = linalg.fill(one, outs=[arg0])
+ # CHECK: %[[RHS:.*]] = linalg.fill
+ rhs = linalg.fill(one, outs=[arg1])
+ # CHECK: %[[INIT:.*]] = tensor.empty
+ init = tensor.EmptyOp([4, 8], f32)
+ # CHECK: linalg.matmul
+ # CHECK: ins(%[[LHS]], %[[RHS]]
+ # CHECK: outs(%[[INIT]]
+ return linalg.matmul(lhs, rhs, outs=init)
+
+ print(module)
+
+
# CHECK-LABEL: TEST: testIdentityRegionOps
@run
def testIdentityRegionOps():