diff options
author | Yingwei Zheng <dtcxzyw2333@gmail.com> | 2024-12-16 16:41:04 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-16 16:41:04 +0800 |
commit | 003fb2aeb49dc7440cab7e009bd264f8f42fc8dc (patch) | |
tree | 329010632e0598cf89f352f52e9eebcd21566dad /llvm/lib | |
parent | a3db5910b434d746c9c0585a092100ff7abcd1a0 (diff) | |
download | llvm-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.cpp | 7 |
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); |