Skip to content

Commit 82bd2b4

Browse files
committed
Use an lvalue and apply op
1 parent 2950fd0 commit 82bd2b4

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

mlir/include/mlir/Dialect/EmitC/IR/EmitC.td

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,8 +1267,7 @@ def EmitC_GetGlobalOp : EmitC_Op<"get_global",
12671267
}];
12681268

12691269
let arguments = (ins FlatSymbolRefAttr:$name);
1270-
let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType,
1271-
EmitC_PointerType]>:$result);
1270+
let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result);
12721271
let assemblyFormat = "$name `:` type($result) attr-dict";
12731272
}
12741273

@@ -1687,8 +1686,7 @@ def EmitC_GetFieldOp
16871686
}];
16881687

16891688
let arguments = (ins FlatSymbolRefAttr:$field_name);
1690-
let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType,
1691-
EmitC_PointerType]>:$result);
1689+
let results = (outs AnyTypeOf<[EmitC_ArrayType, EmitC_LValueType]>:$result);
16921690
let assemblyFormat = "$field_name `:` type($result) attr-dict";
16931691
}
16941692

mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,21 @@ struct ConvertGetGlobal final
152152

153153
MemRefType opTy = op.getType();
154154
Type resultTy = convertMemRefType(opTy, getTypeConverter());
155-
if (opTy.getRank() == 0)
156-
resultTy = emitc::PointerType::get(resultTy);
157155

158156
if (!resultTy) {
159157
return rewriter.notifyMatchFailure(op.getLoc(),
160158
"cannot convert result type");
161159
}
160+
161+
if (opTy.getRank() == 0) {
162+
auto lvalueType = emitc::LValueType::get(resultTy);
163+
auto globalLValue = rewriter.create<emitc::GetGlobalOp>(
164+
op.getLoc(), lvalueType, operands.getNameAttr());
165+
auto pointerType = emitc::PointerType::get(resultTy);
166+
rewriter.replaceOpWithNewOp<emitc::ApplyOp>(
167+
op, pointerType, rewriter.getStringAttr("&"), globalLValue);
168+
return success();
169+
}
162170
rewriter.replaceOpWithNewOp<emitc::GetGlobalOp>(op, resultTy,
163171
operands.getNameAttr());
164172
return success();

mlir/lib/Dialect/EmitC/IR/EmitC.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,15 +1248,6 @@ GetGlobalOp::verifySymbolUses(SymbolTableCollection &symbolTable) {
12481248
}
12491249

12501250
// global has non-array type
1251-
if (auto pointerType = llvm::dyn_cast<PointerType>(resultType)) {
1252-
if (pointerType.getPointee() != globalType) {
1253-
return emitOpError("on pointer type expects result pointee type ")
1254-
<< pointerType.getPointee() << " to match type " << globalType
1255-
<< " of the global @" << getName();
1256-
}
1257-
return success();
1258-
}
1259-
12601251
auto lvalueType = dyn_cast<LValueType>(resultType);
12611252
if (!lvalueType || lvalueType.getValueType() != globalType)
12621253
return emitOpError("on non-array type expects result inner type ")

0 commit comments

Comments
 (0)