Skip to content

Commit 295c8a6

Browse files
committed
[AutoBump] Merge with fixes of 95c2d79 (Oct 30)
2 parents 4fc4db0 + 95c2d79 commit 295c8a6

File tree

2 files changed

+37
-18
lines changed

2 files changed

+37
-18
lines changed

mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ struct ConvertMemRefToEmitCPass
4242
populateMemRefToEmitCTypeConversion(converter);
4343
populateEmitCSizeTTypeConversions(converter);
4444

45+
auto materializeAsUnrealizedCast = [](OpBuilder &builder, Type resultType,
46+
ValueRange inputs,
47+
Location loc) -> Value {
48+
if (inputs.size() != 1)
49+
return Value();
50+
51+
return builder.create<UnrealizedConversionCastOp>(loc, resultType, inputs)
52+
.getResult(0);
53+
};
54+
55+
converter.addSourceMaterialization(materializeAsUnrealizedCast);
56+
converter.addTargetMaterialization(materializeAsUnrealizedCast);
57+
4558
RewritePatternSet patterns(&getContext());
4659
populateMemRefToEmitCConversionPatterns(patterns, converter);
4760

mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
11
// RUN: mlir-opt -convert-memref-to-emitc %s -split-input-file | FileCheck %s
22

3+
// CHECK-LABEL: alloca()
4+
func.func @alloca() {
5+
// CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2xf32>
6+
%0 = memref.alloca() : memref<2xf32>
7+
return
8+
}
9+
10+
// -----
11+
312
// CHECK-LABEL: memref_store
4-
// CHECK-SAME: %[[v:.*]]: f32, %[[argi:.*]]: index, %[[argj:.*]]: index
5-
func.func @memref_store(%v : f32, %i: index, %j: index) {
6-
// CHECK: %[[j:.*]] = builtin.unrealized_conversion_cast %[[argj]] : index to !emitc.size_t
7-
// CHECK: %[[i:.*]] = builtin.unrealized_conversion_cast %[[argi]] : index to !emitc.size_t
8-
// CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<4x8xf32>
9-
%0 = memref.alloca() : memref<4x8xf32>
10-
11-
// CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[ALLOCA]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, !emitc.size_t, !emitc.size_t) -> !emitc.lvalue<f32>
13+
// CHECK-SAME: %[[buff:.*]]: memref<4x8xf32>, %[[v:.*]]: f32, %[[argi:.*]]: index, %[[argj:.*]]: index
14+
func.func @memref_store(%buff : memref<4x8xf32>, %v : f32, %i: index, %j: index) {
15+
// CHECK-NEXT: %[[j:.*]] = builtin.unrealized_conversion_cast %[[argj]] : index to !emitc.size_t
16+
// CHECK-NEXT: %[[i:.*]] = builtin.unrealized_conversion_cast %[[argi]] : index to !emitc.size_t
17+
// CHECK-NEXT: %[[BUFFER:.*]] = builtin.unrealized_conversion_cast %[[buff]] : memref<4x8xf32> to !emitc.array<4x8xf32>
18+
19+
// CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[BUFFER]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, !emitc.size_t, !emitc.size_t) -> !emitc.lvalue<f32>
1220
// CHECK-NEXT: emitc.assign %[[v]] : f32 to %[[SUBSCRIPT]] : <f32>
13-
memref.store %v, %0[%i, %j] : memref<4x8xf32>
21+
memref.store %v, %buff[%i, %j] : memref<4x8xf32>
1422
return
1523
}
1624

1725
// -----
1826

1927
// CHECK-LABEL: memref_load
20-
// CHECK-SAME: %[[argi:.*]]: index, %[[argj:.*]]: index
21-
func.func @memref_load(%i: index, %j: index) -> f32 {
22-
// CHECK: %[[j:.*]] = builtin.unrealized_conversion_cast %[[argj]] : index to !emitc.size_t
23-
// CHECK: %[[i:.*]] = builtin.unrealized_conversion_cast %[[argi]] : index to !emitc.size_t
24-
// CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<4x8xf32>
25-
%0 = memref.alloca() : memref<4x8xf32>
26-
27-
// CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[ALLOCA]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, !emitc.size_t, !emitc.size_t) -> !emitc.lvalue<f32>
28+
// CHECK-SAME: %[[buff:.*]]: memref<4x8xf32>, %[[argi:.*]]: index, %[[argj:.*]]: index
29+
func.func @memref_load(%buff : memref<4x8xf32>, %i: index, %j: index) -> f32 {
30+
// CHECK-NEXT: %[[j:.*]] = builtin.unrealized_conversion_cast %[[argj]] : index to !emitc.size_t
31+
// CHECK-NEXT: %[[i:.*]] = builtin.unrealized_conversion_cast %[[argi]] : index to !emitc.size_t
32+
// CHECK-NEXT: %[[BUFFER:.*]] = builtin.unrealized_conversion_cast %[[buff]] : memref<4x8xf32> to !emitc.array<4x8xf32>
33+
// CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[BUFFER]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, !emitc.size_t, !emitc.size_t) -> !emitc.lvalue<f32>
2834
// CHECK-NEXT: %[[LOAD:.*]] = emitc.load %[[SUBSCRIPT]] : <f32>
29-
%1 = memref.load %0[%i, %j] : memref<4x8xf32>
35+
%1 = memref.load %buff[%i, %j] : memref<4x8xf32>
3036
// CHECK-NEXT: return %[[LOAD]] : f32
3137
return %1 : f32
3238
}

0 commit comments

Comments
 (0)