[Mlir-commits] [mlir] Expand the MemRefToEmitC pass - Lowering `AllocOp` (PR #148257)
Gil Rapaport
llvmlistbot at llvm.org
Wed Jul 16 10:01:46 PDT 2025
================
@@ -77,6 +77,43 @@ struct ConvertAlloca final : public OpConversionPattern<memref::AllocaOp> {
}
};
+struct ConvertAlloc final : public OpConversionPattern<memref::AllocOp> {
+ using OpConversionPattern::OpConversionPattern;
+ LogicalResult
+ matchAndRewrite(memref::AllocOp allocOp, OpAdaptor operands,
+ ConversionPatternRewriter &rewriter) const override {
+ mlir::Location loc = allocOp.getLoc();
+ auto memrefType = allocOp.getType();
+ if (!memrefType.hasStaticShape())
+ // TODO: Handle Dynamic shapes in the future. If the size
+ // of the allocation is the result of some function, we could
+ // potentially evaluate the function and use the result in the call to
+ // allocate.
+ return rewriter.notifyMatchFailure(
+ allocOp.getLoc(), "cannot transform alloc op with dynamic shape");
+
+ // TODO: Is there a better API to determine the number of bits in a byte in
+ // MLIR?
+ int64_t totalSize = memrefType.getNumElements() *
+ memrefType.getElementTypeBitWidth() / CHAR_BIT;
+ if (auto alignment = allocOp.getAlignment()) {
+ int64_t alignVal = alignment.value();
+ totalSize = (totalSize + alignVal - 1) / alignVal * alignVal;
----------------
aniragil wrote:
Adding the alignment value to the size won't affect alignment by itself. It could be used for emitting code that moves the start address to an aligned address, but that doesn't seem to be done here, and doing so would create another problem - the aligned pointer will not be the allocated address which should later be passed to `free()` (which is why LLVM-dialect memref descriptors carry both `allocated` and `aligned` pointers). I think lowering to a single pointer would be safe when there's no alignment requirement and when the alignment required is under the target's `malloc()` alignment. WDYT @marbre, @simon-camp, @mgehre-amd?
https://github.com/llvm/llvm-project/pull/148257
More information about the Mlir-commits
mailing list