aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp')
-rw-r--r--contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp78
1 files changed, 3 insertions, 75 deletions
diff --git a/contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp b/contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
index d816822aaaea..dde24ef5fdd5 100644
--- a/contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
+++ b/contrib/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
@@ -153,7 +153,7 @@ CFLSteensAAResult::FunctionInfo::FunctionInfo(
if (Itr != InterfaceMap.end()) {
if (CurrValue != Itr->second)
Summary.RetParamRelations.push_back(
- ExternalRelation{CurrValue, Itr->second});
+ ExternalRelation{CurrValue, Itr->second, UnknownOffset});
break;
}
@@ -341,81 +341,9 @@ AliasResult CFLSteensAAResult::query(const MemoryLocation &LocA,
return NoAlias;
}
-ModRefInfo CFLSteensAAResult::getArgModRefInfo(ImmutableCallSite CS,
- unsigned ArgIdx) {
- if (auto CalledFunc = CS.getCalledFunction()) {
- auto &MaybeInfo = ensureCached(const_cast<Function *>(CalledFunc));
- if (!MaybeInfo.hasValue())
- return MRI_ModRef;
- auto &RetParamAttributes = MaybeInfo->getAliasSummary().RetParamAttributes;
- auto &RetParamRelations = MaybeInfo->getAliasSummary().RetParamRelations;
-
- bool ArgAttributeIsWritten =
- std::any_of(RetParamAttributes.begin(), RetParamAttributes.end(),
- [ArgIdx](const ExternalAttribute &ExtAttr) {
- return ExtAttr.IValue.Index == ArgIdx + 1;
- });
- bool ArgIsAccessed =
- std::any_of(RetParamRelations.begin(), RetParamRelations.end(),
- [ArgIdx](const ExternalRelation &ExtRelation) {
- return ExtRelation.To.Index == ArgIdx + 1 ||
- ExtRelation.From.Index == ArgIdx + 1;
- });
-
- return (!ArgIsAccessed && !ArgAttributeIsWritten) ? MRI_NoModRef
- : MRI_ModRef;
- }
-
- return MRI_ModRef;
-}
-
-FunctionModRefBehavior
-CFLSteensAAResult::getModRefBehavior(ImmutableCallSite CS) {
- // If we know the callee, try analyzing it
- if (auto CalledFunc = CS.getCalledFunction())
- return getModRefBehavior(CalledFunc);
-
- // Otherwise, be conservative
- return FMRB_UnknownModRefBehavior;
-}
-
-FunctionModRefBehavior CFLSteensAAResult::getModRefBehavior(const Function *F) {
- assert(F != nullptr);
-
- // TODO: Remove the const_cast
- auto &MaybeInfo = ensureCached(const_cast<Function *>(F));
- if (!MaybeInfo.hasValue())
- return FMRB_UnknownModRefBehavior;
- auto &RetParamAttributes = MaybeInfo->getAliasSummary().RetParamAttributes;
- auto &RetParamRelations = MaybeInfo->getAliasSummary().RetParamRelations;
-
- // First, if any argument is marked Escpaed, Unknown or Global, anything may
- // happen to them and thus we can't draw any conclusion.
- if (!RetParamAttributes.empty())
- return FMRB_UnknownModRefBehavior;
-
- // Currently we don't (and can't) distinguish reads from writes in
- // RetParamRelations. All we can say is whether there may be memory access or
- // not.
- if (RetParamRelations.empty())
- return FMRB_DoesNotAccessMemory;
-
- // Check if something beyond argmem gets touched.
- bool AccessArgMemoryOnly =
- std::all_of(RetParamRelations.begin(), RetParamRelations.end(),
- [](const ExternalRelation &ExtRelation) {
- // Both DerefLevels has to be 0, since we don't know which
- // one is a read and which is a write.
- return ExtRelation.From.DerefLevel == 0 &&
- ExtRelation.To.DerefLevel == 0;
- });
- return AccessArgMemoryOnly ? FMRB_OnlyAccessesArgumentPointees
- : FMRB_UnknownModRefBehavior;
-}
-
-char CFLSteensAA::PassID;
+AnalysisKey CFLSteensAA::Key;
-CFLSteensAAResult CFLSteensAA::run(Function &F, AnalysisManager<Function> &AM) {
+CFLSteensAAResult CFLSteensAA::run(Function &F, FunctionAnalysisManager &AM) {
return CFLSteensAAResult(AM.getResult<TargetLibraryAnalysis>(F));
}