Skip to content

Commit 2950fd0

Browse files
committed
Lower to pointer type
1 parent 5612d99 commit 2950fd0

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

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

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

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

@@ -1686,7 +1687,8 @@ def EmitC_GetFieldOp
16861687
}];
16871688

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

mlir/lib/Conversion/MemRefToEmitC/MemRefToEmitC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ struct ConvertGetGlobal final
153153
MemRefType opTy = op.getType();
154154
Type resultTy = convertMemRefType(opTy, getTypeConverter());
155155
if (opTy.getRank() == 0)
156-
resultTy = emitc::LValueType::get(resultTy);
156+
resultTy = emitc::PointerType::get(resultTy);
157157

158158
if (!resultTy) {
159159
return rewriter.notifyMatchFailure(op.getLoc(),

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,15 @@ 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+
12511260
auto lvalueType = dyn_cast<LValueType>(resultType);
12521261
if (!lvalueType || lvalueType.getValueType() != globalType)
12531262
return emitOpError("on non-array type expects result inner type ")

0 commit comments

Comments
 (0)