[Mlir-commits] [mlir] [mlir][emitC] Add support to emitter for `classop`, `fieldop` and `getfieldop` (PR #145605)

Jacques Pienaar llvmlistbot at llvm.org
Thu Jun 26 10:24:47 PDT 2025


================
@@ -997,6 +997,49 @@ static LogicalResult printOperation(CppEmitter &emitter, ModuleOp moduleOp) {
   return success();
 }
 
+static LogicalResult printOperation(CppEmitter &emitter, ClassOp classOp) {
+  CppEmitter::Scope classScope(emitter);
+  raw_indented_ostream &os = emitter.ostream();
+  os << "class " << classOp.getSymName() << " {\n";
+  os << "public:\n";
+  os.indent();
+
+  for (Operation &op : classOp) {
+    if (failed(emitter.emitOperation(op, /*trailingSemicolon=*/false)))
+      return failure();
+  }
+
+  os.unindent();
+  os << "};";
+  return success();
+}
+
+static LogicalResult printOperation(CppEmitter &emitter, FieldOp fieldOp) {
+  raw_ostream &os = emitter.ostream();
+  if (failed(emitter.emitType(fieldOp->getLoc(), fieldOp.getType())))
+    return failure();
+  os << " " << fieldOp.getSymName() << ";";
+  return success();
+}
+
+static LogicalResult printOperation(CppEmitter &emitter,
+                                    GetFieldOp getFieldOp) {
+  raw_indented_ostream &os = emitter.ostream();
+  Location loc = getFieldOp->getLoc();
+
+  if (getFieldOp->getNumResults() > 0) {
+    Value result = getFieldOp->getResult(0);
----------------
jpienaar wrote:

Isn't GetFieldOp defined to have 1 result? ( https://github.com/llvm/llvm-project/blob/5c310d1ef0188d609b1d2837d403d2b3f2eeb609/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td#L1678 ).

Can also do here getFieldOp.getResult() rather than using the generic accessor on Operation.

https://github.com/llvm/llvm-project/pull/145605


More information about the Mlir-commits mailing list