Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions macos_mlir_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
xtc-llvm-tools==21.1.2.6
xtc-mlir-tools==21.1.2.8
xtc-mlir-python-bindings==21.1.2.8
xtc-mlir-extra-tools==21.1.2.12
xtc-llvm-tools==22.1.8.1
xtc-mlir-tools==22.1.8.2
xtc-mlir-python-bindings==22.1.8.2
xtc-mlir-extra-tools==22.1.8.1
4 changes: 2 additions & 2 deletions macos_tvm_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
xtc-llvm-tools==21.1.2.6
xtc-tvm-python-bindings==0.19.0.9
xtc-llvm-tools==22.1.8.1
xtc-tvm-python-bindings==0.19.0.11
8 changes: 4 additions & 4 deletions mlir_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
xtc-llvm-tools==21.1.2.6
xtc-mlir-tools==21.1.2.8
xtc-mlir-python-bindings==21.1.2.8
xtc-mlir-extra-tools==21.1.2.12
xtc-llvm-tools==22.1.8.1
xtc-mlir-tools==22.1.8.2
xtc-mlir-python-bindings==22.1.8.2
xtc-mlir-extra-tools==22.1.8.1
15 changes: 7 additions & 8 deletions src/xtc/backends/mlir/MlirCompilerPasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,18 +186,19 @@ def run(self) -> None:
transform.YieldOp([])
if self._super_vectorize:
assert self._super_vectorize_sequence is not None
assert self._vectors_size is not None
with (
InsertionPoint.at_block_begin(self._super_vectorize_sequence.body),
self._mlir_program.mlir_context,
self._loc,
):
result = transform.ApplyRegisteredPassOp(
op_result = transform.ApplyRegisteredPassOp(
transform.AnyOpType.get(),
self._super_vectorize_sequence.bodyTarget,
pass_name="affine-super-vectorize",
options={"virtual-vector-size": self._vectors_size},
)
transform.YieldOp([result])
transform.YieldOp([op_result.result])
with (
InsertionPoint.at_block_begin(self._named_sequence.body),
self._mlir_program.mlir_context,
Expand Down Expand Up @@ -396,10 +397,8 @@ def _fuse_producers_into_loop(
op_attrs={fuse_op_name: UnitAttr.get()},
)
handle, new_loop = FuseIntoContainingOp(
fused_op_type_or_producer_op=prod_handle,
new_containing_op_type_or_containing_op=sched_state.all_loops[
loop_name
],
prod_handle,
sched_state.all_loops[loop_name],
).results
# rematch the scheduled op
new_handle = structured_match(
Expand Down Expand Up @@ -696,8 +695,8 @@ def find_producer_handles(module: Module, root_handle: str) -> list[str | None]:
producer_handles.append(None)
if producer_op and hasattr(producer_op, "attributes"):
for attr in producer_op.attributes:
if str(attr.name).startswith("__xtc_id_"):
producer_handles[-1] = attr.name
if attr.startswith("__xtc_id_"):
producer_handles[-1] = attr
return producer_handles


Expand Down
6 changes: 4 additions & 2 deletions src/xtc/backends/mlir/MlirProgram.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2024-2026 The XTC Project Authors
#
from typing import cast
from xdsl.dialects import func as xdslfunc
from mlir.dialects import func
from mlir.ir import (
Expand Down Expand Up @@ -69,15 +70,16 @@ def parse_and_add_function(
no_alias: bool,
) -> func.FuncOp:
# Parse the function to MLIR AST
payload_func: func.FuncOp = func.FuncOp.parse(
function, context=self.mlir_context
payload_func = cast(
func.FuncOp, func.FuncOp.parse(function, context=self.mlir_context)
)

with self.mlir_context:
# Insert (or not) the noalias attributes
new_arg_attrs = []
if no_alias:
for arg_attrs in payload_func.arg_attrs:
arg_attrs = DictAttr(arg_attrs)
new_dict = {}
for i in range(len(arg_attrs)):
new_dict[arg_attrs[i].name] = arg_attrs[i].attr
Expand Down
576 changes: 276 additions & 300 deletions tests/filecheck/backends/tensor_dialect/test_conv2d_r181_mlir_tensor.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -221,19 +221,18 @@
# CHECK-NEXT: %12 = scf.for %arg13 = %c0 to %c3 step %c1 iter_args(%arg14 = %arg12) -> (tensor<1x1x1x16xf32>) {
# CHECK-NEXT: %extracted_slice_11 = tensor.extract_slice %extracted_slice_9[0, 0, 0, %arg13] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x3xf32> to tensor<1x1x1x1xf32>
# CHECK-NEXT: %extracted_slice_12 = tensor.extract_slice %extracted_slice_10[0, 0, %arg13, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32>
# CHECK-NEXT: %extracted_slice_13 = tensor.extract_slice %extracted_slice_11[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32>
# CHECK-NEXT: %extracted_slice_13 = tensor.extract_slice %extracted_slice_11[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<f32>
# CHECK-NEXT: %extracted_slice_14 = tensor.extract_slice %extracted_slice_12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32>
# CHECK-NEXT: %extracted_slice_15 = tensor.extract_slice %arg14[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32>
# CHECK-NEXT: %extracted_slice_16 = tensor.extract_slice %extracted_slice_13[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor<f32>
# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_16[] : tensor<f32>
# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_13[] : tensor<f32>
# CHECK-NEXT: %13 = vector.broadcast %extracted : f32 to vector<16xf32>
# CHECK-NEXT: %14 = vector.transfer_read %extracted_slice_14[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32>
# CHECK-NEXT: %15 = vector.transfer_read %extracted_slice_15[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32>
# CHECK-NEXT: %16 = arith.mulf %13, %14 fastmath<fast> : vector<16xf32>
# CHECK-NEXT: %17 = arith.addf %15, %16 fastmath<fast> : vector<16xf32>
# CHECK-NEXT: %18 = vector.transfer_write %17, %extracted_slice_15[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32>
# CHECK-NEXT: %inserted_slice_17 = tensor.insert_slice %18 into %arg14[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32>
# CHECK-NEXT: scf.yield %inserted_slice_17 : tensor<1x1x1x16xf32>
# CHECK-NEXT: %inserted_slice_16 = tensor.insert_slice %18 into %arg14[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32>
# CHECK-NEXT: scf.yield %inserted_slice_16 : tensor<1x1x1x16xf32>
# CHECK-NEXT: } {"./c"}
# CHECK-NEXT: scf.yield %12 : tensor<1x1x1x16xf32>
# CHECK-NEXT: } {"./s"}
Expand Down Expand Up @@ -322,19 +321,18 @@
# CHECK-NEXT: %5 = scf.for %arg11 = %c0 to %c3 step %c1 iter_args(%arg12 = %arg10) -> (memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>>) {
# CHECK-NEXT: %subview_7 = memref.subview %subview_5[0, 0, 0, %arg11] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x3xf32, strided<[75, 15, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[75, 15, 3, 1], offset: ?>>
# CHECK-NEXT: %subview_8 = memref.subview %subview_6[0, 0, %arg11, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[240, 48, 16, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[240, 48, 16, 1], offset: ?>>
# CHECK-NEXT: %subview_9 = memref.subview %subview_7[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[75, 15, 3, 1], offset: ?>> to memref<1x1xf32, strided<[75, 15], offset: ?>>
# CHECK-NEXT: %subview_9 = memref.subview %subview_7[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[75, 15, 3, 1], offset: ?>> to memref<f32, strided<[], offset: ?>>
# CHECK-NEXT: %subview_10 = memref.subview %subview_8[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[240, 48, 16, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: %subview_11 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: %subview_12 = memref.subview %subview_9[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[75, 15], offset: ?>> to memref<f32, strided<[], offset: ?>>
# CHECK-NEXT: %6 = memref.load %subview_12[] : memref<f32, strided<[], offset: ?>>
# CHECK-NEXT: %6 = memref.load %subview_9[] : memref<f32, strided<[], offset: ?>>
# CHECK-NEXT: %7 = vector.broadcast %6 : f32 to vector<16xf32>
# CHECK-NEXT: %8 = vector.transfer_read %subview_10[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32>
# CHECK-NEXT: %9 = vector.transfer_read %subview_11[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32>
# CHECK-NEXT: %10 = arith.mulf %7, %8 fastmath<fast> : vector<16xf32>
# CHECK-NEXT: %11 = arith.addf %9, %10 fastmath<fast> : vector<16xf32>
# CHECK-NEXT: vector.transfer_write %11, %subview_11[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: %subview_13 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: memref.copy %subview_11, %subview_13 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: %subview_12 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: memref.copy %subview_11, %subview_12 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>>
# CHECK-NEXT: scf.yield %arg12 : memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>>
# CHECK-NEXT: } {"./c"}
# CHECK-NEXT: scf.yield %5 : memref<1x1x1x16xf32, strided<[256, 64, 16, 1], offset: ?>>
Expand Down
39 changes: 19 additions & 20 deletions tests/filecheck/mlir_loop/gen_assembly/skylake_split_matmul.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ func.func @myfun(
// CHECK-NEXT: cmp $0x1ff,%rcx
// CHECK-NEXT: lea 0x1(%rcx),%rcx
// CHECK-NEXT: jb <myfun+0x60>
// CHECK-NEXT: add $0x800,%rdx
// CHECK-NEXT: add $0x1c00,%rsi
// CHECK-NEXT: add $0x101c,%rdi
// CHECK-NEXT: xor %eax,%eax
Expand All @@ -68,14 +67,14 @@ func.func @myfun(
// CHECK-NEXT: add %rdx,%rcx
// CHECK-NEXT: mov %rsi,%r8
// CHECK-NEXT: xor %r9d,%r9d
// CHECK-NEXT: vmovups 0xe0(%rcx,%r9,4),%ymm0
// CHECK-NEXT: vmovups 0xc0(%rcx,%r9,4),%ymm1
// CHECK-NEXT: vmovups 0xa0(%rcx,%r9,4),%ymm2
// CHECK-NEXT: vmovups 0x80(%rcx,%r9,4),%ymm3
// CHECK-NEXT: vmovups (%rcx,%r9,4),%ymm4
// CHECK-NEXT: vmovups 0x20(%rcx,%r9,4),%ymm5
// CHECK-NEXT: vmovups 0x40(%rcx,%r9,4),%ymm6
// CHECK-NEXT: vmovups 0x60(%rcx,%r9,4),%ymm7
// CHECK-NEXT: vmovups 0x8e0(%rcx,%r9,4),%ymm0
// CHECK-NEXT: vmovups 0x8c0(%rcx,%r9,4),%ymm1
// CHECK-NEXT: vmovups 0x8a0(%rcx,%r9,4),%ymm2
// CHECK-NEXT: vmovups 0x880(%rcx,%r9,4),%ymm3
// CHECK-NEXT: vmovups 0x800(%rcx,%r9,4),%ymm4
// CHECK-NEXT: vmovups 0x820(%rcx,%r9,4),%ymm5
// CHECK-NEXT: vmovups 0x840(%rcx,%r9,4),%ymm6
// CHECK-NEXT: vmovups 0x860(%rcx,%r9,4),%ymm7
// CHECK-NEXT: mov $0xfffffffffffffff8,%r10
// CHECK-NEXT: mov %r8,%r11
// CHECK-NEXT: vbroadcastss 0x4(%rdi,%r10,4),%ymm8
Expand Down Expand Up @@ -154,20 +153,20 @@ func.func @myfun(
// CHECK-NEXT: add $0x2000,%r11
// CHECK-NEXT: cmp $0x1f8,%r10
// CHECK-NEXT: jb <myfun+0x130>
// CHECK-NEXT: vmovups %ymm4,(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm5,0x20(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm6,0x40(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm7,0x60(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm3,0x80(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm2,0xa0(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm1,0xc0(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm0,0xe0(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm4,0x800(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm5,0x820(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm6,0x840(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm7,0x860(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm3,0x880(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm2,0x8a0(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm1,0x8c0(%rcx,%r9,4)
// CHECK-NEXT: vmovups %ymm0,0x8e0(%rcx,%r9,4)
// CHECK-NEXT: add $0x100,%r8
// CHECK-NEXT: cmp $0xc0,%r9
// CHECK-NEXT: lea 0x40(%r9),%r9
// CHECK-NEXT: jb <myfun+0xe0>
// CHECK-NEXT: jb <myfun+0xd0>
// CHECK-NEXT: add $0x800,%rdi
// CHECK-NEXT: cmp $0xff,%rax
// CHECK-NEXT: lea 0x1(%rax),%rax
// CHECK-NEXT: jb <myfun+0xd0>
// CHECK-NEXT: vzeroupper
// CHECK-NEXT: jb <myfun+0xc0>
// CHECK-NEXT: vzeroupper
4 changes: 2 additions & 2 deletions tvm_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
xtc-llvm-tools==21.1.2.6
xtc-tvm-python-bindings==0.19.0.10
xtc-llvm-tools==22.1.8.1
xtc-tvm-python-bindings==0.19.0.11
Loading