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

Mehdi Amini via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Oct 6 01:01:07 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)
----------------
joker-eph wrote:

```suggestion
  auto opResult = cast<OpResult>(result);
  if (dyn_cast<Value>(replacement) == result)
```

nullptr should not be allowed by this API I think?

Also keep the code as simple as possible: `cast` already express the `dyn_cast` + assert.

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


More information about the llvm-branch-commits mailing list