[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