[Mlir-commits] [mlir] dfbbb74 - [MLIR] Introduce a OpWithState class to act as a stream modifier for Operations (NFC) (#151547)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Aug 1 04:11:23 PDT 2025


Author: Mehdi Amini
Date: 2025-08-01T13:11:19+02:00
New Revision: dfbbb744384167bc874985c340149e39c107e37f

URL: https://github.com/llvm/llvm-project/commit/dfbbb744384167bc874985c340149e39c107e37f
DIFF: https://github.com/llvm/llvm-project/commit/dfbbb744384167bc874985c340149e39c107e37f.diff

LOG: [MLIR] Introduce a OpWithState class to act as a stream modifier for Operations (NFC) (#151547)

On the model of OpWithFlags, this modifier allows to stream an operation
using a custom AsmPrinter.

Added: 
    

Modified: 
    mlir/include/mlir/IR/Operation.h
    mlir/lib/Tools/mlir-opt/MlirOptMain.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/include/mlir/IR/Operation.h b/mlir/include/mlir/IR/Operation.h
index edc8ab489e12d..4f89f8b85861e 100644
--- a/mlir/include/mlir/IR/Operation.h
+++ b/mlir/include/mlir/IR/Operation.h
@@ -1125,6 +1125,26 @@ inline raw_ostream &operator<<(raw_ostream &os,
   return os;
 }
 
+/// A wrapper class that allows for printing an operation with a custom
+/// AsmState, useful to act as a "stream modifier" to customize printing an
+/// operation with a stream using the operator<< overload, e.g.:
+///   llvm::dbgs() << OpWithState(op, OpPrintingFlags().skipRegions());
+class OpWithState {
+public:
+  OpWithState(Operation *op, AsmState &state) : op(op), theState(state) {}
+
+private:
+  Operation *op;
+  AsmState &theState;
+  friend raw_ostream &operator<<(raw_ostream &os, const OpWithState &op);
+};
+
+inline raw_ostream &operator<<(raw_ostream &os,
+                               const OpWithState &opWithState) {
+  opWithState.op->print(os, const_cast<OpWithState &>(opWithState).theState);
+  return os;
+}
+
 } // namespace mlir
 
 namespace llvm {

diff  --git a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
index bdcdaa407e616..de714d8b740af 100644
--- a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
+++ b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
@@ -501,8 +501,7 @@ performActions(raw_ostream &os,
            << "bytecode version while not emitting bytecode";
   AsmState asmState(op.get(), OpPrintingFlags(), /*locationMap=*/nullptr,
                     &fallbackResourceMap);
-  op.get()->print(os, asmState);
-  os << '\n';
+  os << OpWithState(op.get(), asmState) << '\n';
   return success();
 }
 


        


More information about the Mlir-commits mailing list