[llvm-branch-commits] [mlir] [mlir] Add `OpFoldResults` definition (PR #229215)

Victor Perez via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Oct 6 07:49:20 PDT 2026


================
@@ -24,3 +26,119 @@ raw_ostream &mlir::operator<<(raw_ostream &os, OpFoldResult ofr) {
     llvm::dyn_cast_if_present<Attribute>(ofr).print(os);
   return os;
 }
+
+/// Return true if every replacement is null.
+static bool replacesNone(ArrayRef<OpFoldResult> replacements) {
+  return llvm::none_of(replacements, llvm::identity{});
+}
+
+//===----------------------------------------------------------------------===//
+// OpFoldResults
+//===----------------------------------------------------------------------===//
+
+OpFoldResults::OpFoldResults(std::nullptr_t) {}
+
+OpFoldResults::OpFoldResults(LogicalResult status)
+    : inPlace(status.succeeded()) {}
+
+OpFoldResults::OpFoldResults(OpFoldResult replacement) {
+  if (replacement)
+    replacements.push_back(replacement);
+}
+
+OpFoldResults::OpFoldResults(Value replacement)
+    : OpFoldResults(OpFoldResult(replacement)) {}
+
+OpFoldResults::OpFoldResults(Attribute replacement)
+    : OpFoldResults(OpFoldResult(replacement)) {}
+
+OpFoldResults::OpFoldResults(std::initializer_list<OpFoldResult> replacements)
+    : replacements(replacements) {}
+
+OpFoldResults::OpFoldResults(Operation *op) {
+  assert(op && "expected a non-null operation");
+  replacements.resize(op->getNumResults());
+}
+
+void OpFoldResults::replace(Value result, OpFoldResult replacement) {
+  auto opResult = dyn_cast_if_present<OpResult>(result);
+  assert(opResult && "expected an OpResult");
+  if (dyn_cast_if_present<Value>(replacement) == result)
----------------
victor-eds wrote:

That's true for `result`, I'll apply the suggestion. For `replacement`, however, we can have:

- `OpResult()` (`nullptr`): marks result as unchanged
- `Value`: new value to take. For the special case I handle there, if it's the same as the current result, we set the tracked replacement to `nullptr`.
- `Attribute`: simple case, result is replaced by an attribute.



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


More information about the llvm-branch-commits mailing list