aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorPaul Walker <paul.walker@arm.com>2025-10-01 15:46:12 +0100
committerGitHub <noreply@github.com>2025-10-01 15:46:12 +0100
commit9e0c0a09392ff7d3b196b17c77595e921e35d765 (patch)
tree990fe4319bf678ad9778183002423281508f356c /llvm/lib/Analysis/ScalarEvolution.cpp
parent13ce5f249ed911971fe899e318d08765399d8ce1 (diff)
downloadllvm-9e0c0a09392ff7d3b196b17c77595e921e35d765.zip
llvm-9e0c0a09392ff7d3b196b17c77595e921e35d765.tar.gz
llvm-9e0c0a09392ff7d3b196b17c77595e921e35d765.tar.bz2
[LLVM][SCEV] udiv (mul nuw a, vscale), (mul nuw b, vscale) -> udiv a, b (#157836)
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index b08399b..63e1b14 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -3598,6 +3598,13 @@ const SCEV *ScalarEvolution::getUDivExpr(const SCEV *LHS,
}
}
+ // TODO: Generalize to handle any common factors.
+ // udiv (mul nuw a, vscale), (mul nuw b, vscale) --> udiv a, b
+ const SCEV *NewLHS, *NewRHS;
+ if (match(LHS, m_scev_c_NUWMul(m_SCEV(NewLHS), m_SCEVVScale())) &&
+ match(RHS, m_scev_c_NUWMul(m_SCEV(NewRHS), m_SCEVVScale())))
+ return getUDivExpr(NewLHS, NewRHS);
+
// The Insertion Point (IP) might be invalid by now (due to UniqueSCEVs
// changes). Make sure we get a new one.
IP = nullptr;