aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorYingwei Zheng <dtcxzyw2333@gmail.com>2024-12-16 16:41:04 +0800
committerGitHub <noreply@github.com>2024-12-16 16:41:04 +0800
commit003fb2aeb49dc7440cab7e009bd264f8f42fc8dc (patch)
tree329010632e0598cf89f352f52e9eebcd21566dad /llvm/lib
parenta3db5910b434d746c9c0585a092100ff7abcd1a0 (diff)
downloadllvm-003fb2aeb49dc7440cab7e009bd264f8f42fc8dc.zip
llvm-003fb2aeb49dc7440cab7e009bd264f8f42fc8dc.tar.gz
llvm-003fb2aeb49dc7440cab7e009bd264f8f42fc8dc.tar.bz2
[ConstraintElim] Decompose `sub nsw` (#118219)
Closes https://github.com/llvm/llvm-project/issues/118211.
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/Scalar/ConstraintElimination.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index 86de895..ead07ed 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -527,6 +527,13 @@ static Decomposition decompose(Value *V,
if (match(V, m_NSWAdd(m_Value(Op0), m_Value(Op1))))
return MergeResults(Op0, Op1, IsSigned);
+ if (match(V, m_NSWSub(m_Value(Op0), m_Value(Op1)))) {
+ auto ResA = decompose(Op0, Preconditions, IsSigned, DL);
+ auto ResB = decompose(Op1, Preconditions, IsSigned, DL);
+ ResA.sub(ResB);
+ return ResA;
+ }
+
ConstantInt *CI;
if (match(V, m_NSWMul(m_Value(Op0), m_ConstantInt(CI))) && canUseSExt(CI)) {
auto Result = decompose(Op0, Preconditions, IsSigned, DL);