Skip to content

Commit 052f472

Browse files
[mlir][bufferization] Fix invalid IR in SimplifyClones canonicalization
`SimplifyClones` used to generate an invalid op: ``` error: 'memref.cast' op operand type 'memref<*xf32>' and result type 'memref<*xf32>' are cast incompatible %2 = bufferization.clone %1 : memref<*xf32> to memref<*xf32 ``` This commit fixes tests such as `mlir/test/Dialect/Bufferization/canonicalize.mlir` when verifying the IR after each pattern (llvm#74270).
1 parent 6688657 commit 052f472

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

mlir/lib/Dialect/Bufferization/IR/BufferizationOps.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,10 @@ struct SimplifyClones : public OpRewritePattern<CloneOp> {
507507
return failure();
508508
}
509509

510-
rewriter.replaceOpWithNewOp<memref::CastOp>(cloneOp, cloneOp.getType(),
511-
source);
510+
if (source.getType() != cloneOp.getType())
511+
source = rewriter.create<memref::CastOp>(cloneOp.getLoc(),
512+
cloneOp.getType(), source);
513+
rewriter.replaceOp(cloneOp, source);
512514
rewriter.eraseOp(redundantDealloc);
513515
return success();
514516
}

0 commit comments

Comments
 (0)