[Mlir-commits] [mlir] [MLIR][SCF] Handle commuted indices in parallel loop fusion (PR #219665)
Federico Bruzzone
llvmlistbot at llvm.org
Sat Aug 29 08:24:01 PDT 2026
================
@@ -145,6 +145,18 @@ static bool valsAreEquivalent(Value val1, Value val2,
return false;
if (!isMemoryEffectFree(val1DefOp) || !isMemoryEffectFree(val2DefOp))
return false;
+
+ // Handle commuted integer additions.
+ if (auto addOp1 = dyn_cast<arith::AddIOp>(val1DefOp)) {
+ if (auto addOp2 = dyn_cast<arith::AddIOp>(val2DefOp);
+ addOp2 &&
+ val1DefOp->getAttrDictionary() == val2DefOp->getAttrDictionary() &&
+ val1.getType() == val2.getType() &&
+ valsAreEquivalent(addOp1.getLhs(), addOp2.getRhs(), loopsIVsMap) &&
+ valsAreEquivalent(addOp1.getRhs(), addOp2.getLhs(), loopsIVsMap))
+ return true;
+ }
+
return OperationEquivalence::isEquivalentTo(
----------------
FedericoBruzzone wrote:
Something like:
```c++
auto checkCommutativeEquivalent =
[&](ValueRange lhs, ValueRange rhs) -> LogicalResult {
if (lhs.size() != 2 || rhs.size() != 2)
return failure();
if (valsAreEquivalent(lhs[0], rhs[0], loopsIVsMap) &&
valsAreEquivalent(lhs[1], rhs[1], loopsIVsMap))
return success();
return success(valsAreEquivalent(lhs[0], rhs[1], loopsIVsMap) &&
valsAreEquivalent(lhs[1], rhs[0], loopsIVsMap));
};
```
https://github.com/llvm/llvm-project/pull/219665
More information about the Mlir-commits
mailing list