aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2024-11-06 17:14:44 -0800
committerGitHub <noreply@github.com>2024-11-06 17:14:44 -0800
commit29a5c054e6d56a912ed5ba3f84e8ca631872db8b (patch)
tree3f2d00da88508b43e6860b635f8a82662e3844dd /llvm/lib/Analysis/ValueTracking.cpp
parent7c8287586690650ee8bca2282b2a20cc7dc40bde (diff)
downloadllvm-29a5c054e6d56a912ed5ba3f84e8ca631872db8b.zip
llvm-29a5c054e6d56a912ed5ba3f84e8ca631872db8b.tar.gz
llvm-29a5c054e6d56a912ed5ba3f84e8ca631872db8b.tar.bz2
ValueTracking: Allow getUnderlyingObject to look at vectors (#114311)
We can identify some easy vector of pointer cases, such as a getelementptr with a scalar base.
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index e5f971f..37cd4ca 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -6713,11 +6713,11 @@ static bool isSameUnderlyingObjectInLoop(const PHINode *PN,
}
const Value *llvm::getUnderlyingObject(const Value *V, unsigned MaxLookup) {
- if (!V->getType()->isPointerTy())
- return V;
for (unsigned Count = 0; MaxLookup == 0 || Count < MaxLookup; ++Count) {
if (auto *GEP = dyn_cast<GEPOperator>(V)) {
V = GEP->getPointerOperand();
+ if (!V->getType()->isPointerTy()) // Only handle scalar pointer base.
+ return nullptr;
} else if (Operator::getOpcode(V) == Instruction::BitCast ||
Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
Value *NewV = cast<Operator>(V)->getOperand(0);