|
1 |
| -// RUN: mlir-opt -finalize-memref-to-llvm %s -split-input-file | FileCheck %s |
| 1 | +// RUN: mlir-opt -finalize-memref-to-llvm %s -split-input-file | FileCheck --check-prefixes=ALL,CHECK %s |
2 | 2 | // RUN: mlir-opt -finalize-memref-to-llvm='index-bitwidth=32' %s -split-input-file | FileCheck --check-prefix=CHECK32 %s
|
3 | 3 |
|
4 | 4 | // Same below, but using the `ConvertToLLVMPatternInterface` entry point
|
5 | 5 | // and the generic `convert-to-llvm` pass. This produces slightly different IR
|
6 | 6 | // because the conversion target is set up differently.
|
7 |
| -// RUN: mlir-opt --convert-to-llvm="filter-dialects=memref" --split-input-file %s | FileCheck --check-prefix=CHECK-INTERFACE %s |
| 7 | +// RUN: mlir-opt --convert-to-llvm="filter-dialects=memref" --split-input-file %s | FileCheck --check-prefixes=ALL,CHECK-INTERFACE %s |
| 8 | + |
| 9 | +// TODO: In some (all?) cases, CHECK and CHECK-INTERFACE outputs are identical. |
| 10 | +// Use a common prefix instead (e.g. ALL). |
8 | 11 |
|
9 | 12 | // CHECK-LABEL: func @view(
|
10 | 13 | // CHECK: %[[ARG0F:.*]]: index, %[[ARG1F:.*]]: index, %[[ARG2F:.*]]: index
|
@@ -132,6 +135,28 @@ func.func @view_empty_memref(%offset: index, %mem: memref<0xi8>) {
|
132 | 135 |
|
133 | 136 | // -----
|
134 | 137 |
|
| 138 | +// ALL-LABEL: func.func @view_memref_as_rank0( |
| 139 | +// ALL-SAME: %[[OFFSET:.*]]: index, |
| 140 | +// ALL-SAME: %[[MEM:.*]]: memref<2xi8>) { |
| 141 | +func.func @view_memref_as_rank0(%offset: index, %mem: memref<2xi8>) { |
| 142 | + |
| 143 | + // ALL: builtin.unrealized_conversion_cast %[[OFFSET]] : index to i64 |
| 144 | + // ALL: builtin.unrealized_conversion_cast %[[MEM]] : memref<2xi8> to !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> |
| 145 | + // ALL: llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64)> |
| 146 | + // ALL: llvm.extractvalue %{{.*}}[0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> |
| 147 | + // ALL: llvm.insertvalue %{{.*}}, %{{.*}}[0] : !llvm.struct<(ptr, ptr, i64)> |
| 148 | + // ALL: llvm.extractvalue %{{.*}}[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> |
| 149 | + // ALL: llvm.getelementptr %{{.*}}[%{{.*}}] : (!llvm.ptr, i64) -> !llvm.ptr, i8 |
| 150 | + // ALL: llvm.insertvalue %{{.*}}, %{{.*}}[1] : !llvm.struct<(ptr, ptr, i64)> |
| 151 | + // ALL: llvm.mlir.constant(0 : index) : i64 |
| 152 | + // ALL: llvm.insertvalue %{{.*}}, %{{.*}}[2] : !llvm.struct<(ptr, ptr, i64)> |
| 153 | + %memref_view_bf16 = memref.view %mem[%offset][] : memref<2xi8> to memref<bf16> |
| 154 | + |
| 155 | + return |
| 156 | +} |
| 157 | + |
| 158 | +// ----- |
| 159 | + |
135 | 160 | // Subviews needs to be expanded outside of the memref-to-llvm pass.
|
136 | 161 | // CHECK-LABEL: func @subview(
|
137 | 162 | // CHECK: %[[MEMREF:.*]]: memref<{{.*}}>,
|
|
0 commit comments