From a86bd7a3a5fc428899d36e312ef7bdace1689180 Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Mon, 7 Jul 2025 18:49:20 +0000 Subject: [PATCH 1/8] Initial work on memref ops --- .../MemRefToEmitC/MemRefToEmitC.cpp | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index db244d1d1cac8..742d2bfff27de 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -77,6 +77,31 @@ struct ConvertAlloca final : public OpConversionPattern { } }; +struct ConvertCopy final : public OpConversionPattern { + using OpConversionPattern::OpConversionPattern; + + LogicalResult + matchAndRewrite(memref::CopyOp op, OpAdaptor operands, + ConversionPatternRewriter &rewriter) const override { + return failure(); + } +}; + +static Type convertGlobalMemrefTypeToEmitc(MemRefType type, + const TypeConverter &typeConverter) { + Type elementType = typeConverter.convertType(type.getElementType()); + Type arrayTy = elementType; + // Shape has the outermost dim at index 0, so need to walk it backwards + auto shape = type.getShape(); + if (shape.empty()) { + arrayTy = emitc::ArrayType::get({1}, arrayTy); + } else { + // For non-zero dimensions, use the original shape + arrayTy = emitc::ArrayType::get(shape, arrayTy); + } + return arrayTy; +} + struct ConvertGlobal final : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; @@ -95,7 +120,8 @@ struct ConvertGlobal final : public OpConversionPattern { op.getLoc(), "global variable with alignment requirement is " "currently not supported"); } - auto resultTy = getTypeConverter()->convertType(op.getType()); + auto resultTy = + convertGlobalMemrefTypeToEmitc(op.getType(), *getTypeConverter()); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert result type"); @@ -114,6 +140,15 @@ struct ConvertGlobal final : public OpConversionPattern { bool externSpecifier = !staticSpecifier; Attribute initialValue = operands.getInitialValueAttr(); + if (op.getType().getRank() == 0) { + auto elementsAttr = llvm::cast(*op.getInitialValue()); + auto scalarValue = elementsAttr.getSplatValue(); + + // Convert scalar value to single-element array + initialValue = DenseElementsAttr::get( + RankedTensorType::get({1}, elementsAttr.getElementType()), + {scalarValue}); + } if (isa_and_present(initialValue)) initialValue = {}; From d62dd8d8c95106a9c836eff235a623e0b8e638be Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Thu, 10 Jul 2025 20:36:08 +0000 Subject: [PATCH 2/8] Convert scalars to constants --- .../MemRefToEmitC/MemRefToEmitC.cpp | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index 742d2bfff27de..f69a362395ef6 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -87,28 +87,13 @@ struct ConvertCopy final : public OpConversionPattern { } }; -static Type convertGlobalMemrefTypeToEmitc(MemRefType type, - const TypeConverter &typeConverter) { - Type elementType = typeConverter.convertType(type.getElementType()); - Type arrayTy = elementType; - // Shape has the outermost dim at index 0, so need to walk it backwards - auto shape = type.getShape(); - if (shape.empty()) { - arrayTy = emitc::ArrayType::get({1}, arrayTy); - } else { - // For non-zero dimensions, use the original shape - arrayTy = emitc::ArrayType::get(shape, arrayTy); - } - return arrayTy; -} - struct ConvertGlobal final : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; LogicalResult matchAndRewrite(memref::GlobalOp op, OpAdaptor operands, ConversionPatternRewriter &rewriter) const override { - + auto type = op.getType(); if (!op.getType().hasStaticShape()) { return rewriter.notifyMatchFailure( op.getLoc(), "cannot transform global with dynamic shape"); @@ -120,8 +105,23 @@ struct ConvertGlobal final : public OpConversionPattern { op.getLoc(), "global variable with alignment requirement is " "currently not supported"); } - auto resultTy = - convertGlobalMemrefTypeToEmitc(op.getType(), *getTypeConverter()); + // auto resultTy = + // convertGlobalMemrefTypeToEmitc(op.getType(), *getTypeConverter()); + Type resultTy; + Type elementType = getTypeConverter()->convertType(type.getElementType()); + auto shape = type.getShape(); + + if (shape.empty()) { + if (emitc::isSupportedFloatType(elementType)) { + resultTy = rewriter.getF32Type(); + } + if (emitc::isSupportedIntegerType(elementType)) { + resultTy = rewriter.getIntegerType(elementType.getIntOrFloatBitWidth()); + } + } else { + resultTy = emitc::ArrayType::get(shape, elementType); + } + if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert result type"); @@ -142,12 +142,7 @@ struct ConvertGlobal final : public OpConversionPattern { Attribute initialValue = operands.getInitialValueAttr(); if (op.getType().getRank() == 0) { auto elementsAttr = llvm::cast(*op.getInitialValue()); - auto scalarValue = elementsAttr.getSplatValue(); - - // Convert scalar value to single-element array - initialValue = DenseElementsAttr::get( - RankedTensorType::get({1}, elementsAttr.getElementType()), - {scalarValue}); + initialValue = elementsAttr.getSplatValue(); } if (isa_and_present(initialValue)) initialValue = {}; From 263d6e06347381262b9cf28fda74ee213179da7b Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Thu, 10 Jul 2025 23:47:46 +0000 Subject: [PATCH 3/8] global and getGlobal --- .../MemRefToEmitC/MemRefToEmitC.cpp | 48 ++++++++----------- .../MemRefToEmitC/memref-to-emitc.mlir | 4 ++ 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index f69a362395ef6..e55c8e48ad105 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -16,7 +16,9 @@ #include "mlir/Dialect/EmitC/IR/EmitC.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Builders.h" +#include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/PatternMatch.h" +#include "mlir/IR/TypeRange.h" #include "mlir/Transforms/DialectConversion.h" using namespace mlir; @@ -77,23 +79,13 @@ struct ConvertAlloca final : public OpConversionPattern { } }; -struct ConvertCopy final : public OpConversionPattern { - using OpConversionPattern::OpConversionPattern; - - LogicalResult - matchAndRewrite(memref::CopyOp op, OpAdaptor operands, - ConversionPatternRewriter &rewriter) const override { - return failure(); - } -}; - struct ConvertGlobal final : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; LogicalResult matchAndRewrite(memref::GlobalOp op, OpAdaptor operands, ConversionPatternRewriter &rewriter) const override { - auto type = op.getType(); + MemRefType type = op.getType(); if (!op.getType().hasStaticShape()) { return rewriter.notifyMatchFailure( op.getLoc(), "cannot transform global with dynamic shape"); @@ -105,22 +97,12 @@ struct ConvertGlobal final : public OpConversionPattern { op.getLoc(), "global variable with alignment requirement is " "currently not supported"); } - // auto resultTy = - // convertGlobalMemrefTypeToEmitc(op.getType(), *getTypeConverter()); + Type resultTy; - Type elementType = getTypeConverter()->convertType(type.getElementType()); - auto shape = type.getShape(); - - if (shape.empty()) { - if (emitc::isSupportedFloatType(elementType)) { - resultTy = rewriter.getF32Type(); - } - if (emitc::isSupportedIntegerType(elementType)) { - resultTy = rewriter.getIntegerType(elementType.getIntOrFloatBitWidth()); - } - } else { - resultTy = emitc::ArrayType::get(shape, elementType); - } + if (type.getRank() == 0) + resultTy = getTypeConverter()->convertType(type.getElementType()); + else + resultTy = getTypeConverter()->convertType(type); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), @@ -140,7 +122,7 @@ struct ConvertGlobal final : public OpConversionPattern { bool externSpecifier = !staticSpecifier; Attribute initialValue = operands.getInitialValueAttr(); - if (op.getType().getRank() == 0) { + if (type.getRank() == 0) { auto elementsAttr = llvm::cast(*op.getInitialValue()); initialValue = elementsAttr.getSplatValue(); } @@ -162,7 +144,17 @@ struct ConvertGetGlobal final matchAndRewrite(memref::GetGlobalOp op, OpAdaptor operands, ConversionPatternRewriter &rewriter) const override { - auto resultTy = getTypeConverter()->convertType(op.getType()); + MemRefType type = op.getType(); + Type resultTy; + if (type.getRank() == 0) + resultTy = emitc::LValueType::get( + getTypeConverter()->convertType(type.getElementType())); + else + resultTy = getTypeConverter()->convertType(type); + + if (!resultTy) + return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert type"); + if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert result type"); diff --git a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir index d37fd1de90add..445a28534325a 100644 --- a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir +++ b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir @@ -41,6 +41,8 @@ func.func @memref_load(%buff : memref<4x8xf32>, %i: index, %j: index) -> f32 { module @globals { memref.global "private" constant @internal_global : memref<3x7xf32> = dense<4.0> // CHECK-NEXT: emitc.global static const @internal_global : !emitc.array<3x7xf32> = dense<4.000000e+00> + memref.global "private" constant @__constant_xi32 : memref = dense<-1> + // CHECK-NEXT: emitc.global static const @__constant_xi32 : i32 = -1 memref.global @public_global : memref<3x7xf32> // CHECK-NEXT: emitc.global extern @public_global : !emitc.array<3x7xf32> memref.global @uninitialized_global : memref<3x7xf32> = uninitialized @@ -50,6 +52,8 @@ module @globals { func.func @use_global() { // CHECK-NEXT: emitc.get_global @public_global : !emitc.array<3x7xf32> %0 = memref.get_global @public_global : memref<3x7xf32> + // CHECK- NEXT: emitc.get_global @__constant_xi32 : !emitc.lvalue + %1 = memref.get_global @__constant_xi32 : memref return } } From 5612d99a12e510d943389f69fd04f9b05560a3a6 Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Mon, 14 Jul 2025 17:24:24 +0000 Subject: [PATCH 4/8] Use a helper when you can --- .../MemRefToEmitC/MemRefToEmitC.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index e55c8e48ad105..4c5d03f8ffe5e 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -79,13 +79,23 @@ struct ConvertAlloca final : public OpConversionPattern { } }; +Type convertMemRefType(MemRefType opTy, const TypeConverter *typeConverter) { + Type resultTy; + if (opTy.getRank() == 0) { + resultTy = typeConverter->convertType(mlir::getElementTypeOrSelf(opTy)); + } else { + resultTy = typeConverter->convertType(opTy); + } + return resultTy; +} + struct ConvertGlobal final : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; LogicalResult matchAndRewrite(memref::GlobalOp op, OpAdaptor operands, ConversionPatternRewriter &rewriter) const override { - MemRefType type = op.getType(); + MemRefType opTy = op.getType(); if (!op.getType().hasStaticShape()) { return rewriter.notifyMatchFailure( op.getLoc(), "cannot transform global with dynamic shape"); @@ -98,11 +108,7 @@ struct ConvertGlobal final : public OpConversionPattern { "currently not supported"); } - Type resultTy; - if (type.getRank() == 0) - resultTy = getTypeConverter()->convertType(type.getElementType()); - else - resultTy = getTypeConverter()->convertType(type); + Type resultTy = convertMemRefType(opTy, getTypeConverter()); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), @@ -122,7 +128,7 @@ struct ConvertGlobal final : public OpConversionPattern { bool externSpecifier = !staticSpecifier; Attribute initialValue = operands.getInitialValueAttr(); - if (type.getRank() == 0) { + if (opTy.getRank() == 0) { auto elementsAttr = llvm::cast(*op.getInitialValue()); initialValue = elementsAttr.getSplatValue(); } @@ -144,16 +150,10 @@ struct ConvertGetGlobal final matchAndRewrite(memref::GetGlobalOp op, OpAdaptor operands, ConversionPatternRewriter &rewriter) const override { - MemRefType type = op.getType(); - Type resultTy; - if (type.getRank() == 0) - resultTy = emitc::LValueType::get( - getTypeConverter()->convertType(type.getElementType())); - else - resultTy = getTypeConverter()->convertType(type); - - if (!resultTy) - return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert type"); + MemRefType opTy = op.getType(); + Type resultTy = convertMemRefType(opTy, getTypeConverter()); + if (opTy.getRank() == 0) + resultTy = emitc::LValueType::get(resultTy); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), From 2950fd0e2c5564b8006abcd6e9d5147665b0084a Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Mon, 14 Jul 2025 17:44:57 +0000 Subject: [PATCH 5/8] Lower to pointer type --- mlir/include/mlir/Dialect/EmitC/IR/EmitC.td | 6 ++++-- mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp | 2 +- mlir/lib/Dialect/EmitC/IR/EmitC.cpp | 9 +++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td index 7fe2da8f7e044..4246751f142f8 100644 --- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td +++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td @@ -1267,7 +1267,8 @@ def EmitC_GetGlobalOp : EmitC_Op<"get_global", }]; let arguments = (ins FlatSymbolRefAttr:$name); - let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result); + let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType, + EmitC_PointerType]>:$result); let assemblyFormat = "$name `:` type($result) attr-dict"; } @@ -1686,7 +1687,8 @@ def EmitC_GetFieldOp }]; let arguments = (ins FlatSymbolRefAttr:$field_name); - let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result); + let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType, + EmitC_PointerType]>:$result); let assemblyFormat = "$field_name `:` type($result) attr-dict"; } diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index 4c5d03f8ffe5e..67af76dcfb442 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -153,7 +153,7 @@ struct ConvertGetGlobal final MemRefType opTy = op.getType(); Type resultTy = convertMemRefType(opTy, getTypeConverter()); if (opTy.getRank() == 0) - resultTy = emitc::LValueType::get(resultTy); + resultTy = emitc::PointerType::get(resultTy); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index fccbca6ed05dd..7bfb12bd01699 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -1248,6 +1248,15 @@ GetGlobalOp::verifySymbolUses(SymbolTableCollection &symbolTable) { } // global has non-array type + if (auto pointerType = llvm::dyn_cast(resultType)) { + if (pointerType.getPointee() != globalType) { + return emitOpError("on pointer type expects result pointee type ") + << pointerType.getPointee() << " to match type " << globalType + << " of the global @" << getName(); + } + return success(); + } + auto lvalueType = dyn_cast(resultType); if (!lvalueType || lvalueType.getValueType() != globalType) return emitOpError("on non-array type expects result inner type ") From 82bd2b4a45de626c51716c7ff8fe60da5676eb29 Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Thu, 17 Jul 2025 19:28:44 +0000 Subject: [PATCH 6/8] Use an lvalue and apply op --- mlir/include/mlir/Dialect/EmitC/IR/EmitC.td | 6 ++---- mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp | 12 ++++++++++-- mlir/lib/Dialect/EmitC/IR/EmitC.cpp | 9 --------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td index 4246751f142f8..7fe2da8f7e044 100644 --- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td +++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td @@ -1267,8 +1267,7 @@ def EmitC_GetGlobalOp : EmitC_Op<"get_global", }]; let arguments = (ins FlatSymbolRefAttr:$name); - let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType, - EmitC_PointerType]>:$result); + let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result); let assemblyFormat = "$name `:` type($result) attr-dict"; } @@ -1687,8 +1686,7 @@ def EmitC_GetFieldOp }]; let arguments = (ins FlatSymbolRefAttr:$field_name); - let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType, - EmitC_PointerType]>:$result); + let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result); let assemblyFormat = "$field_name `:` type($result) attr-dict"; } diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index 67af76dcfb442..f7df161943d48 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -152,13 +152,21 @@ struct ConvertGetGlobal final MemRefType opTy = op.getType(); Type resultTy = convertMemRefType(opTy, getTypeConverter()); - if (opTy.getRank() == 0) - resultTy = emitc::PointerType::get(resultTy); if (!resultTy) { return rewriter.notifyMatchFailure(op.getLoc(), "cannot convert result type"); } + + if (opTy.getRank() == 0) { + auto lvalueType = emitc::LValueType::get(resultTy); + auto globalLValue = rewriter.create( + op.getLoc(), lvalueType, operands.getNameAttr()); + auto pointerType = emitc::PointerType::get(resultTy); + rewriter.replaceOpWithNewOp( + op, pointerType, rewriter.getStringAttr("&"), globalLValue); + return success(); + } rewriter.replaceOpWithNewOp(op, resultTy, operands.getNameAttr()); return success(); diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index 7bfb12bd01699..fccbca6ed05dd 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -1248,15 +1248,6 @@ GetGlobalOp::verifySymbolUses(SymbolTableCollection &symbolTable) { } // global has non-array type - if (auto pointerType = llvm::dyn_cast(resultType)) { - if (pointerType.getPointee() != globalType) { - return emitOpError("on pointer type expects result pointee type ") - << pointerType.getPointee() << " to match type " << globalType - << " of the global @" << getName(); - } - return success(); - } - auto lvalueType = dyn_cast(resultType); if (!lvalueType || lvalueType.getValueType() != globalType) return emitOpError("on non-array type expects result inner type ") From 1dc0e63e2022c48b7e795016f66c4563d29ac839 Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Thu, 17 Jul 2025 19:36:20 +0000 Subject: [PATCH 7/8] Update test file --- mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir index 445a28534325a..2b4eda37903d4 100644 --- a/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir +++ b/mlir/test/Conversion/MemRefToEmitC/memref-to-emitc.mlir @@ -52,7 +52,8 @@ module @globals { func.func @use_global() { // CHECK-NEXT: emitc.get_global @public_global : !emitc.array<3x7xf32> %0 = memref.get_global @public_global : memref<3x7xf32> - // CHECK- NEXT: emitc.get_global @__constant_xi32 : !emitc.lvalue + // CHECK-NEXT: emitc.get_global @__constant_xi32 : !emitc.lvalue + // CHECK-NEXT: emitc.apply "&"(%1) : (!emitc.lvalue) -> !emitc.ptr %1 = memref.get_global @__constant_xi32 : memref return } From bc7b8e298c3d420be63f51813bdea4cdfd0dfeda Mon Sep 17 00:00:00 2001 From: Jaddyen Date: Thu, 17 Jul 2025 19:55:08 +0000 Subject: [PATCH 8/8] remve unncessary auto --- mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp index f7df161943d48..0b7ffa40ec09d 100644 --- a/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp +++ b/mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp @@ -159,10 +159,10 @@ struct ConvertGetGlobal final } if (opTy.getRank() == 0) { - auto lvalueType = emitc::LValueType::get(resultTy); - auto globalLValue = rewriter.create( + emitc::LValueType lvalueType = emitc::LValueType::get(resultTy); + emitc::GetGlobalOp globalLValue = rewriter.create( op.getLoc(), lvalueType, operands.getNameAttr()); - auto pointerType = emitc::PointerType::get(resultTy); + emitc::PointerType pointerType = emitc::PointerType::get(resultTy); rewriter.replaceOpWithNewOp( op, pointerType, rewriter.getStringAttr("&"), globalLValue); return success();