summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp82
1 files changed, 0 insertions, 82 deletions
diff --git a/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp b/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
index f1fac43a5dc..fef397f3b25 100644
--- a/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp
@@ -341,88 +341,6 @@ AliasResult CFLSteensAAResult::query(const MemoryLocation &LocA,
return NoAlias;
}
-ModRefInfo CFLSteensAAResult::getArgModRefInfo(ImmutableCallSite CS,
- unsigned ArgIdx) {
- if (auto CalledFunc = CS.getCalledFunction()) {
- if (!CalledFunc->hasExactDefinition())
- return MRI_ModRef;
-
- 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);
-
- // We cannot process external functions
- if (!F->hasExactDefinition())
- return FMRB_UnknownModRefBehavior;
-
- // 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.
- bool AccessNoMemory =
- all_of(RetParamRelations, [](const ExternalRelation &ExtRelation) {
- return ExtRelation.From.DerefLevel == 0 &&
- ExtRelation.To.DerefLevel == 0;
- });
- if (AccessNoMemory)
- return FMRB_DoesNotAccessMemory;
-
- // Check if something beyond argmem gets touched.
- bool AccessArgMemoryOnly =
- all_of(RetParamRelations, [](const ExternalRelation &ExtRelation) {
- return ExtRelation.From.Index > 0 && ExtRelation.To.Index > 0 &&
- ExtRelation.From.DerefLevel <= 1 &&
- ExtRelation.To.DerefLevel <= 1;
- });
- return AccessArgMemoryOnly ? FMRB_OnlyAccessesArgumentPointees
- : FMRB_UnknownModRefBehavior;
-}
-
char CFLSteensAA::PassID;
CFLSteensAAResult CFLSteensAA::run(Function &F, AnalysisManager<Function> &AM) {
OpenPOWER on IntegriCloud