class BasicAAResult
Declaration
class BasicAAResult : public AAResultBase { /* full declaration omitted */ };
Description
This is the AA result object for the basic, local, and stateless alias analysis. It implements the AA query interface in an entirely stateless manner. As one consequence, it is never invalidated due to IR changes. While it does retain some storage, that is used as an optimization and not to preserve information from query to query. However it does retain handles to various other analyses and must be recomputed when those analyses are.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:44
Inherits from: AAResultBase
Member Variables
- private const llvm::DataLayout& DL
- private const llvm::Function& F
- private const llvm::TargetLibraryInfo& TLI
- private llvm::AssumptionCache& AC
- private llvm::DominatorTree* DT
- private llvm::PhiValues* PV
- private SmallPtrSet<const llvm::BasicBlock*, 8> VisitedPhiBBs
- The following example shows the problem: %p = phi(%alloca1, %addr2) %l = load %ptr %addr1 = gep, %alloca2, 0, %l %addr2 = gep %alloca2, 0, (%l + 1) alias(%p, %addr1) -> MayAlias ! store %l, ...
- private SmallPtrSet<const llvm::Value*, 16> Visited
- Tracks instructions visited by pointsToConstantMemory.
Method Overview
- public BasicAAResult(const llvm::BasicAAResult & Arg)
- public BasicAAResult(llvm::BasicAAResult && Arg)
- public BasicAAResult(const llvm::DataLayout & DL, const llvm::Function & F, const llvm::TargetLibraryInfo & TLI, llvm::AssumptionCache & AC, llvm::DominatorTree * DT = nullptr, llvm::PhiValues * PV = nullptr)
- private static llvm::BasicAAResult::DecomposedGEP DecomposeGEPExpression(const llvm::Value * V, const llvm::DataLayout & DL, llvm::AssumptionCache * AC, llvm::DominatorTree * DT)
- public llvm::AliasResult alias(const llvm::MemoryLocation & LocA, const llvm::MemoryLocation & LocB, llvm::AAQueryInfo & AAQI)
- private llvm::AliasResult aliasCheck(const llvm::Value * V1, llvm::LocationSize V1Size, const llvm::Value * V2, llvm::LocationSize V2Size, llvm::AAQueryInfo & AAQI)
- private llvm::AliasResult aliasCheckRecursive(const llvm::Value * V1, llvm::LocationSize V1Size, const llvm::Value * V2, llvm::LocationSize V2Size, llvm::AAQueryInfo & AAQI, const llvm::Value * O1, const llvm::Value * O2)
- private llvm::AliasResult aliasGEP(const llvm::GEPOperator * V1, llvm::LocationSize V1Size, const llvm::Value * V2, llvm::LocationSize V2Size, const llvm::Value * UnderlyingV1, const llvm::Value * UnderlyingV2, llvm::AAQueryInfo & AAQI)
- private llvm::AliasResult aliasPHI(const llvm::PHINode * PN, llvm::LocationSize PNSize, const llvm::Value * V2, llvm::LocationSize V2Size, llvm::AAQueryInfo & AAQI)
- private llvm::AliasResult aliasSelect(const llvm::SelectInst * SI, llvm::LocationSize SISize, const llvm::Value * V2, llvm::LocationSize V2Size, llvm::AAQueryInfo & AAQI)
- private bool constantOffsetHeuristic(const llvm::BasicAAResult::DecomposedGEP & GEP, llvm::LocationSize V1Size, llvm::LocationSize V2Size, llvm::AssumptionCache * AC, llvm::DominatorTree * DT)
- public llvm::ModRefInfo getArgModRefInfo(const llvm::CallBase * Call, unsigned int ArgIdx)
- public llvm::FunctionModRefBehavior getModRefBehavior(const llvm::CallBase * Call)
- public llvm::FunctionModRefBehavior getModRefBehavior(const llvm::Function * Fn)
- public llvm::ModRefInfo getModRefInfo(const llvm::CallBase * Call1, const llvm::CallBase * Call2, llvm::AAQueryInfo & AAQI)
- public llvm::ModRefInfo getModRefInfo(const llvm::CallBase * Call, const llvm::MemoryLocation & Loc, llvm::AAQueryInfo & AAQI)
- public bool invalidate(llvm::Function & Fn, const llvm::PreservedAnalyses & PA, FunctionAnalysisManager::Invalidator & Inv)
- private bool isValueEqualInPotentialCycles(const llvm::Value * V1, const llvm::Value * V2)
- public bool pointsToConstantMemory(const llvm::MemoryLocation & Loc, llvm::AAQueryInfo & AAQI, bool OrLocal)
- private void subtractDecomposedGEPs(llvm::BasicAAResult::DecomposedGEP & DestGEP, const llvm::BasicAAResult::DecomposedGEP & SrcGEP)
Methods
¶BasicAAResult(const llvm::BasicAAResult& Arg)
BasicAAResult(const llvm::BasicAAResult& Arg)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:60
Parameters
- const llvm::BasicAAResult& Arg
¶BasicAAResult(llvm::BasicAAResult&& Arg)
BasicAAResult(llvm::BasicAAResult&& Arg)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:63
Parameters
- llvm::BasicAAResult&& Arg
¶BasicAAResult(const llvm::DataLayout& DL,
const llvm::Function& F,
const llvm::TargetLibraryInfo& TLI,
llvm::AssumptionCache& AC,
llvm::DominatorTree* DT = nullptr,
llvm::PhiValues* PV = nullptr)
BasicAAResult(const llvm::DataLayout& DL,
const llvm::Function& F,
const llvm::TargetLibraryInfo& TLI,
llvm::AssumptionCache& AC,
llvm::DominatorTree* DT = nullptr,
llvm::PhiValues* PV = nullptr)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:55
Parameters
- const llvm::DataLayout& DL
- const llvm::Function& F
- const llvm::TargetLibraryInfo& TLI
- llvm::AssumptionCache& AC
- llvm::DominatorTree* DT = nullptr
- llvm::PhiValues* PV = nullptr
¶static llvm::BasicAAResult::DecomposedGEP
DecomposeGEPExpression(const llvm::Value* V,
const llvm::DataLayout& DL,
llvm::AssumptionCache* AC,
llvm::DominatorTree* DT)
static llvm::BasicAAResult::DecomposedGEP
DecomposeGEPExpression(const llvm::Value* V,
const llvm::DataLayout& DL,
llvm::AssumptionCache* AC,
llvm::DominatorTree* DT)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:117
Parameters
- const llvm::Value* V
- const llvm::DataLayout& DL
- llvm::AssumptionCache* AC
- llvm::DominatorTree* DT
¶llvm::AliasResult alias(
const llvm::MemoryLocation& LocA,
const llvm::MemoryLocation& LocB,
llvm::AAQueryInfo& AAQI)
llvm::AliasResult alias(
const llvm::MemoryLocation& LocA,
const llvm::MemoryLocation& LocB,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:71
Parameters
- const llvm::MemoryLocation& LocA
- const llvm::MemoryLocation& LocB
- llvm::AAQueryInfo& AAQI
¶llvm::AliasResult aliasCheck(
const llvm::Value* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
llvm::AliasResult aliasCheck(
const llvm::Value* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:150
Parameters
- const llvm::Value* V1
- llvm::LocationSize V1Size
- const llvm::Value* V2
- llvm::LocationSize V2Size
- llvm::AAQueryInfo& AAQI
¶llvm::AliasResult aliasCheckRecursive(
const llvm::Value* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI,
const llvm::Value* O1,
const llvm::Value* O2)
llvm::AliasResult aliasCheckRecursive(
const llvm::Value* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI,
const llvm::Value* O1,
const llvm::Value* O2)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:154
Parameters
- const llvm::Value* V1
- llvm::LocationSize V1Size
- const llvm::Value* V2
- llvm::LocationSize V2Size
- llvm::AAQueryInfo& AAQI
- const llvm::Value* O1
- const llvm::Value* O2
¶llvm::AliasResult aliasGEP(
const llvm::GEPOperator* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
const llvm::Value* UnderlyingV1,
const llvm::Value* UnderlyingV2,
llvm::AAQueryInfo& AAQI)
llvm::AliasResult aliasGEP(
const llvm::GEPOperator* V1,
llvm::LocationSize V1Size,
const llvm::Value* V2,
llvm::LocationSize V2Size,
const llvm::Value* UnderlyingV1,
const llvm::Value* UnderlyingV2,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:138
Parameters
- const llvm::GEPOperator* V1
- llvm::LocationSize V1Size
- const llvm::Value* V2
- llvm::LocationSize V2Size
- const llvm::Value* UnderlyingV1
- const llvm::Value* UnderlyingV2
- llvm::AAQueryInfo& AAQI
¶llvm::AliasResult aliasPHI(
const llvm::PHINode* PN,
llvm::LocationSize PNSize,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
llvm::AliasResult aliasPHI(
const llvm::PHINode* PN,
llvm::LocationSize PNSize,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:143
Parameters
- const llvm::PHINode* PN
- llvm::LocationSize PNSize
- const llvm::Value* V2
- llvm::LocationSize V2Size
- llvm::AAQueryInfo& AAQI
¶llvm::AliasResult aliasSelect(
const llvm::SelectInst* SI,
llvm::LocationSize SISize,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
llvm::AliasResult aliasSelect(
const llvm::SelectInst* SI,
llvm::LocationSize SISize,
const llvm::Value* V2,
llvm::LocationSize V2Size,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:146
Parameters
- const llvm::SelectInst* SI
- llvm::LocationSize SISize
- const llvm::Value* V2
- llvm::LocationSize V2Size
- llvm::AAQueryInfo& AAQI
¶bool constantOffsetHeuristic(
const llvm::BasicAAResult::DecomposedGEP& GEP,
llvm::LocationSize V1Size,
llvm::LocationSize V2Size,
llvm::AssumptionCache* AC,
llvm::DominatorTree* DT)
bool constantOffsetHeuristic(
const llvm::BasicAAResult::DecomposedGEP& GEP,
llvm::LocationSize V1Size,
llvm::LocationSize V2Size,
llvm::AssumptionCache* AC,
llvm::DominatorTree* DT)
Description
A Heuristic for aliasGEP that searches for a constant offset between the variables. GetLinearExpression has some limitations, as generally zext(%x + 1) != zext(%x) + zext(1) if the arithmetic overflows. GetLinearExpression will therefore conservatively refuse to decompose these expressions. However, we know that, for all %x, zext(%x) != zext(%x + 1), even if the addition overflows.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:129
Parameters
- const llvm::BasicAAResult::DecomposedGEP& GEP
- llvm::LocationSize V1Size
- llvm::LocationSize V2Size
- llvm::AssumptionCache* AC
- llvm::DominatorTree* DT
¶llvm::ModRefInfo getArgModRefInfo(
const llvm::CallBase* Call,
unsigned int ArgIdx)
llvm::ModRefInfo getArgModRefInfo(
const llvm::CallBase* Call,
unsigned int ArgIdx)
Description
Get the location associated with a pointer argument of a callsite.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:85
Parameters
- const llvm::CallBase* Call
- unsigned int ArgIdx
¶llvm::FunctionModRefBehavior getModRefBehavior(
const llvm::CallBase* Call)
llvm::FunctionModRefBehavior getModRefBehavior(
const llvm::CallBase* Call)
Description
Returns the behavior when calling the given call site.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:88
Parameters
- const llvm::CallBase* Call
¶llvm::FunctionModRefBehavior getModRefBehavior(
const llvm::Function* Fn)
llvm::FunctionModRefBehavior getModRefBehavior(
const llvm::Function* Fn)
Description
Returns the behavior when calling the given function. For use when the call site is not known.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:92
Parameters
- const llvm::Function* Fn
¶llvm::ModRefInfo getModRefInfo(
const llvm::CallBase* Call1,
const llvm::CallBase* Call2,
llvm::AAQueryInfo& AAQI)
llvm::ModRefInfo getModRefInfo(
const llvm::CallBase* Call1,
const llvm::CallBase* Call2,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:77
Parameters
- const llvm::CallBase* Call1
- const llvm::CallBase* Call2
- llvm::AAQueryInfo& AAQI
¶llvm::ModRefInfo getModRefInfo(
const llvm::CallBase* Call,
const llvm::MemoryLocation& Loc,
llvm::AAQueryInfo& AAQI)
llvm::ModRefInfo getModRefInfo(
const llvm::CallBase* Call,
const llvm::MemoryLocation& Loc,
llvm::AAQueryInfo& AAQI)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:74
Parameters
- const llvm::CallBase* Call
- const llvm::MemoryLocation& Loc
- llvm::AAQueryInfo& AAQI
¶bool invalidate(
llvm::Function& Fn,
const llvm::PreservedAnalyses& PA,
FunctionAnalysisManager::Invalidator& Inv)
bool invalidate(
llvm::Function& Fn,
const llvm::PreservedAnalyses& PA,
FunctionAnalysisManager::Invalidator& Inv)
Description
Handle invalidation events in the new pass manager.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:68
Parameters
- llvm::Function& Fn
- const llvm::PreservedAnalyses& PA
- FunctionAnalysisManager::Invalidator& Inv
¶bool isValueEqualInPotentialCycles(
const llvm::Value* V1,
const llvm::Value* V2)
bool isValueEqualInPotentialCycles(
const llvm::Value* V1,
const llvm::Value* V2)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:133
Parameters
- const llvm::Value* V1
- const llvm::Value* V2
¶bool pointsToConstantMemory(
const llvm::MemoryLocation& Loc,
llvm::AAQueryInfo& AAQI,
bool OrLocal)
bool pointsToConstantMemory(
const llvm::MemoryLocation& Loc,
llvm::AAQueryInfo& AAQI,
bool OrLocal)
Description
Chases pointers until we find a (constant global) or not.
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:81
Parameters
- const llvm::MemoryLocation& Loc
- llvm::AAQueryInfo& AAQI
- bool OrLocal
¶void subtractDecomposedGEPs(
llvm::BasicAAResult::DecomposedGEP& DestGEP,
const llvm::BasicAAResult::DecomposedGEP&
SrcGEP)
void subtractDecomposedGEPs(
llvm::BasicAAResult::DecomposedGEP& DestGEP,
const llvm::BasicAAResult::DecomposedGEP&
SrcGEP)
Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:135
Parameters
- llvm::BasicAAResult::DecomposedGEP& DestGEP
- const llvm::BasicAAResult::DecomposedGEP& SrcGEP