diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-10 22:29:33 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-13 13:20:05 +0100 |
commit | bb939ebfd7f48a1aa744941d6de86e69d3796b5d (patch) | |
tree | 7378a5760aad624f3f442f835487acd35e78bcd0 /llvm/lib/Analysis/BasicAliasAnalysis.cpp | |
parent | 05d1729232cdff323cafd469532504aa85740967 (diff) | |
download | llvm-bb939ebfd7f48a1aa744941d6de86e69d3796b5d.zip llvm-bb939ebfd7f48a1aa744941d6de86e69d3796b5d.tar.gz llvm-bb939ebfd7f48a1aa744941d6de86e69d3796b5d.tar.bz2 |
[BasicAA] Handle known non-zero variable index
BasicAA currently handles cases like Scale*V0 + (-Scale)*V1 where
V0 != V1, but does not handle the simpler case of Scale*V with
V != 0. Add it based on an isKnownNonZero() call.
I'm not passing a context instruction for now, because the existing
approach of always using GEP1 for context could result in symmetry
issues.
Differential Revision: https://reviews.llvm.org/D93162
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 9ba61ad..3e22ce8 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -1288,8 +1288,12 @@ AliasResult BasicAAResult::aliasGEP( if (V1Size.hasValue() && V2Size.hasValue()) { // Try to determine whether abs(VarIndex) > 0. Optional<APInt> MinAbsVarIndex; - // TODO: Could handle single non-zero index as well. - if (DecompGEP1.VarIndices.size() == 2) { + if (DecompGEP1.VarIndices.size() == 1) { + // VarIndex = Scale*V. If V != 0 then abs(VarIndex) >= abs(Scale). + const VariableGEPIndex &Var = DecompGEP1.VarIndices[0]; + if (isKnownNonZero(Var.V, DL)) + MinAbsVarIndex = Var.Scale.abs(); + } else if (DecompGEP1.VarIndices.size() == 2) { // VarIndex = Scale*V0 + (-Scale)*V1. // If V0 != V1 then abs(VarIndex) >= abs(Scale). // Check that VisitedPhiBBs is empty, to avoid reasoning about |