File tree Expand file tree Collapse file tree 3 files changed +14
-3
lines changed
include/mlir/Dialect/EmitC/IR Expand file tree Collapse file tree 3 files changed +14
-3
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 (),
Original file line number Diff line number Diff 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 " )
You can’t perform that action at this time.
0 commit comments