aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorFlorian Mayer <fmayer@google.com>2021-09-13 10:01:55 +0100
committerFlorian Mayer <fmayer@google.com>2021-09-13 20:52:26 +0100
commit0a22510f3e649d5d84cc404690cfb374fab46238 (patch)
tree4c444b003cc79eeda8accf4e66b97250ef3afb74 /llvm/lib/Analysis/ValueTracking.cpp
parent5b5d774f5d3840a1e242f0ef5873d735ccf817a4 (diff)
downloadllvm-0a22510f3e649d5d84cc404690cfb374fab46238.zip
llvm-0a22510f3e649d5d84cc404690cfb374fab46238.tar.gz
llvm-0a22510f3e649d5d84cc404690cfb374fab46238.tar.bz2
[value-tracking] see through returned attribute.
Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D109675
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 53d7ddf..8d18d133 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4533,6 +4533,12 @@ AllocaInst *llvm::findAllocaForValue(Value *V, bool OffsetZero) {
if (OffsetZero && !GEP->hasAllZeroIndices())
return nullptr;
AddWork(GEP->getPointerOperand());
+ } else if (CallBase *CB = dyn_cast<CallBase>(V)) {
+ Value *Returned = CB->getReturnedArgOperand();
+ if (Returned)
+ AddWork(Returned);
+ else
+ return nullptr;
} else {
return nullptr;
}