Skip to content

Commit de3c63d

Browse files
committed
refactoring
1 parent ec252fc commit de3c63d

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,25 @@ static Value calculateMemrefTotalSizeBytes(Location loc, MemRefType memrefType,
123123
return totalSizeBytes.getResult();
124124
}
125125

126+
static emitc::ApplyOp
127+
createPointerFromEmitcArray(Location loc, OpBuilder &builder,
128+
TypedValue<emitc::ArrayType> arrayValue) {
129+
130+
emitc::ConstantOp zeroIndex = builder.create<emitc::ConstantOp>(
131+
loc, builder.getIndexType(), builder.getIndexAttr(0));
132+
133+
int64_t rank = arrayValue.getType().getRank();
134+
llvm::SmallVector<mlir::Value> indices(rank, zeroIndex);
135+
136+
emitc::SubscriptOp subPtr =
137+
builder.create<emitc::SubscriptOp>(loc, arrayValue, ValueRange(indices));
138+
emitc::ApplyOp ptr = builder.create<emitc::ApplyOp>(
139+
loc, emitc::PointerType::get(arrayValue.getType().getElementType()),
140+
builder.getStringAttr("&"), subPtr);
141+
142+
return ptr;
143+
}
144+
126145
struct ConvertAlloc final : public OpConversionPattern<memref::AllocOp> {
127146
using OpConversionPattern::OpConversionPattern;
128147
LogicalResult
@@ -204,31 +223,15 @@ struct ConvertCopy final : public OpConversionPattern<memref::CopyOp> {
204223
return rewriter.notifyMatchFailure(
205224
loc, "incompatible target memref type for EmitC conversion");
206225

207-
emitc::ConstantOp zeroIndex = rewriter.create<emitc::ConstantOp>(
208-
loc, rewriter.getIndexType(), rewriter.getIndexAttr(0));
209-
210-
auto createPointerFromEmitcArray =
211-
[loc, &rewriter, &zeroIndex](
212-
mlir::TypedValue<emitc::ArrayType> arrayValue) -> emitc::ApplyOp {
213-
int64_t rank = arrayValue.getType().getRank();
214-
llvm::SmallVector<mlir::Value> indices(rank, zeroIndex);
215-
216-
emitc::SubscriptOp subPtr = rewriter.create<emitc::SubscriptOp>(
217-
loc, arrayValue, mlir::ValueRange(indices));
218-
emitc::ApplyOp ptr = rewriter.create<emitc::ApplyOp>(
219-
loc, emitc::PointerType::get(arrayValue.getType().getElementType()),
220-
rewriter.getStringAttr("&"), subPtr);
221-
222-
return ptr;
223-
};
224-
225226
auto srcArrayValue =
226227
cast<TypedValue<emitc::ArrayType>>(operands.getSource());
227-
emitc::ApplyOp srcPtr = createPointerFromEmitcArray(srcArrayValue);
228+
emitc::ApplyOp srcPtr =
229+
createPointerFromEmitcArray(loc, rewriter, srcArrayValue);
228230

229231
auto targetArrayValue =
230232
cast<TypedValue<emitc::ArrayType>>(operands.getTarget());
231-
emitc::ApplyOp targetPtr = createPointerFromEmitcArray(targetArrayValue);
233+
emitc::ApplyOp targetPtr =
234+
createPointerFromEmitcArray(loc, rewriter, targetArrayValue);
232235

233236
emitc::CallOpaqueOp memCpyCall = rewriter.create<emitc::CallOpaqueOp>(
234237
loc, TypeRange{}, "memcpy",

mlir/test/Conversion/MemRefToEmitC/memref-to-emitc-copy.mlir

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ func.func @copying(%arg0 : memref<9x4x5x7xf32>, %arg1 : memref<9x4x5x7xf32>) {
88

99
// CHECK: module {
1010
// NOCPP: emitc.include <"string.h">
11-
1211
// CPP: emitc.include <"cstring">
1312

1413
// CHECK-LABEL: copying

0 commit comments

Comments
 (0)