Skip to content

Commit 86af151

Browse files
committed
remove trivial_metadata flag from from_ptr op
1 parent 5668074 commit 86af151

File tree

5 files changed

+14
-47
lines changed

5 files changed

+14
-47
lines changed

mlir/include/mlir/Dialect/Ptr/IR/PtrOps.td

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,24 @@ def Ptr_FromPtrOp : Pointer_Op<"from_ptr", [
3333
- The memory-space of both the `ptr` and ptr-like object must match.
3434
- The cast is Pure (no UB and side-effect free).
3535

36-
If the ptr-like object type has metadata, then the operation expects the
37-
metadata as an argument or expects that the flag `trivial_metadata` is set.
38-
If `trivial_metadata` is set, then it is assumed that the metadata can be
39-
reconstructed statically from the pointer-like type.
36+
The optional `metadata` operand exists to provide any ptr-like metadata
37+
that might be required to perform the cast.
4038

4139
Example:
4240

4341
```mlir
4442
%typed_ptr = ptr.from_ptr %ptr : !ptr.ptr<0> -> !my.ptr<f32, 0>
4543
%memref = ptr.from_ptr %ptr metadata %md : !ptr.ptr<0> -> memref<f32, 0>
46-
%memref = ptr.from_ptr %ptr trivial_metadata : !ptr.ptr<0> -> memref<f32, 0>
44+
45+
// Cast the `%ptr` to a memref without utilizing metadata.
46+
%memref = ptr.from_ptr %ptr : !ptr.ptr<0> -> memref<f32, 0>
4747
```
4848
}];
4949

50-
let arguments = (ins Ptr_PtrType:$ptr,
51-
Optional<Ptr_PtrMetadata>:$metadata,
52-
UnitProp:$hasTrivialMetadata);
50+
let arguments = (ins Ptr_PtrType:$ptr, Optional<Ptr_PtrMetadata>:$metadata);
5351
let results = (outs PtrLikeTypeInterface:$result);
5452
let assemblyFormat = [{
55-
$ptr (`metadata` $metadata^)? (`trivial_metadata` $hasTrivialMetadata^)?
56-
attr-dict `:` type($ptr) `->` type($result)
53+
$ptr (`metadata` $metadata^)? attr-dict `:` type($ptr) `->` type($result)
5754
}];
5855
let hasFolder = 1;
5956
let hasVerifier = 1;

mlir/lib/Dialect/Ptr/IR/PtrDialect.cpp

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ OpFoldResult FromPtrOp::fold(FoldAdaptor adaptor) {
6161
if (!toPtr || toPtr.getPtr().getType() != fromPtr.getType())
6262
return ptrLike;
6363
Value md = fromPtr.getMetadata();
64-
// If there's no metadata in the op, either the cast never requires metadata
65-
// or the op has the trivial metadata flag set, therefore fold.
64+
// If there's no metadata in the op fold the op.
6665
if (!md)
6766
ptrLike = toPtr.getPtr();
6867
// Fold if the metadata can be verified to be equal.
@@ -83,18 +82,6 @@ LogicalResult FromPtrOp::verify() {
8382
return emitError()
8483
<< "expected the input and output to have the same memory space";
8584
}
86-
bool hasMD = getMetadata() != Value();
87-
bool hasTrivialMD = getHasTrivialMetadata();
88-
if (hasMD && hasTrivialMD) {
89-
return emitError() << "expected either a metadata argument or the "
90-
"`trivial_metadata` flag, not both";
91-
}
92-
if (getType().hasPtrMetadata() && !(hasMD || hasTrivialMD)) {
93-
return emitError() << "expected either a metadata argument or the "
94-
"`trivial_metadata` flag to be set";
95-
}
96-
if (!getType().hasPtrMetadata() && (hasMD || hasTrivialMD))
97-
return emitError() << "expected no metadata specification";
9885
return success();
9986
}
10087

mlir/test/Dialect/Ptr/canonicalize.mlir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func.func @test_from_ptr_1(%mr: memref<f32, #ptr.generic_space>) -> memref<f32,
3535
// CHECK-NOT: ptr.from_ptr
3636
// CHECK: return %[[MEM_REF]]
3737
%ptr = ptr.to_ptr %mr : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
38-
%res = ptr.from_ptr %ptr trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
38+
%res = ptr.from_ptr %ptr : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
3939
return %res : memref<f32, #ptr.generic_space>
4040
}
4141

@@ -82,7 +82,7 @@ func.func @test_to_ptr_1(%ptr: !ptr.ptr<#ptr.generic_space>) -> !ptr.ptr<#ptr.ge
8282
// CHECK-NOT: ptr.from_ptr
8383
// CHECK-NOT: ptr.to_ptr
8484
// CHECK: return %[[PTR]]
85-
%mrf = ptr.from_ptr %ptr trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
85+
%mrf = ptr.from_ptr %ptr : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
8686
%res = ptr.to_ptr %mrf : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
8787
return %res : !ptr.ptr<#ptr.generic_space>
8888
}
@@ -94,11 +94,11 @@ func.func @test_to_ptr_2(%ptr0: !ptr.ptr<#ptr.generic_space>) -> !ptr.ptr<#ptr.g
9494
// CHECK-NOT: ptr.from_ptr
9595
// CHECK-NOT: ptr.to_ptr
9696
// CHECK: return %[[PTR]]
97-
%mrf0 = ptr.from_ptr %ptr0 trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
97+
%mrf0 = ptr.from_ptr %ptr0 : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
9898
%ptr1 = ptr.to_ptr %mrf0 : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
99-
%mrf1 = ptr.from_ptr %ptr1 trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
99+
%mrf1 = ptr.from_ptr %ptr1 : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
100100
%ptr2 = ptr.to_ptr %mrf1 : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
101-
%mrf2 = ptr.from_ptr %ptr2 trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
101+
%mrf2 = ptr.from_ptr %ptr2 : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
102102
%res = ptr.to_ptr %mrf2 : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
103103
return %res : !ptr.ptr<#ptr.generic_space>
104104
}

mlir/test/Dialect/Ptr/invalid.mlir

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,3 @@ func.func @invalid_to_ptr(%v: !ptr.ptr<#ptr.generic_space>) {
1414
%r = ptr.to_ptr %v : !ptr.ptr<#ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
1515
return
1616
}
17-
18-
// -----
19-
20-
/// Test `from_ptr` verifiers.
21-
func.func @invalid_from_ptr(%v: !ptr.ptr<#ptr.generic_space>) {
22-
// expected-error@+1 {{expected either a metadata argument or the `trivial_metadata` flag to be set}}
23-
%r = ptr.from_ptr %v : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
24-
return
25-
}
26-
27-
// -----
28-
29-
func.func @invalid_from_ptr(%v: !ptr.ptr<#ptr.generic_space>, %m: !ptr.ptr_metadata<memref<f32, #ptr.generic_space>>) {
30-
// expected-error@+1 {{expected either a metadata argument or the `trivial_metadata` flag, not both}}
31-
%r = ptr.from_ptr %v metadata %m trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
32-
return
33-
}

mlir/test/Dialect/Ptr/ops.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ func.func @cast_ops(%mr: memref<f32, #ptr.generic_space>) -> memref<f32, #ptr.ge
2424
%ptr = ptr.to_ptr %mr : memref<f32, #ptr.generic_space> -> !ptr.ptr<#ptr.generic_space>
2525
%mda = ptr.get_metadata %mr : memref<f32, #ptr.generic_space>
2626
%res = ptr.from_ptr %ptr metadata %mda : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
27-
%mr0 = ptr.from_ptr %ptr trivial_metadata : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
27+
%mr0 = ptr.from_ptr %ptr : !ptr.ptr<#ptr.generic_space> -> memref<f32, #ptr.generic_space>
2828
return %res : memref<f32, #ptr.generic_space>
2929
}

0 commit comments

Comments
 (0)