diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-13 20:56:20 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-13 21:00:32 +0100 |
commit | 22dba707b0fbf778466baef718cc536700b99df3 (patch) | |
tree | 5c19bc4e44c38296394c2e2e49cfbf1bb1c1c8eb /llvm/lib/Analysis/AssumptionCache.cpp | |
parent | f99b4f5241a3b3436b05355f5ea8588274254f8b (diff) | |
download | llvm-22dba707b0fbf778466baef718cc536700b99df3.zip llvm-22dba707b0fbf778466baef718cc536700b99df3.tar.gz llvm-22dba707b0fbf778466baef718cc536700b99df3.tar.bz2 |
[AC] Handle (X+C1)<C2 assumes (PR48408)
InstCombine canonicalizes X>C && X<C' style comparisons into
(X+C1)<C2. This type of expression is recognized by some analyses
like LVI, but currently not when used inside assumptions, because
AssumptionCache does not track affected values for it.
Diffstat (limited to 'llvm/lib/Analysis/AssumptionCache.cpp')
-rw-r--r-- | llvm/lib/Analysis/AssumptionCache.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/AssumptionCache.cpp b/llvm/lib/Analysis/AssumptionCache.cpp index fdde5ea..cb94f71 100644 --- a/llvm/lib/Analysis/AssumptionCache.cpp +++ b/llvm/lib/Analysis/AssumptionCache.cpp @@ -115,6 +115,14 @@ findAffectedValues(CallInst *CI, AddAffectedFromEq(A); AddAffectedFromEq(B); } + + Value *X; + // Handle (A + C1) u< C2, which is the canonical form of A > C3 && A < C4, + // and recognized by LVI at least. + if (Pred == ICmpInst::ICMP_ULT && + match(A, m_Add(m_Value(X), m_ConstantInt())) && + match(B, m_ConstantInt())) + AddAffected(X); } } |