[MLIR][Affine] Enhance simplifyAdd for AffineExpr mod (#146492)
Currently AffineExpr Add has ability to optimize `"s1 + (s1 // c * -c)" to "s1 % c"`, but can not optimize `"(s0 + s1) + (s1 // c * -c)"`. This patch provide an opportunity to do this simplification, let it can be simplified to `"s0 + s1 % c"`.
This commit is contained in:
@@ -781,6 +781,15 @@ static AffineExpr simplifyAdd(AffineExpr lhs, AffineExpr rhs) {
|
||||
if (isPositiveRhs && lhs == llrhs && rlrhs == -rrhs) {
|
||||
return lhs % rlrhs;
|
||||
}
|
||||
|
||||
// Try simplify lhs's last operand with rhs. e.g:
|
||||
// (s0 * 64 + s1) + (s1 // c * -c) --->
|
||||
// s0 * 64 + (s1 + s1 // c * -c) -->
|
||||
// s0 * 64 + s1 % c
|
||||
if (lBinOpExpr && lBinOpExpr.getKind() == AffineExprKind::Add) {
|
||||
if (auto simplified = simplifyAdd(lBinOpExpr.getRHS(), rhs))
|
||||
return lBinOpExpr.getLHS() + simplified;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user