[Mlir-commits] [mlir] Refactor ConvertAlloc (PR #158081)
Jaden Angella
llvmlistbot at llvm.org
Thu Sep 11 07:03:26 PDT 2025
https://github.com/Jaddyen created https://github.com/llvm/llvm-project/pull/158081
This 'ConvertAlloc' uses the same API as the other conversions: `calculateMemrefTotalSizeBytes`.
>From 72e9553feda95311b54a0325d1f35cc9575ae41e Mon Sep 17 00:00:00 2001
From: Jaddyen <jadenangela8 at gmail.com>
Date: Thu, 11 Sep 2025 14:00:40 +0000
Subject: [PATCH] change dup
---
.../MemRefToEmitC/MemRefToEmitC.cpp | 25 ++++---------------
1 file changed, 5 insertions(+), 20 deletions(-)
diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
index 2b7bdc9a7b7f8..130e1be3a602e 100644
--- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
+++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp
@@ -153,24 +153,8 @@ struct ConvertAlloc final : public OpConversionPattern<memref::AllocOp> {
loc, "incompatible memref type for EmitC conversion");
}
- Type sizeTType = emitc::SizeTType::get(rewriter.getContext());
- Type elementType = memrefType.getElementType();
- IndexType indexType = rewriter.getIndexType();
- emitc::CallOpaqueOp sizeofElementOp = emitc::CallOpaqueOp::create(
- rewriter, loc, sizeTType, rewriter.getStringAttr("sizeof"),
- ValueRange{},
- ArrayAttr::get(rewriter.getContext(), {TypeAttr::get(elementType)}));
-
- int64_t numElements = 1;
- for (int64_t dimSize : memrefType.getShape()) {
- numElements *= dimSize;
- }
- Value numElementsValue = emitc::ConstantOp::create(
- rewriter, loc, indexType, rewriter.getIndexAttr(numElements));
-
Value totalSizeBytes =
- emitc::MulOp::create(rewriter, loc, sizeTType,
- sizeofElementOp.getResult(0), numElementsValue);
+ calculateMemrefTotalSizeBytes(loc, memrefType, rewriter);
emitc::CallOpaqueOp allocCall;
StringAttr allocFunctionName;
@@ -179,8 +163,8 @@ struct ConvertAlloc final : public OpConversionPattern<memref::AllocOp> {
if (allocOp.getAlignment()) {
allocFunctionName = rewriter.getStringAttr(alignedAllocFunctionName);
alignmentValue = emitc::ConstantOp::create(
- rewriter, loc, sizeTType,
- rewriter.getIntegerAttr(indexType,
+ rewriter, loc, emitc::SizeTType::get(rewriter.getContext()),
+ rewriter.getIntegerAttr(rewriter.getIndexType(),
allocOp.getAlignment().value_or(0)));
argsVec.push_back(alignmentValue);
} else {
@@ -196,7 +180,8 @@ struct ConvertAlloc final : public OpConversionPattern<memref::AllocOp> {
emitc::OpaqueType::get(rewriter.getContext(), "void")),
allocFunctionName, args);
- emitc::PointerType targetPointerType = emitc::PointerType::get(elementType);
+ emitc::PointerType targetPointerType =
+ emitc::PointerType::get(memrefType.getElementType());
emitc::CastOp castOp = emitc::CastOp::create(
rewriter, loc, targetPointerType, allocCall.getResult(0));
More information about the Mlir-commits
mailing list