| 
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