[Mlir-commits] [mlir] 95c2d79 - [mlir][EmitC] memref-to-emitc: insert conversion_casts (#114204)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Oct 30 07:27:27 PDT 2024
Author: Simon Camphausen
Date: 2024-10-30T15:27:23+01:00
New Revision: 95c2d798148f12565dd4c9ddc753d196e47f230f
URL: https://github.com/llvm/llvm-project/commit/95c2d798148f12565dd4c9ddc753d196e47f230f
DIFF: https://github.com/llvm/llvm-project/commit/95c2d798148f12565dd4c9ddc753d196e47f230f.diff
LOG: [mlir][EmitC] memref-to-emitc: insert conversion_casts (#114204)
Add materializations to the conversion pass, such that types of
non-converted operands are legalized.
Added:
Modified:
mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp
mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp
index 11bfde890bce87..7f433254e95ae2 100644
--- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp
+++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitCPass.cpp
@@ -40,6 +40,19 @@ struct ConvertMemRefToEmitCPass
populateMemRefToEmitCTypeConversion(converter);
+ auto materializeAsUnrealizedCast = [](OpBuilder &builder, Type resultType,
+ ValueRange inputs,
+ Location loc) -> Value {
+ if (inputs.size() != 1)
+ return Value();
+
+ return builder.create<UnrealizedConversionCastOp>(loc, resultType, inputs)
+ .getResult(0);
+ };
+
+ converter.addSourceMaterialization(materializeAsUnrealizedCast);
+ converter.addTargetMaterialization(materializeAsUnrealizedCast);
+
RewritePatternSet patterns(&getContext());
populateMemRefToEmitCConversionPatterns(patterns, converter);
diff --git a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
index f4722da08cc40f..f5ef821cc9c058 100644
--- a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
+++ b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir
@@ -1,28 +1,35 @@
// RUN: mlir-opt -convert-memref-to-emitc %s -split-input-file | FileCheck %s
-// CHECK-LABEL: memref_store
-// CHECK-SAME: %[[v:.*]]: f32, %[[i:.*]]: index, %[[j:.*]]: index
-func.func @memref_store(%v : f32, %i: index, %j: index) {
- // CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<4x8xf32>
- %0 = memref.alloca() : memref<4x8xf32>
+// CHECK-LABEL: alloca()
+func.func @alloca() {
+ // CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2xf32>
+ %0 = memref.alloca() : memref<2xf32>
+ return
+}
- // CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[ALLOCA]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, index, index) -> !emitc.lvalue<f32>
+// -----
+
+// CHECK-LABEL: memref_store
+// CHECK-SAME: %[[buff:.*]]: memref<4x8xf32>, %[[v:.*]]: f32, %[[i:.*]]: index, %[[j:.*]]: index
+func.func @memref_store(%buff : memref<4x8xf32>, %v : f32, %i: index, %j: index) {
+ // CHECK-NEXT: %[[BUFFER:.*]] = builtin.unrealized_conversion_cast %[[buff]] : memref<4x8xf32> to !emitc.array<4x8xf32>
+
+ // CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[BUFFER]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, index, index) -> !emitc.lvalue<f32>
// CHECK-NEXT: emitc.assign %[[v]] : f32 to %[[SUBSCRIPT]] : <f32>
- memref.store %v, %0[%i, %j] : memref<4x8xf32>
+ memref.store %v, %buff[%i, %j] : memref<4x8xf32>
return
}
// -----
// CHECK-LABEL: memref_load
-// CHECK-SAME: %[[i:.*]]: index, %[[j:.*]]: index
-func.func @memref_load(%i: index, %j: index) -> f32 {
- // CHECK-NEXT: %[[ALLOCA:.*]] = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<4x8xf32>
- %0 = memref.alloca() : memref<4x8xf32>
-
- // CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[ALLOCA]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, index, index) -> !emitc.lvalue<f32>
+// CHECK-SAME: %[[buff:.*]]: memref<4x8xf32>, %[[i:.*]]: index, %[[j:.*]]: index
+func.func @memref_load(%buff : memref<4x8xf32>, %i: index, %j: index) -> f32 {
+ // CHECK-NEXT: %[[BUFFER:.*]] = builtin.unrealized_conversion_cast %[[buff]] : memref<4x8xf32> to !emitc.array<4x8xf32>
+
+ // CHECK-NEXT: %[[SUBSCRIPT:.*]] = emitc.subscript %[[BUFFER]][%[[i]], %[[j]]] : (!emitc.array<4x8xf32>, index, index) -> !emitc.lvalue<f32>
// CHECK-NEXT: %[[LOAD:.*]] = emitc.load %[[SUBSCRIPT]] : <f32>
- %1 = memref.load %0[%i, %j] : memref<4x8xf32>
+ %1 = memref.load %buff[%i, %j] : memref<4x8xf32>
// CHECK-NEXT: return %[[LOAD]] : f32
return %1 : f32
}
More information about the Mlir-commits
mailing list