diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-02-09 02:31:47 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-02-09 02:31:47 +0000 |
commit | ca2edc7ad5ebeceb8eae8c20a8455d6db248ad74 (patch) | |
tree | a10ac9c1463191352ac5df03a3929c7f3221e20a /llvm/lib/Analysis/GlobalsModRef.cpp | |
parent | 4a33ab7b2cc3a396b41ce2c0710ad08213f4792e (diff) | |
download | llvm-ca2edc7ad5ebeceb8eae8c20a8455d6db248ad74.zip llvm-ca2edc7ad5ebeceb8eae8c20a8455d6db248ad74.tar.gz llvm-ca2edc7ad5ebeceb8eae8c20a8455d6db248ad74.tar.bz2 |
[GMR/OperandBundles] Teach getModRefBehavior about operand bundles
In general, memory restrictions on a called function (e.g. readnone)
cannot be transferred to a CallSite that has operand bundles. It is
possible to make this inference smarter, but lets fix the behavior to be
correct first.
llvm-svn: 260193
Diffstat (limited to 'llvm/lib/Analysis/GlobalsModRef.cpp')
-rw-r--r-- | llvm/lib/Analysis/GlobalsModRef.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/Analysis/GlobalsModRef.cpp b/llvm/lib/Analysis/GlobalsModRef.cpp index 8338dcc..549b374 100644 --- a/llvm/lib/Analysis/GlobalsModRef.cpp +++ b/llvm/lib/Analysis/GlobalsModRef.cpp @@ -243,13 +243,14 @@ FunctionModRefBehavior GlobalsAAResult::getModRefBehavior(ImmutableCallSite CS) { FunctionModRefBehavior Min = FMRB_UnknownModRefBehavior; - if (const Function *F = CS.getCalledFunction()) - if (FunctionInfo *FI = getFunctionInfo(F)) { - if (FI->getModRefInfo() == MRI_NoModRef) - Min = FMRB_DoesNotAccessMemory; - else if ((FI->getModRefInfo() & MRI_Mod) == 0) - Min = FMRB_OnlyReadsMemory; - } + if (!CS.hasOperandBundles()) + if (const Function *F = CS.getCalledFunction()) + if (FunctionInfo *FI = getFunctionInfo(F)) { + if (FI->getModRefInfo() == MRI_NoModRef) + Min = FMRB_DoesNotAccessMemory; + else if ((FI->getModRefInfo() & MRI_Mod) == 0) + Min = FMRB_OnlyReadsMemory; + } return FunctionModRefBehavior(AAResultBase::getModRefBehavior(CS) & Min); } |