Skip to content

Commit 4f9cdb7

Browse files
unlsycnTaoBi22
authored andcommitted
[OM] Fix tuple_get operation in OMEvaluator (llvm#8322)
1 parent 1bed58a commit 4f9cdb7

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

lib/Dialect/OM/Evaluator/Evaluator.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ FailureOr<evaluator::EvaluatorValuePtr> circt::om::Evaluator::getOrCreateValue(
171171
ObjectFieldOp>([&](auto op) {
172172
return getPartiallyEvaluatedValue(op.getType(), loc);
173173
})
174+
.Case<TupleGetOp>([&](auto op) {
175+
return evaluateTupleGet(op, actualParams, loc);
176+
})
174177
.Case<ObjectOp>([&](auto op) {
175178
return getPartiallyEvaluatedValue(op.getType(), op.getLoc());
176179
})

unittests/Dialect/OM/Evaluator/EvaluatorTests.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,40 @@ TEST(EvaluatorTests, ListConcatField) {
11891189
.getValue());
11901190
}
11911191

1192+
TEST(EvaluatorTests, TupleGet) {
1193+
StringRef mod = "om.class @Tuple() -> (val: !om.string) {"
1194+
" %int = om.constant 1 : i1"
1195+
" %str = om.constant \"foo\" : !om.string"
1196+
" %tuple = om.tuple_create %int, %str : i1, !om.string"
1197+
" %val = om.tuple_get %tuple[1] : tuple<i1, !om.string>"
1198+
" om.class.fields %val : !om.string"
1199+
"}";
1200+
1201+
DialectRegistry registry;
1202+
registry.insert<OMDialect>();
1203+
1204+
MLIRContext context(registry);
1205+
context.getOrLoadDialect<OMDialect>();
1206+
1207+
OwningOpRef<ModuleOp> owning =
1208+
parseSourceString<ModuleOp>(mod, ParserConfig(&context));
1209+
1210+
Evaluator evaluator(owning.release());
1211+
1212+
auto result = evaluator.instantiate(StringAttr::get(&context, "Tuple"), {});
1213+
1214+
ASSERT_TRUE(succeeded(result));
1215+
1216+
auto fieldValue = llvm::cast<evaluator::ObjectValue>(result.value().get())
1217+
->getField("val")
1218+
.value();
1219+
1220+
ASSERT_EQ("foo", llvm::cast<evaluator::AttributeValue>(fieldValue.get())
1221+
->getAs<StringAttr>()
1222+
.getValue()
1223+
.str());
1224+
}
1225+
11921226
TEST(EvaluatorTests, NestedReferenceValue) {
11931227
StringRef mod =
11941228
"om.class @Empty() {"

0 commit comments

Comments
 (0)