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)

Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:60

Parameters

const 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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

Declared at: llvm/include/llvm/Analysis/BasicAliasAnalysis.h:135

Parameters

llvm::BasicAAResult::DecomposedGEP& DestGEP
const llvm::BasicAAResult::DecomposedGEP& SrcGEP