[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