diff options
Diffstat (limited to 'llvm/lib/Analysis/MemoryLocation.cpp')
-rw-r--r-- | llvm/lib/Analysis/MemoryLocation.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/MemoryLocation.cpp b/llvm/lib/Analysis/MemoryLocation.cpp index 18ba50c7..44136a7 100644 --- a/llvm/lib/Analysis/MemoryLocation.cpp +++ b/llvm/lib/Analysis/MemoryLocation.cpp @@ -130,8 +130,19 @@ MemoryLocation MemoryLocation::getForDest(const AnyMemIntrinsic *MI) { Optional<MemoryLocation> MemoryLocation::getForDest(const CallBase *CB, const TargetLibraryInfo &TLI) { - if (auto *MemInst = dyn_cast<AnyMemIntrinsic>(CB)) - return getForDest(MemInst); + if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(CB)) { + if (auto *MemInst = dyn_cast<AnyMemIntrinsic>(CB)) + return getForDest(MemInst); + + switch (II->getIntrinsicID()) { + default: + return None; + case Intrinsic::init_trampoline: + return MemoryLocation::getForArgument(CB, 0, TLI); + case Intrinsic::masked_store: + return MemoryLocation::getForArgument(CB, 1, TLI); + } + } LibFunc LF; if (TLI.getLibFunc(*CB, LF) && TLI.has(LF)) { |