aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/AssumptionCache.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-13 20:56:20 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-13 21:00:32 +0100
commit22dba707b0fbf778466baef718cc536700b99df3 (patch)
tree5c19bc4e44c38296394c2e2e49cfbf1bb1c1c8eb /llvm/lib/Analysis/AssumptionCache.cpp
parentf99b4f5241a3b3436b05355f5ea8588274254f8b (diff)
downloadllvm-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.cpp8
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);
}
}