From 5624f8c73896bffc06eecb5e9400745670c467b9 Mon Sep 17 00:00:00 2001 From: Liam Semeria Date: Fri, 24 Jul 2026 12:09:59 +0200 Subject: [PATCH 1/3] Updated mlir requirements for llvm 22.1.8 --- macos_mlir_requirements.txt | 8 ++++---- mlir_requirements.txt | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/macos_mlir_requirements.txt b/macos_mlir_requirements.txt index 1d978ebf..dd2219e1 100644 --- a/macos_mlir_requirements.txt +++ b/macos_mlir_requirements.txt @@ -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 diff --git a/mlir_requirements.txt b/mlir_requirements.txt index 1d978ebf..dd2219e1 100644 --- a/mlir_requirements.txt +++ b/mlir_requirements.txt @@ -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 From 0d92e7a857839bd316b6b500eb890a2bc8e22b74 Mon Sep 17 00:00:00 2001 From: Liam Semeria Date: Fri, 24 Jul 2026 12:10:38 +0200 Subject: [PATCH 2/3] Updated tvm requirements for llvm 22.1.8 --- macos_tvm_requirements.txt | 4 ++-- tvm_requirements.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/macos_tvm_requirements.txt b/macos_tvm_requirements.txt index cbf73ad3..17b4e148 100644 --- a/macos_tvm_requirements.txt +++ b/macos_tvm_requirements.txt @@ -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 diff --git a/tvm_requirements.txt b/tvm_requirements.txt index 073bdf86..17b4e148 100644 --- a/tvm_requirements.txt +++ b/tvm_requirements.txt @@ -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 From 2f6c1c3e7a2ced2be482c2c28ea42e245760dc66 Mon Sep 17 00:00:00 2001 From: Liam Semeria Date: Wed, 8 Jul 2026 17:01:17 +0200 Subject: [PATCH 3/3] llvm: updated files and tests for llvm 22.1.8 --- src/xtc/backends/mlir/MlirCompilerPasses.py | 15 +- src/xtc/backends/mlir/MlirProgram.py | 6 +- .../test_conv2d_r181_mlir_tensor.py | 576 +++++++++--------- .../test_pad_conv2d_mlir_tensor_fused.py | 18 +- .../gen_assembly/skylake_split_matmul.mlir | 39 +- 5 files changed, 314 insertions(+), 340 deletions(-) diff --git a/src/xtc/backends/mlir/MlirCompilerPasses.py b/src/xtc/backends/mlir/MlirCompilerPasses.py index b766ab2a..138cc952 100644 --- a/src/xtc/backends/mlir/MlirCompilerPasses.py +++ b/src/xtc/backends/mlir/MlirCompilerPasses.py @@ -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, @@ -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( @@ -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 diff --git a/src/xtc/backends/mlir/MlirProgram.py b/src/xtc/backends/mlir/MlirProgram.py index a9a77c17..0a08aec1 100644 --- a/src/xtc/backends/mlir/MlirProgram.py +++ b/src/xtc/backends/mlir/MlirProgram.py @@ -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 ( @@ -69,8 +70,8 @@ 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: @@ -78,6 +79,7 @@ def parse_and_add_function( 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 diff --git a/tests/filecheck/backends/tensor_dialect/test_conv2d_r181_mlir_tensor.py b/tests/filecheck/backends/tensor_dialect/test_conv2d_r181_mlir_tensor.py index 595fb82b..40d8d3e2 100644 --- a/tests/filecheck/backends/tensor_dialect/test_conv2d_r181_mlir_tensor.py +++ b/tests/filecheck/backends/tensor_dialect/test_conv2d_r181_mlir_tensor.py @@ -176,189 +176,177 @@ # CHECK-NEXT: %extracted_slice_15 = tensor.extract_slice %extracted_slice_13[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32> # CHECK-NEXT: %extracted_slice_16 = tensor.extract_slice %extracted_slice_14[0, 0, %c0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> # CHECK-NEXT: %extracted_slice_17 = tensor.extract_slice %arg14[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_18 = tensor.extract_slice %extracted_slice_16[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> +# CHECK-NEXT: %extracted_slice_18 = tensor.extract_slice %extracted_slice_16[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor # CHECK-NEXT: %extracted_slice_19 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> # CHECK-NEXT: %extracted_slice_20 = tensor.extract_slice %extracted_slice_17[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_21 = tensor.extract_slice %extracted_slice_18[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_21[] : tensor +# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_18[] : tensor # CHECK-NEXT: %11 = vector.broadcast %extracted : f32 to vector<16xf32> # CHECK-NEXT: %12 = vector.transfer_read %extracted_slice_19[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %13 = vector.transfer_read %extracted_slice_20[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %14 = arith.mulf %11, %12 fastmath : vector<16xf32> # CHECK-NEXT: %15 = arith.addf %13, %14 fastmath : vector<16xf32> # CHECK-NEXT: %16 = vector.transfer_write %15, %extracted_slice_20[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_22 = tensor.insert_slice %16 into %extracted_slice_17[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_23 = tensor.insert_slice %inserted_slice_22 into %arg14[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_24 = tensor.extract_slice %extracted_slice_14[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_25 = tensor.extract_slice %inserted_slice_23[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_26 = tensor.extract_slice %extracted_slice_24[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_27 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_28 = tensor.extract_slice %extracted_slice_25[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_29 = tensor.extract_slice %extracted_slice_26[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_30 = tensor.extract %extracted_slice_29[] : tensor -# CHECK-NEXT: %17 = vector.broadcast %extracted_30 : f32 to vector<16xf32> -# CHECK-NEXT: %18 = vector.transfer_read %extracted_slice_27[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %19 = vector.transfer_read %extracted_slice_28[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %inserted_slice_21 = tensor.insert_slice %16 into %extracted_slice_17[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_22 = tensor.insert_slice %inserted_slice_21 into %arg14[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_23 = tensor.extract_slice %extracted_slice_14[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_24 = tensor.extract_slice %inserted_slice_22[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_25 = tensor.extract_slice %extracted_slice_23[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_26 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_27 = tensor.extract_slice %extracted_slice_24[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_28 = tensor.extract %extracted_slice_25[] : tensor +# CHECK-NEXT: %17 = vector.broadcast %extracted_28 : f32 to vector<16xf32> +# CHECK-NEXT: %18 = vector.transfer_read %extracted_slice_26[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %19 = vector.transfer_read %extracted_slice_27[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %20 = arith.mulf %17, %18 fastmath : vector<16xf32> # CHECK-NEXT: %21 = arith.addf %19, %20 fastmath : vector<16xf32> -# CHECK-NEXT: %22 = vector.transfer_write %21, %extracted_slice_28[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_31 = tensor.insert_slice %22 into %extracted_slice_25[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_32 = tensor.insert_slice %inserted_slice_31 into %inserted_slice_23[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_33 = tensor.extract_slice %extracted_slice_14[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_34 = tensor.extract_slice %inserted_slice_32[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_35 = tensor.extract_slice %extracted_slice_33[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_36 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_37 = tensor.extract_slice %extracted_slice_34[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_38 = tensor.extract_slice %extracted_slice_35[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_39 = tensor.extract %extracted_slice_38[] : tensor -# CHECK-NEXT: %23 = vector.broadcast %extracted_39 : f32 to vector<16xf32> -# CHECK-NEXT: %24 = vector.transfer_read %extracted_slice_36[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %25 = vector.transfer_read %extracted_slice_37[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %22 = vector.transfer_write %21, %extracted_slice_27[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_29 = tensor.insert_slice %22 into %extracted_slice_24[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_30 = tensor.insert_slice %inserted_slice_29 into %inserted_slice_22[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_31 = tensor.extract_slice %extracted_slice_14[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_32 = tensor.extract_slice %inserted_slice_30[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_33 = tensor.extract_slice %extracted_slice_31[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_34 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_35 = tensor.extract_slice %extracted_slice_32[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_36 = tensor.extract %extracted_slice_33[] : tensor +# CHECK-NEXT: %23 = vector.broadcast %extracted_36 : f32 to vector<16xf32> +# CHECK-NEXT: %24 = vector.transfer_read %extracted_slice_34[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %25 = vector.transfer_read %extracted_slice_35[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %26 = arith.mulf %23, %24 fastmath : vector<16xf32> # CHECK-NEXT: %27 = arith.addf %25, %26 fastmath : vector<16xf32> -# CHECK-NEXT: %28 = vector.transfer_write %27, %extracted_slice_37[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_40 = tensor.insert_slice %28 into %extracted_slice_34[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_41 = tensor.insert_slice %inserted_slice_40 into %inserted_slice_32[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_42 = tensor.extract_slice %extracted_slice_14[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_43 = tensor.extract_slice %inserted_slice_41[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_44 = tensor.extract_slice %extracted_slice_42[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_45 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_46 = tensor.extract_slice %extracted_slice_43[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_47 = tensor.extract_slice %extracted_slice_44[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_48 = tensor.extract %extracted_slice_47[] : tensor -# CHECK-NEXT: %29 = vector.broadcast %extracted_48 : f32 to vector<16xf32> -# CHECK-NEXT: %30 = vector.transfer_read %extracted_slice_45[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %31 = vector.transfer_read %extracted_slice_46[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %28 = vector.transfer_write %27, %extracted_slice_35[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_37 = tensor.insert_slice %28 into %extracted_slice_32[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_38 = tensor.insert_slice %inserted_slice_37 into %inserted_slice_30[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_39 = tensor.extract_slice %extracted_slice_14[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_40 = tensor.extract_slice %inserted_slice_38[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_41 = tensor.extract_slice %extracted_slice_39[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_42 = tensor.extract_slice %extracted_slice_15[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_43 = tensor.extract_slice %extracted_slice_40[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_44 = tensor.extract %extracted_slice_41[] : tensor +# CHECK-NEXT: %29 = vector.broadcast %extracted_44 : f32 to vector<16xf32> +# CHECK-NEXT: %30 = vector.transfer_read %extracted_slice_42[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %31 = vector.transfer_read %extracted_slice_43[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %32 = arith.mulf %29, %30 fastmath : vector<16xf32> # CHECK-NEXT: %33 = arith.addf %31, %32 fastmath : vector<16xf32> -# CHECK-NEXT: %34 = vector.transfer_write %33, %extracted_slice_46[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_49 = tensor.insert_slice %34 into %extracted_slice_43[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_50 = tensor.insert_slice %inserted_slice_49 into %inserted_slice_41[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_51 = tensor.extract_slice %extracted_slice_12[0, 0, 0, %c1] [1, 1, 7, 1] [1, 1, 1, 1] : tensor<1x1x7x3xf32> to tensor<1x1x7x1xf32> -# CHECK-NEXT: %extracted_slice_52 = tensor.extract_slice %extracted_slice_13[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_53 = tensor.extract_slice %extracted_slice_51[0, 0, %c0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_54 = tensor.extract_slice %inserted_slice_50[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_55 = tensor.extract_slice %extracted_slice_53[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_56 = tensor.extract_slice %extracted_slice_52[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_57 = tensor.extract_slice %extracted_slice_54[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_58 = tensor.extract_slice %extracted_slice_55[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_59 = tensor.extract %extracted_slice_58[] : tensor -# CHECK-NEXT: %35 = vector.broadcast %extracted_59 : f32 to vector<16xf32> -# CHECK-NEXT: %36 = vector.transfer_read %extracted_slice_56[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %37 = vector.transfer_read %extracted_slice_57[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %34 = vector.transfer_write %33, %extracted_slice_43[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_45 = tensor.insert_slice %34 into %extracted_slice_40[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_46 = tensor.insert_slice %inserted_slice_45 into %inserted_slice_38[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_47 = tensor.extract_slice %extracted_slice_12[0, 0, 0, %c1] [1, 1, 7, 1] [1, 1, 1, 1] : tensor<1x1x7x3xf32> to tensor<1x1x7x1xf32> +# CHECK-NEXT: %extracted_slice_48 = tensor.extract_slice %extracted_slice_13[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_49 = tensor.extract_slice %extracted_slice_47[0, 0, %c0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_50 = tensor.extract_slice %inserted_slice_46[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_51 = tensor.extract_slice %extracted_slice_49[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_52 = tensor.extract_slice %extracted_slice_48[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_53 = tensor.extract_slice %extracted_slice_50[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_54 = tensor.extract %extracted_slice_51[] : tensor +# CHECK-NEXT: %35 = vector.broadcast %extracted_54 : f32 to vector<16xf32> +# CHECK-NEXT: %36 = vector.transfer_read %extracted_slice_52[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %37 = vector.transfer_read %extracted_slice_53[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %38 = arith.mulf %35, %36 fastmath : vector<16xf32> # CHECK-NEXT: %39 = arith.addf %37, %38 fastmath : vector<16xf32> -# CHECK-NEXT: %40 = vector.transfer_write %39, %extracted_slice_57[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_60 = tensor.insert_slice %40 into %extracted_slice_54[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_61 = tensor.insert_slice %inserted_slice_60 into %inserted_slice_50[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_62 = tensor.extract_slice %extracted_slice_51[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_63 = tensor.extract_slice %inserted_slice_61[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_64 = tensor.extract_slice %extracted_slice_62[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_65 = tensor.extract_slice %extracted_slice_52[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_66 = tensor.extract_slice %extracted_slice_63[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_67 = tensor.extract_slice %extracted_slice_64[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_68 = tensor.extract %extracted_slice_67[] : tensor -# CHECK-NEXT: %41 = vector.broadcast %extracted_68 : f32 to vector<16xf32> -# CHECK-NEXT: %42 = vector.transfer_read %extracted_slice_65[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %43 = vector.transfer_read %extracted_slice_66[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %40 = vector.transfer_write %39, %extracted_slice_53[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_55 = tensor.insert_slice %40 into %extracted_slice_50[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_56 = tensor.insert_slice %inserted_slice_55 into %inserted_slice_46[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_57 = tensor.extract_slice %extracted_slice_47[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_58 = tensor.extract_slice %inserted_slice_56[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_59 = tensor.extract_slice %extracted_slice_57[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_60 = tensor.extract_slice %extracted_slice_48[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_61 = tensor.extract_slice %extracted_slice_58[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_62 = tensor.extract %extracted_slice_59[] : tensor +# CHECK-NEXT: %41 = vector.broadcast %extracted_62 : f32 to vector<16xf32> +# CHECK-NEXT: %42 = vector.transfer_read %extracted_slice_60[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %43 = vector.transfer_read %extracted_slice_61[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %44 = arith.mulf %41, %42 fastmath : vector<16xf32> # CHECK-NEXT: %45 = arith.addf %43, %44 fastmath : vector<16xf32> -# CHECK-NEXT: %46 = vector.transfer_write %45, %extracted_slice_66[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_69 = tensor.insert_slice %46 into %extracted_slice_63[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_70 = tensor.insert_slice %inserted_slice_69 into %inserted_slice_61[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_71 = tensor.extract_slice %extracted_slice_51[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_72 = tensor.extract_slice %inserted_slice_70[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_73 = tensor.extract_slice %extracted_slice_71[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_74 = tensor.extract_slice %extracted_slice_52[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_75 = tensor.extract_slice %extracted_slice_72[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_76 = tensor.extract_slice %extracted_slice_73[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_77 = tensor.extract %extracted_slice_76[] : tensor -# CHECK-NEXT: %47 = vector.broadcast %extracted_77 : f32 to vector<16xf32> -# CHECK-NEXT: %48 = vector.transfer_read %extracted_slice_74[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %49 = vector.transfer_read %extracted_slice_75[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %46 = vector.transfer_write %45, %extracted_slice_61[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_63 = tensor.insert_slice %46 into %extracted_slice_58[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_64 = tensor.insert_slice %inserted_slice_63 into %inserted_slice_56[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_65 = tensor.extract_slice %extracted_slice_47[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_66 = tensor.extract_slice %inserted_slice_64[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_67 = tensor.extract_slice %extracted_slice_65[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_68 = tensor.extract_slice %extracted_slice_48[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_69 = tensor.extract_slice %extracted_slice_66[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_70 = tensor.extract %extracted_slice_67[] : tensor +# CHECK-NEXT: %47 = vector.broadcast %extracted_70 : f32 to vector<16xf32> +# CHECK-NEXT: %48 = vector.transfer_read %extracted_slice_68[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %49 = vector.transfer_read %extracted_slice_69[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %50 = arith.mulf %47, %48 fastmath : vector<16xf32> # CHECK-NEXT: %51 = arith.addf %49, %50 fastmath : vector<16xf32> -# CHECK-NEXT: %52 = vector.transfer_write %51, %extracted_slice_75[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_78 = tensor.insert_slice %52 into %extracted_slice_72[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_79 = tensor.insert_slice %inserted_slice_78 into %inserted_slice_70[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_80 = tensor.extract_slice %extracted_slice_51[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_81 = tensor.extract_slice %inserted_slice_79[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_82 = tensor.extract_slice %extracted_slice_80[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_83 = tensor.extract_slice %extracted_slice_52[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_84 = tensor.extract_slice %extracted_slice_81[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_85 = tensor.extract_slice %extracted_slice_82[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_86 = tensor.extract %extracted_slice_85[] : tensor -# CHECK-NEXT: %53 = vector.broadcast %extracted_86 : f32 to vector<16xf32> -# CHECK-NEXT: %54 = vector.transfer_read %extracted_slice_83[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %55 = vector.transfer_read %extracted_slice_84[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %52 = vector.transfer_write %51, %extracted_slice_69[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_71 = tensor.insert_slice %52 into %extracted_slice_66[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_72 = tensor.insert_slice %inserted_slice_71 into %inserted_slice_64[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_73 = tensor.extract_slice %extracted_slice_47[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_74 = tensor.extract_slice %inserted_slice_72[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_75 = tensor.extract_slice %extracted_slice_73[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_76 = tensor.extract_slice %extracted_slice_48[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_77 = tensor.extract_slice %extracted_slice_74[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_78 = tensor.extract %extracted_slice_75[] : tensor +# CHECK-NEXT: %53 = vector.broadcast %extracted_78 : f32 to vector<16xf32> +# CHECK-NEXT: %54 = vector.transfer_read %extracted_slice_76[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %55 = vector.transfer_read %extracted_slice_77[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %56 = arith.mulf %53, %54 fastmath : vector<16xf32> # CHECK-NEXT: %57 = arith.addf %55, %56 fastmath : vector<16xf32> -# CHECK-NEXT: %58 = vector.transfer_write %57, %extracted_slice_84[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_87 = tensor.insert_slice %58 into %extracted_slice_81[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_88 = tensor.insert_slice %inserted_slice_87 into %inserted_slice_79[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_89 = tensor.extract_slice %extracted_slice_12[0, 0, 0, %c2] [1, 1, 7, 1] [1, 1, 1, 1] : tensor<1x1x7x3xf32> to tensor<1x1x7x1xf32> -# CHECK-NEXT: %extracted_slice_90 = tensor.extract_slice %extracted_slice_13[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_91 = tensor.extract_slice %extracted_slice_89[0, 0, %c0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_92 = tensor.extract_slice %inserted_slice_88[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_93 = tensor.extract_slice %extracted_slice_91[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_94 = tensor.extract_slice %extracted_slice_90[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_95 = tensor.extract_slice %extracted_slice_92[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_96 = tensor.extract_slice %extracted_slice_93[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_97 = tensor.extract %extracted_slice_96[] : tensor -# CHECK-NEXT: %59 = vector.broadcast %extracted_97 : f32 to vector<16xf32> -# CHECK-NEXT: %60 = vector.transfer_read %extracted_slice_94[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %61 = vector.transfer_read %extracted_slice_95[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %58 = vector.transfer_write %57, %extracted_slice_77[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_79 = tensor.insert_slice %58 into %extracted_slice_74[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_80 = tensor.insert_slice %inserted_slice_79 into %inserted_slice_72[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_81 = tensor.extract_slice %extracted_slice_12[0, 0, 0, %c2] [1, 1, 7, 1] [1, 1, 1, 1] : tensor<1x1x7x3xf32> to tensor<1x1x7x1xf32> +# CHECK-NEXT: %extracted_slice_82 = tensor.extract_slice %extracted_slice_13[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x3x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_83 = tensor.extract_slice %extracted_slice_81[0, 0, %c0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_84 = tensor.extract_slice %inserted_slice_80[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_85 = tensor.extract_slice %extracted_slice_83[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_86 = tensor.extract_slice %extracted_slice_82[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_87 = tensor.extract_slice %extracted_slice_84[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_88 = tensor.extract %extracted_slice_85[] : tensor +# CHECK-NEXT: %59 = vector.broadcast %extracted_88 : f32 to vector<16xf32> +# CHECK-NEXT: %60 = vector.transfer_read %extracted_slice_86[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %61 = vector.transfer_read %extracted_slice_87[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %62 = arith.mulf %59, %60 fastmath : vector<16xf32> # CHECK-NEXT: %63 = arith.addf %61, %62 fastmath : vector<16xf32> -# CHECK-NEXT: %64 = vector.transfer_write %63, %extracted_slice_95[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_98 = tensor.insert_slice %64 into %extracted_slice_92[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_99 = tensor.insert_slice %inserted_slice_98 into %inserted_slice_88[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_100 = tensor.extract_slice %extracted_slice_89[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_101 = tensor.extract_slice %inserted_slice_99[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_102 = tensor.extract_slice %extracted_slice_100[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_103 = tensor.extract_slice %extracted_slice_90[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_104 = tensor.extract_slice %extracted_slice_101[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_105 = tensor.extract_slice %extracted_slice_102[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_106 = tensor.extract %extracted_slice_105[] : tensor -# CHECK-NEXT: %65 = vector.broadcast %extracted_106 : f32 to vector<16xf32> -# CHECK-NEXT: %66 = vector.transfer_read %extracted_slice_103[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %67 = vector.transfer_read %extracted_slice_104[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %64 = vector.transfer_write %63, %extracted_slice_87[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_89 = tensor.insert_slice %64 into %extracted_slice_84[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_90 = tensor.insert_slice %inserted_slice_89 into %inserted_slice_80[0, 0, %c0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_91 = tensor.extract_slice %extracted_slice_81[0, 0, %c2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_92 = tensor.extract_slice %inserted_slice_90[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_93 = tensor.extract_slice %extracted_slice_91[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_94 = tensor.extract_slice %extracted_slice_82[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_95 = tensor.extract_slice %extracted_slice_92[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_96 = tensor.extract %extracted_slice_93[] : tensor +# CHECK-NEXT: %65 = vector.broadcast %extracted_96 : f32 to vector<16xf32> +# CHECK-NEXT: %66 = vector.transfer_read %extracted_slice_94[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %67 = vector.transfer_read %extracted_slice_95[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %68 = arith.mulf %65, %66 fastmath : vector<16xf32> # CHECK-NEXT: %69 = arith.addf %67, %68 fastmath : vector<16xf32> -# CHECK-NEXT: %70 = vector.transfer_write %69, %extracted_slice_104[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_107 = tensor.insert_slice %70 into %extracted_slice_101[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_108 = tensor.insert_slice %inserted_slice_107 into %inserted_slice_99[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_109 = tensor.extract_slice %extracted_slice_89[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_110 = tensor.extract_slice %inserted_slice_108[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_111 = tensor.extract_slice %extracted_slice_109[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_112 = tensor.extract_slice %extracted_slice_90[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_113 = tensor.extract_slice %extracted_slice_110[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_114 = tensor.extract_slice %extracted_slice_111[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_115 = tensor.extract %extracted_slice_114[] : tensor -# CHECK-NEXT: %71 = vector.broadcast %extracted_115 : f32 to vector<16xf32> -# CHECK-NEXT: %72 = vector.transfer_read %extracted_slice_112[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %73 = vector.transfer_read %extracted_slice_113[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %70 = vector.transfer_write %69, %extracted_slice_95[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_97 = tensor.insert_slice %70 into %extracted_slice_92[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_98 = tensor.insert_slice %inserted_slice_97 into %inserted_slice_90[0, 0, %c1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_99 = tensor.extract_slice %extracted_slice_81[0, 0, %c4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_100 = tensor.extract_slice %inserted_slice_98[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_101 = tensor.extract_slice %extracted_slice_99[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_102 = tensor.extract_slice %extracted_slice_82[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_103 = tensor.extract_slice %extracted_slice_100[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_104 = tensor.extract %extracted_slice_101[] : tensor +# CHECK-NEXT: %71 = vector.broadcast %extracted_104 : f32 to vector<16xf32> +# CHECK-NEXT: %72 = vector.transfer_read %extracted_slice_102[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %73 = vector.transfer_read %extracted_slice_103[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %74 = arith.mulf %71, %72 fastmath : vector<16xf32> # CHECK-NEXT: %75 = arith.addf %73, %74 fastmath : vector<16xf32> -# CHECK-NEXT: %76 = vector.transfer_write %75, %extracted_slice_113[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_116 = tensor.insert_slice %76 into %extracted_slice_110[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_117 = tensor.insert_slice %inserted_slice_116 into %inserted_slice_108[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: %extracted_slice_118 = tensor.extract_slice %extracted_slice_89[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> -# CHECK-NEXT: %extracted_slice_119 = tensor.extract_slice %inserted_slice_117[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> -# CHECK-NEXT: %extracted_slice_120 = tensor.extract_slice %extracted_slice_118[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor<1x1xf32> -# CHECK-NEXT: %extracted_slice_121 = tensor.extract_slice %extracted_slice_90[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_122 = tensor.extract_slice %extracted_slice_119[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> -# CHECK-NEXT: %extracted_slice_123 = tensor.extract_slice %extracted_slice_120[0, 0] [1, 1] [1, 1] : tensor<1x1xf32> to tensor -# CHECK-NEXT: %extracted_124 = tensor.extract %extracted_slice_123[] : tensor -# CHECK-NEXT: %77 = vector.broadcast %extracted_124 : f32 to vector<16xf32> -# CHECK-NEXT: %78 = vector.transfer_read %extracted_slice_121[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> -# CHECK-NEXT: %79 = vector.transfer_read %extracted_slice_122[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %76 = vector.transfer_write %75, %extracted_slice_103[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_105 = tensor.insert_slice %76 into %extracted_slice_100[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_106 = tensor.insert_slice %inserted_slice_105 into %inserted_slice_98[0, 0, %c2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: %extracted_slice_107 = tensor.extract_slice %extracted_slice_81[0, 0, %c6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x7x1xf32> to tensor<1x1x1x1xf32> +# CHECK-NEXT: %extracted_slice_108 = tensor.extract_slice %inserted_slice_106[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x4x16xf32> to tensor<1x1x1x16xf32> +# CHECK-NEXT: %extracted_slice_109 = tensor.extract_slice %extracted_slice_107[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : tensor<1x1x1x1xf32> to tensor +# CHECK-NEXT: %extracted_slice_110 = tensor.extract_slice %extracted_slice_82[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_slice_111 = tensor.extract_slice %extracted_slice_108[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> to tensor<16xf32> +# CHECK-NEXT: %extracted_112 = tensor.extract %extracted_slice_109[] : tensor +# CHECK-NEXT: %77 = vector.broadcast %extracted_112 : f32 to vector<16xf32> +# CHECK-NEXT: %78 = vector.transfer_read %extracted_slice_110[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> +# CHECK-NEXT: %79 = vector.transfer_read %extracted_slice_111[%c0], %0 {in_bounds = [true]} : tensor<16xf32>, vector<16xf32> # CHECK-NEXT: %80 = arith.mulf %77, %78 fastmath : vector<16xf32> # CHECK-NEXT: %81 = arith.addf %79, %80 fastmath : vector<16xf32> -# CHECK-NEXT: %82 = vector.transfer_write %81, %extracted_slice_122[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> -# CHECK-NEXT: %inserted_slice_125 = tensor.insert_slice %82 into %extracted_slice_119[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> -# CHECK-NEXT: %inserted_slice_126 = tensor.insert_slice %inserted_slice_125 into %inserted_slice_117[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> -# CHECK-NEXT: scf.yield %inserted_slice_126 : tensor<1x1x4x16xf32> +# CHECK-NEXT: %82 = vector.transfer_write %81, %extracted_slice_111[%c0] {in_bounds = [true]} : vector<16xf32>, tensor<16xf32> +# CHECK-NEXT: %inserted_slice_113 = tensor.insert_slice %82 into %extracted_slice_108[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<16xf32> into tensor<1x1x1x16xf32> +# CHECK-NEXT: %inserted_slice_114 = tensor.insert_slice %inserted_slice_113 into %inserted_slice_106[0, 0, %c3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : tensor<1x1x1x16xf32> into tensor<1x1x4x16xf32> +# CHECK-NEXT: scf.yield %inserted_slice_114 : tensor<1x1x4x16xf32> # CHECK-NEXT: } {"./s"} # CHECK-NEXT: scf.yield %10 : tensor<1x1x4x16xf32> # CHECK-NEXT: } {"./r"} @@ -445,194 +433,182 @@ # CHECK-NEXT: %subview_14 = memref.subview %subview_12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> # CHECK-NEXT: %subview_15 = memref.subview %subview_13[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> # CHECK-NEXT: %subview_16 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_17 = memref.subview %subview_15[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> +# CHECK-NEXT: %subview_17 = memref.subview %subview_15[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> # CHECK-NEXT: %subview_18 = memref.subview %subview_14[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> # CHECK-NEXT: %subview_19 = memref.subview %subview_16[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_20 = memref.subview %subview_17[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %9 = memref.load %subview_20[] : memref> +# CHECK-NEXT: %9 = memref.load %subview_17[] : memref> # CHECK-NEXT: %10 = vector.broadcast %9 : f32 to vector<16xf32> # CHECK-NEXT: %11 = vector.transfer_read %subview_18[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %12 = vector.transfer_read %subview_19[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %13 = arith.mulf %10, %11 fastmath : vector<16xf32> # CHECK-NEXT: %14 = arith.addf %12, %13 fastmath : vector<16xf32> # CHECK-NEXT: vector.transfer_write %14, %subview_19[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_21 = memref.subview %subview_16[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_19, %subview_21 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_22 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_16, %subview_22 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_23 = memref.subview %subview_13[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_24 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_25 = memref.subview %subview_23[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_26 = memref.subview %subview_24[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_27 = memref.subview %subview_25[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %15 = memref.load %subview_27[] : memref> +# CHECK-NEXT: %subview_20 = memref.subview %subview_16[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_19, %subview_20 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_21 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_16, %subview_21 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_22 = memref.subview %subview_13[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_23 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_24 = memref.subview %subview_22[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_25 = memref.subview %subview_23[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %15 = memref.load %subview_24[] : memref> # CHECK-NEXT: %16 = vector.broadcast %15 : f32 to vector<16xf32> -# CHECK-NEXT: %17 = vector.transfer_read %subview_26[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %17 = vector.transfer_read %subview_25[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %18 = arith.mulf %16, %11 fastmath : vector<16xf32> # CHECK-NEXT: %19 = arith.addf %17, %18 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %19, %subview_26[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_28 = memref.subview %subview_24[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_26, %subview_28 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_29 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_24, %subview_29 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_30 = memref.subview %subview_13[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_31 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_32 = memref.subview %subview_30[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_33 = memref.subview %subview_31[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_34 = memref.subview %subview_32[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %20 = memref.load %subview_34[] : memref> +# CHECK-NEXT: vector.transfer_write %19, %subview_25[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_26 = memref.subview %subview_23[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_25, %subview_26 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_27 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_23, %subview_27 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_28 = memref.subview %subview_13[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_29 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_30 = memref.subview %subview_28[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_31 = memref.subview %subview_29[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %20 = memref.load %subview_30[] : memref> # CHECK-NEXT: %21 = vector.broadcast %20 : f32 to vector<16xf32> -# CHECK-NEXT: %22 = vector.transfer_read %subview_33[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %22 = vector.transfer_read %subview_31[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %23 = arith.mulf %21, %11 fastmath : vector<16xf32> # CHECK-NEXT: %24 = arith.addf %22, %23 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %24, %subview_33[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_35 = memref.subview %subview_31[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_33, %subview_35 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_36 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_31, %subview_36 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_37 = memref.subview %subview_13[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_38 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_39 = memref.subview %subview_37[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_40 = memref.subview %subview_38[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_41 = memref.subview %subview_39[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %25 = memref.load %subview_41[] : memref> +# CHECK-NEXT: vector.transfer_write %24, %subview_31[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_32 = memref.subview %subview_29[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_31, %subview_32 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_33 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_29, %subview_33 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_34 = memref.subview %subview_13[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_35 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_36 = memref.subview %subview_34[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_37 = memref.subview %subview_35[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %25 = memref.load %subview_36[] : memref> # CHECK-NEXT: %26 = vector.broadcast %25 : f32 to vector<16xf32> -# CHECK-NEXT: %27 = vector.transfer_read %subview_40[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %27 = vector.transfer_read %subview_37[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %28 = arith.mulf %26, %11 fastmath : vector<16xf32> # CHECK-NEXT: %29 = arith.addf %27, %28 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %29, %subview_40[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_42 = memref.subview %subview_38[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_40, %subview_42 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_43 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_38, %subview_43 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_44 = memref.subview %subview_11[0, 0, 0, 1] [1, 1, 7, 1] [1, 1, 1, 1] : memref<1x1x7x3xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_45 = memref.subview %subview_12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_46 = memref.subview %subview_44[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_47 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_48 = memref.subview %subview_46[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_49 = memref.subview %subview_45[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_50 = memref.subview %subview_47[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_51 = memref.subview %subview_48[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %30 = memref.load %subview_51[] : memref> +# CHECK-NEXT: vector.transfer_write %29, %subview_37[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_38 = memref.subview %subview_35[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_37, %subview_38 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_39 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_35, %subview_39 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_40 = memref.subview %subview_11[0, 0, 0, 1] [1, 1, 7, 1] [1, 1, 1, 1] : memref<1x1x7x3xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_41 = memref.subview %subview_12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_42 = memref.subview %subview_40[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_43 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_44 = memref.subview %subview_42[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_45 = memref.subview %subview_41[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_46 = memref.subview %subview_43[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %30 = memref.load %subview_44[] : memref> # CHECK-NEXT: %31 = vector.broadcast %30 : f32 to vector<16xf32> -# CHECK-NEXT: %32 = vector.transfer_read %subview_49[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> -# CHECK-NEXT: %33 = vector.transfer_read %subview_50[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %32 = vector.transfer_read %subview_45[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %33 = vector.transfer_read %subview_46[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %34 = arith.mulf %31, %32 fastmath : vector<16xf32> # CHECK-NEXT: %35 = arith.addf %33, %34 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %35, %subview_50[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_52 = memref.subview %subview_47[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_50, %subview_52 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_53 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_47, %subview_53 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_54 = memref.subview %subview_44[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_55 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_56 = memref.subview %subview_54[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_57 = memref.subview %subview_55[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_58 = memref.subview %subview_56[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %36 = memref.load %subview_58[] : memref> +# CHECK-NEXT: vector.transfer_write %35, %subview_46[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_47 = memref.subview %subview_43[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_46, %subview_47 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_48 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_43, %subview_48 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_49 = memref.subview %subview_40[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_50 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_51 = memref.subview %subview_49[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_52 = memref.subview %subview_50[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %36 = memref.load %subview_51[] : memref> # CHECK-NEXT: %37 = vector.broadcast %36 : f32 to vector<16xf32> -# CHECK-NEXT: %38 = vector.transfer_read %subview_57[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %38 = vector.transfer_read %subview_52[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %39 = arith.mulf %37, %32 fastmath : vector<16xf32> # CHECK-NEXT: %40 = arith.addf %38, %39 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %40, %subview_57[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_59 = memref.subview %subview_55[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_57, %subview_59 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_60 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_55, %subview_60 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_61 = memref.subview %subview_44[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_62 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_63 = memref.subview %subview_61[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_64 = memref.subview %subview_62[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_65 = memref.subview %subview_63[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %41 = memref.load %subview_65[] : memref> +# CHECK-NEXT: vector.transfer_write %40, %subview_52[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_53 = memref.subview %subview_50[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_52, %subview_53 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_54 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_50, %subview_54 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_55 = memref.subview %subview_40[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_56 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_57 = memref.subview %subview_55[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_58 = memref.subview %subview_56[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %41 = memref.load %subview_57[] : memref> # CHECK-NEXT: %42 = vector.broadcast %41 : f32 to vector<16xf32> -# CHECK-NEXT: %43 = vector.transfer_read %subview_64[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %43 = vector.transfer_read %subview_58[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %44 = arith.mulf %42, %32 fastmath : vector<16xf32> # CHECK-NEXT: %45 = arith.addf %43, %44 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %45, %subview_64[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_66 = memref.subview %subview_62[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_64, %subview_66 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_67 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_62, %subview_67 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_68 = memref.subview %subview_44[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_69 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_70 = memref.subview %subview_68[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_71 = memref.subview %subview_69[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_72 = memref.subview %subview_70[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %46 = memref.load %subview_72[] : memref> +# CHECK-NEXT: vector.transfer_write %45, %subview_58[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_59 = memref.subview %subview_56[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_58, %subview_59 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_60 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_56, %subview_60 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_61 = memref.subview %subview_40[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_62 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_63 = memref.subview %subview_61[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_64 = memref.subview %subview_62[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %46 = memref.load %subview_63[] : memref> # CHECK-NEXT: %47 = vector.broadcast %46 : f32 to vector<16xf32> -# CHECK-NEXT: %48 = vector.transfer_read %subview_71[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %48 = vector.transfer_read %subview_64[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %49 = arith.mulf %47, %32 fastmath : vector<16xf32> # CHECK-NEXT: %50 = arith.addf %48, %49 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %50, %subview_71[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_73 = memref.subview %subview_69[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_71, %subview_73 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_74 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_69, %subview_74 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_75 = memref.subview %subview_11[0, 0, 0, 2] [1, 1, 7, 1] [1, 1, 1, 1] : memref<1x1x7x3xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_76 = memref.subview %subview_12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_77 = memref.subview %subview_75[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_78 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_79 = memref.subview %subview_77[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_80 = memref.subview %subview_76[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_81 = memref.subview %subview_78[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_82 = memref.subview %subview_79[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %51 = memref.load %subview_82[] : memref> +# CHECK-NEXT: vector.transfer_write %50, %subview_64[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_65 = memref.subview %subview_62[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_64, %subview_65 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_66 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_62, %subview_66 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_67 = memref.subview %subview_11[0, 0, 0, 2] [1, 1, 7, 1] [1, 1, 1, 1] : memref<1x1x7x3xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_68 = memref.subview %subview_12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x3x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_69 = memref.subview %subview_67[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_70 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_71 = memref.subview %subview_69[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_72 = memref.subview %subview_68[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[1344, 192, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_73 = memref.subview %subview_70[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %51 = memref.load %subview_71[] : memref> # CHECK-NEXT: %52 = vector.broadcast %51 : f32 to vector<16xf32> -# CHECK-NEXT: %53 = vector.transfer_read %subview_80[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> -# CHECK-NEXT: %54 = vector.transfer_read %subview_81[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %53 = vector.transfer_read %subview_72[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %54 = vector.transfer_read %subview_73[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %55 = arith.mulf %52, %53 fastmath : vector<16xf32> # CHECK-NEXT: %56 = arith.addf %54, %55 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %56, %subview_81[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_83 = memref.subview %subview_78[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_81, %subview_83 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_84 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_78, %subview_84 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_85 = memref.subview %subview_75[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_86 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_87 = memref.subview %subview_85[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_88 = memref.subview %subview_86[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_89 = memref.subview %subview_87[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %57 = memref.load %subview_89[] : memref> +# CHECK-NEXT: vector.transfer_write %56, %subview_73[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_74 = memref.subview %subview_70[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_73, %subview_74 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_75 = memref.subview %arg12[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_70, %subview_75 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_76 = memref.subview %subview_67[0, 0, 2, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_77 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_78 = memref.subview %subview_76[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_79 = memref.subview %subview_77[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %57 = memref.load %subview_78[] : memref> # CHECK-NEXT: %58 = vector.broadcast %57 : f32 to vector<16xf32> -# CHECK-NEXT: %59 = vector.transfer_read %subview_88[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %59 = vector.transfer_read %subview_79[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %60 = arith.mulf %58, %53 fastmath : vector<16xf32> # CHECK-NEXT: %61 = arith.addf %59, %60 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %61, %subview_88[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_90 = memref.subview %subview_86[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_88, %subview_90 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_91 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_86, %subview_91 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_92 = memref.subview %subview_75[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_93 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_94 = memref.subview %subview_92[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_95 = memref.subview %subview_93[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_96 = memref.subview %subview_94[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %62 = memref.load %subview_96[] : memref> +# CHECK-NEXT: vector.transfer_write %61, %subview_79[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_80 = memref.subview %subview_77[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_79, %subview_80 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_81 = memref.subview %arg12[0, 0, 1, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_77, %subview_81 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_82 = memref.subview %subview_67[0, 0, 4, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_83 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_84 = memref.subview %subview_82[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_85 = memref.subview %subview_83[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %62 = memref.load %subview_84[] : memref> # CHECK-NEXT: %63 = vector.broadcast %62 : f32 to vector<16xf32> -# CHECK-NEXT: %64 = vector.transfer_read %subview_95[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %64 = vector.transfer_read %subview_85[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %65 = arith.mulf %63, %53 fastmath : vector<16xf32> # CHECK-NEXT: %66 = arith.addf %64, %65 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %66, %subview_95[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_97 = memref.subview %subview_93[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_95, %subview_97 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_98 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_93, %subview_98 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_99 = memref.subview %subview_75[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> -# CHECK-NEXT: %subview_100 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: %subview_101 = memref.subview %subview_99[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1xf32, strided<[158700, 690], offset: ?>> -# CHECK-NEXT: %subview_102 = memref.subview %subview_100[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_103 = memref.subview %subview_101[0, 0] [1, 1] [1, 1] : memref<1x1xf32, strided<[158700, 690], offset: ?>> to memref> -# CHECK-NEXT: %67 = memref.load %subview_103[] : memref> +# CHECK-NEXT: vector.transfer_write %66, %subview_85[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_86 = memref.subview %subview_83[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_85, %subview_86 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_87 = memref.subview %arg12[0, 0, 2, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_83, %subview_87 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_88 = memref.subview %subview_67[0, 0, 6, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x7x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> +# CHECK-NEXT: %subview_89 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: %subview_90 = memref.subview %subview_88[0, 0, 0, 0] [1, 1, 1, 1] [1, 1, 1, 1] : memref<1x1x1x1xf32, strided<[158700, 690, 3, 1], offset: ?>> to memref> +# CHECK-NEXT: %subview_91 = memref.subview %subview_89[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %67 = memref.load %subview_90[] : memref> # CHECK-NEXT: %68 = vector.broadcast %67 : f32 to vector<16xf32> -# CHECK-NEXT: %69 = vector.transfer_read %subview_102[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> +# CHECK-NEXT: %69 = vector.transfer_read %subview_91[%c0], %0 {in_bounds = [true]} : memref<16xf32, strided<[1], offset: ?>>, vector<16xf32> # CHECK-NEXT: %70 = arith.mulf %68, %53 fastmath : vector<16xf32> # CHECK-NEXT: %71 = arith.addf %69, %70 fastmath : vector<16xf32> -# CHECK-NEXT: vector.transfer_write %71, %subview_102[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_104 = memref.subview %subview_100[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_102, %subview_104 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> -# CHECK-NEXT: %subview_105 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> -# CHECK-NEXT: memref.copy %subview_100, %subview_105 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: vector.transfer_write %71, %subview_91[%c0] {in_bounds = [true]} : vector<16xf32>, memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_92 = memref.subview %subview_89[0, 0, 0, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_91, %subview_92 : memref<16xf32, strided<[1], offset: ?>> to memref<16xf32, strided<[1], offset: ?>> +# CHECK-NEXT: %subview_93 = memref.subview %arg12[0, 0, 3, 0] [1, 1, 1, 16] [1, 1, 1, 1] : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> +# CHECK-NEXT: memref.copy %subview_89, %subview_93 : memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> to memref<1x1x1x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> # CHECK-NEXT: scf.yield %arg12 : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> # CHECK-NEXT: } {"./s"} # CHECK-NEXT: scf.yield %8 : memref<1x1x4x16xf32, strided<[802816, 7168, 64, 1], offset: ?>> diff --git a/tests/filecheck/backends/tensor_dialect/test_pad_conv2d_mlir_tensor_fused.py b/tests/filecheck/backends/tensor_dialect/test_pad_conv2d_mlir_tensor_fused.py index 0177859b..fc3ac15c 100644 --- a/tests/filecheck/backends/tensor_dialect/test_pad_conv2d_mlir_tensor_fused.py +++ b/tests/filecheck/backends/tensor_dialect/test_pad_conv2d_mlir_tensor_fused.py @@ -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 # 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 -# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_16[] : tensor +# CHECK-NEXT: %extracted = tensor.extract %extracted_slice_13[] : tensor # 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 : vector<16xf32> # CHECK-NEXT: %17 = arith.addf %15, %16 fastmath : 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"} @@ -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> # 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> -# CHECK-NEXT: %6 = memref.load %subview_12[] : memref> +# CHECK-NEXT: %6 = memref.load %subview_9[] : memref> # 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 : vector<16xf32> # CHECK-NEXT: %11 = arith.addf %9, %10 fastmath : 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: ?>> diff --git a/tests/filecheck/mlir_loop/gen_assembly/skylake_split_matmul.mlir b/tests/filecheck/mlir_loop/gen_assembly/skylake_split_matmul.mlir index daa54f48..cfc0cbdc 100644 --- a/tests/filecheck/mlir_loop/gen_assembly/skylake_split_matmul.mlir +++ b/tests/filecheck/mlir_loop/gen_assembly/skylake_split_matmul.mlir @@ -59,7 +59,6 @@ func.func @myfun( // CHECK-NEXT: cmp $0x1ff,%rcx // CHECK-NEXT: lea 0x1(%rcx),%rcx // CHECK-NEXT: jb -// CHECK-NEXT: add $0x800,%rdx // CHECK-NEXT: add $0x1c00,%rsi // CHECK-NEXT: add $0x101c,%rdi // CHECK-NEXT: xor %eax,%eax @@ -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 @@ -154,20 +153,20 @@ func.func @myfun( // CHECK-NEXT: add $0x2000,%r11 // CHECK-NEXT: cmp $0x1f8,%r10 // CHECK-NEXT: jb -// 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 +// CHECK-NEXT: jb // CHECK-NEXT: add $0x800,%rdi // CHECK-NEXT: cmp $0xff,%rax // CHECK-NEXT: lea 0x1(%rax),%rax -// CHECK-NEXT: jb -// CHECK-NEXT: vzeroupper +// CHECK-NEXT: jb +// CHECK-NEXT: vzeroupper