[Mlir-commits] [mlir] 5032fa8 - [MLIR][EmitC] Allow ptrdiff_t as result in sub op (#104921)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Aug 20 08:36:55 PDT 2024
Author: Marius Brehler
Date: 2024-08-20T17:36:51+02:00
New Revision: 5032fa89ad1ea1b460a0b9ef1375d7c868db1712
URL: https://github.com/llvm/llvm-project/commit/5032fa89ad1ea1b460a0b9ef1375d7c868db1712
DIFF: https://github.com/llvm/llvm-project/commit/5032fa89ad1ea1b460a0b9ef1375d7c868db1712.diff
LOG: [MLIR][EmitC] Allow ptrdiff_t as result in sub op (#104921)
This explicitly allows the `emitc.ptrdiff_t` type for the result of
substrating two pointers and changes the example accordingly.
Added:
Modified:
mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
mlir/lib/Dialect/EmitC/IR/EmitC.cpp
mlir/test/Dialect/EmitC/invalid_ops.mlir
mlir/test/Dialect/EmitC/ops.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
index b8f9b7be372703..5122da599b4ce4 100644
--- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
+++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
@@ -924,7 +924,7 @@ def EmitC_SubOp : EmitC_BinaryOp<"sub", [CExpression]> {
%0 = emitc.sub %arg0, %arg1 : (i32, i32) -> i32
%1 = emitc.sub %arg2, %arg3 : (!emitc.ptr<f32>, i32) -> !emitc.ptr<f32>
%2 = emitc.sub %arg4, %arg5 : (!emitc.ptr<i32>, !emitc.ptr<i32>)
- -> !emitc.opaque<"ptr
diff _t">
+ -> !emitc.ptr
diff _t
```
```c++
// Code emitted for the operations above.
diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
index a7f033fc1ea37b..e6f1618cc26116 100644
--- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
+++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp
@@ -808,9 +808,9 @@ LogicalResult SubOp::verify() {
"type if lhs is a pointer");
if (isa<emitc::PointerType>(lhsType) && isa<emitc::PointerType>(rhsType) &&
- !isa<IntegerType, emitc::OpaqueType>(resultType))
- return emitOpError("requires that the result is an integer or of opaque "
- "type if lhs and rhs are pointers");
+ !isa<IntegerType, emitc::PtrDiffTType, emitc::OpaqueType>(resultType))
+ return emitOpError("requires that the result is an integer, ptr
diff _t or "
+ "of opaque type if lhs and rhs are pointers");
return success();
}
diff --git a/mlir/test/Dialect/EmitC/invalid_ops.mlir b/mlir/test/Dialect/EmitC/invalid_ops.mlir
index fda2ffa5642d2d..a0d8d7f59de115 100644
--- a/mlir/test/Dialect/EmitC/invalid_ops.mlir
+++ b/mlir/test/Dialect/EmitC/invalid_ops.mlir
@@ -212,7 +212,7 @@ func.func @sub_pointer_float(%arg0: !emitc.ptr<f32>, %arg1: f32) {
// -----
func.func @sub_pointer_pointer(%arg0: !emitc.ptr<f32>, %arg1: !emitc.ptr<f32>) {
- // expected-error @+1 {{'emitc.sub' op requires that the result is an integer or of opaque type if lhs and rhs are pointers}}
+ // expected-error @+1 {{'emitc.sub' op requires that the result is an integer, ptr
diff _t or of opaque type if lhs and rhs are pointers}}
%1 = "emitc.sub" (%arg0, %arg1) : (!emitc.ptr<f32>, !emitc.ptr<f32>) -> !emitc.ptr<f32>
return
}
diff --git a/mlir/test/Dialect/EmitC/ops.mlir b/mlir/test/Dialect/EmitC/ops.mlir
index b0a95b8940cc7e..7fd0a2d020397b 100644
--- a/mlir/test/Dialect/EmitC/ops.mlir
+++ b/mlir/test/Dialect/EmitC/ops.mlir
@@ -116,6 +116,7 @@ func.func @sub_pointer(%arg0: !emitc.ptr<f32>, %arg1: i32, %arg2: !emitc.opaque<
%2 = "emitc.sub" (%arg0, %arg2) : (!emitc.ptr<f32>, !emitc.opaque<"unsigned int">) -> !emitc.ptr<f32>
%3 = "emitc.sub" (%arg0, %arg3) : (!emitc.ptr<f32>, !emitc.ptr<f32>) -> !emitc.opaque<"ptr
diff _t">
%4 = "emitc.sub" (%arg0, %arg3) : (!emitc.ptr<f32>, !emitc.ptr<f32>) -> i32
+ %5 = "emitc.sub" (%arg0, %arg3) : (!emitc.ptr<f32>, !emitc.ptr<f32>) -> !emitc.ptr
diff _t
return
}
More information about the Mlir-commits
mailing list