diff options
author | Philip Reames <preames@rivosinc.com> | 2024-06-19 08:40:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 08:40:04 -0700 |
commit | cb76896d6e45e2c9b7ef5e47b6ec37aeca43f7a8 (patch) | |
tree | 8ab6670e0c45fa701ba92b8fa58aeea3c0829288 /llvm/lib/Analysis | |
parent | 1003f5b93e0ab0518e285b861573181942e41930 (diff) | |
download | llvm-cb76896d6e45e2c9b7ef5e47b6ec37aeca43f7a8.zip llvm-cb76896d6e45e2c9b7ef5e47b6ec37aeca43f7a8.tar.gz llvm-cb76896d6e45e2c9b7ef5e47b6ec37aeca43f7a8.tar.bz2 |
[SCEVExpander] Recognize urem idiom during expansion (#96005)
If we have a urem expression, emitting it as a urem is significantly
better that letting the fully expansion kick in. We have the risk of a
udiv or mul which could have previously been shared, but loosing that
seems like a reasonable tradeoff for being able to round trip a urem w/o
modification.
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 9808308..7fb7074 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -14972,6 +14972,9 @@ void PredicatedScalarEvolution::print(raw_ostream &OS, unsigned Depth) const { // 4, A / B becomes X / 8). bool ScalarEvolution::matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS) { + if (Expr->getType()->isPointerTy()) + return false; + // Try to match 'zext (trunc A to iB) to iY', which is used // for URem with constant power-of-2 second operands. Make sure the size of // the operand A matches the size of the whole expressions. |