mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-26 23:21:11 +00:00
[mlir][bufferization] Clone simplify fails when input and result type not cast compatiable (#71310)
The simplify of bufferization.clone generates a memref.cast op, but the checks in simplify do not verify whether the operand types and return types of clone op is compatiable, leading to errors. This patch addresses this issue.
This commit is contained in:
parent
6fdc2ce8c5
commit
eaa4b6cf29
@ -457,6 +457,11 @@ struct SimplifyClones : public OpRewritePattern<CloneOp> {
|
||||
}
|
||||
|
||||
Value source = cloneOp.getInput();
|
||||
if (source.getType() != cloneOp.getType() &&
|
||||
!memref::CastOp::areCastCompatible({source.getType()},
|
||||
{cloneOp.getType()}))
|
||||
return failure();
|
||||
|
||||
// Aims to find the dealloc op for the canonical source
|
||||
// which otherwise could prevent removal of unnecessary allocs.
|
||||
Value canonicalSource = source;
|
||||
|
@ -156,6 +156,18 @@ func.func @clone_and_cast(%arg0: memref<?xf32>) -> memref<32xf32> {
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @clone_incompatible
|
||||
func.func @clone_incompatible(%arg0: memref<32xf32, strided<[2]>>) -> memref<32xf32> {
|
||||
%0 = bufferization.clone %arg0 : memref<32xf32, strided<[2]>> to memref<32xf32>
|
||||
memref.dealloc %arg0 : memref<32xf32, strided<[2]>>
|
||||
return %0 : memref<32xf32>
|
||||
}
|
||||
// CHECK-SAME: %[[ARG:.*]]: memref<32xf32, strided<[2]>>
|
||||
// CHECK-NEXT: bufferization.clone %[[ARG]] : memref<32xf32, strided<[2]>> to memref<32xf32>
|
||||
// CHECK-NOT: memref.cast
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @alias_is_freed
|
||||
func.func @alias_is_freed(%arg0 : memref<?xf32>) {
|
||||
%0 = memref.cast %arg0 : memref<?xf32> to memref<32xf32>
|
||||
|
Loading…
Reference in New Issue
Block a user