diff options
Diffstat (limited to 'llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp')
| -rw-r--r-- | llvm/lib/Analysis/CFLSteensAliasAnalysis.cpp | 82 |
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) { |

