diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2024-11-06 17:14:44 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-06 17:14:44 -0800 |
commit | 29a5c054e6d56a912ed5ba3f84e8ca631872db8b (patch) | |
tree | 3f2d00da88508b43e6860b635f8a82662e3844dd /llvm/lib/Analysis/ValueTracking.cpp | |
parent | 7c8287586690650ee8bca2282b2a20cc7dc40bde (diff) | |
download | llvm-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.cpp | 4 |
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); |