[Mlir-commits] [mlir] [mlir][emitc] Set operator precedence for `GetFieldOp` (PR #203416)
Bhavesh M
llvmlistbot at llvm.org
Mon Jun 15 19:50:31 PDT 2026
https://github.com/beamandala updated https://github.com/llvm/llvm-project/pull/203416
>From 3693abb3298bcc7d04598563a84242611ebfd48b Mon Sep 17 00:00:00 2001
From: Bhavesh Mandalapu <bmandalapu at google.com>
Date: Thu, 11 Jun 2026 15:18:59 -0700
Subject: [PATCH 1/2] [mlir][emitc] Set operator precedence for GetFieldOp
This sets the precedence for the GetFieldOp, preventing an unsupported
operation error.
---
mlir/lib/Target/Cpp/TranslateToCpp.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/mlir/lib/Target/Cpp/TranslateToCpp.cpp b/mlir/lib/Target/Cpp/TranslateToCpp.cpp
index 7b2ad67df11fe..1bf87e4994d67 100644
--- a/mlir/lib/Target/Cpp/TranslateToCpp.cpp
+++ b/mlir/lib/Target/Cpp/TranslateToCpp.cpp
@@ -103,6 +103,7 @@ static FailureOr<int> getOperatorPrecedence(Operation *operation) {
.Case([&](emitc::DereferenceOp op) { return 15; })
.Case([&](emitc::DivOp op) { return 13; })
.Case([&](emitc::GetGlobalOp op) { return 18; })
+ .Case([&](emitc::GetFieldOp op) { return 18; })
.Case([&](emitc::LiteralOp op) { return 18; })
.Case([&](emitc::LoadOp op) { return 16; })
.Case([&](emitc::LogicalAndOp op) { return 4; })
>From 4d77243f68456e0d2e70abee0e1dc9df8d5ce4dd Mon Sep 17 00:00:00 2001
From: Bhavesh Mandalapu <bmandalapu at google.com>
Date: Fri, 12 Jun 2026 11:20:27 -0700
Subject: [PATCH 2/2] Add unit test
---
mlir/test/Target/Cpp/class.mlir | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/mlir/test/Target/Cpp/class.mlir b/mlir/test/Target/Cpp/class.mlir
index afc31c63b9ac7..fb1b48285974e 100644
--- a/mlir/test/Target/Cpp/class.mlir
+++ b/mlir/test/Target/Cpp/class.mlir
@@ -98,3 +98,23 @@ emitc.class union @unionClass {
// CHECK-NEXT: float asFloat;
// CHECK-NEXT: };
+// Test that get_field is supported inside an expression
+emitc.class @expressionClass {
+ emitc.field @x : i32
+ emitc.func @test_precedence() -> i32 {
+ %0 = emitc.get_field @x : i32
+ %1 = emitc.expression %0 : (i32) -> i32 {
+ %2 = emitc.add %0, %0 : (i32, i32) -> i32
+ emitc.yield %2 : i32
+ }
+ return %1 : i32
+ }
+}
+
+// CHECK-LABEL: class expressionClass {
+// CHECK-NEXT: public:
+// CHECK-NEXT: int32_t x;
+// CHECK-NEXT: int32_t test_precedence() {
+// CHECK-NEXT: return x + x;
+// CHECK-NEXT: }
+// CHECK-NEXT: };
More information about the Mlir-commits
mailing list