[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