LLVM 20.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::AssumptionCache Class Reference

A cache of @llvm.assume calls within a function. More...

#include "llvm/Analysis/AssumptionCache.h"

Classes

struct  ResultElem
 

Public Types

enum  : unsigned { ExprResultIdx = std::numeric_limits<unsigned>::max() }
 Value of ResultElem::Index indicating that the argument to the call of the llvm.assume. More...
 

Public Member Functions

 AssumptionCache (Function &F, TargetTransformInfo *TTI=nullptr)
 Construct an AssumptionCache from a function by scanning all of its instructions.
 
bool invalidate (Function &, const PreservedAnalyses &, FunctionAnalysisManager::Invalidator &)
 This cache is designed to be self-updating and so it should never be invalidated.
 
void registerAssumption (AssumeInst *CI)
 Add an @llvm.assume intrinsic to this function's cache.
 
void unregisterAssumption (AssumeInst *CI)
 Remove an @llvm.assume intrinsic from this function's cache if it has been added to the cache earlier.
 
void updateAffectedValues (AssumeInst *CI)
 Update the cache of values being affected by this assumption (i.e.
 
void clear ()
 Clear the cache of @llvm.assume intrinsics for a function.
 
MutableArrayRef< ResultElemassumptions ()
 Access the list of assumption handles currently tracked for this function.
 
MutableArrayRef< ResultElemassumptionsFor (const Value *V)
 Access the list of assumptions which affect this value.
 

Detailed Description

A cache of @llvm.assume calls within a function.

This cache provides fast lookup of assumptions within a function by caching them and amortizing the cost of scanning for them across all queries. Passes that create new assumptions are required to call registerAssumption() to register any new @llvm.assume calls that they create. Deletions of @llvm.assume calls do not require special handling.

Definition at line 42 of file AssumptionCache.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : unsigned

Value of ResultElem::Index indicating that the argument to the call of the llvm.assume.

Enumerator
ExprResultIdx 

Definition at line 46 of file AssumptionCache.h.

Constructor & Destructor Documentation

◆ AssumptionCache()

llvm::AssumptionCache::AssumptionCache ( Function F,
TargetTransformInfo TTI = nullptr 
)
inline

Construct an AssumptionCache from a function by scanning all of its instructions.

Definition at line 109 of file AssumptionCache.h.

References F.

Member Function Documentation

◆ assumptions()

MutableArrayRef< ResultElem > llvm::AssumptionCache::assumptions ( )
inline

Access the list of assumption handles currently tracked for this function.

Note that these produce weak handles that may be null. The caller must handle that case. FIXME: We should replace this with pointee_iterator<filter_iterator<...>> when we can write that to filter out the null values. Then caller code will become simpler.

Definition at line 150 of file AssumptionCache.h.

Referenced by llvm::PredicateInfoBuilder::buildPredicateInfo(), llvm::ScalarEvolution::LoopGuards::collect(), llvm::CodeMetrics::collectEphemeralValues(), llvm::ScalarEvolution::getZeroExtendExprImpl(), llvm::ScalarEvolution::isBasicBlockEntryGuardedByCond(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), llvm::AssumptionPrinterPass::run(), llvm::AlignmentFromAssumptionsPass::runImpl(), and llvm::CodeExtractor::verifyAssumptionCache().

◆ assumptionsFor()

MutableArrayRef< ResultElem > llvm::AssumptionCache::assumptionsFor ( const Value V)
inline

◆ clear()

void llvm::AssumptionCache::clear ( )
inline

Clear the cache of @llvm.assume intrinsics for a function.

It will be re-scanned the next time it is requested.

Definition at line 136 of file AssumptionCache.h.

References llvm::SmallVectorImpl< T >::clear().

Referenced by llvm::LazyValueInfoWrapperPass::runOnFunction().

◆ invalidate()

bool llvm::AssumptionCache::invalidate ( Function ,
const PreservedAnalyses ,
FunctionAnalysisManager::Invalidator  
)
inline

This cache is designed to be self-updating and so it should never be invalidated.

Definition at line 114 of file AssumptionCache.h.

◆ registerAssumption()

void AssumptionCache::registerAssumption ( AssumeInst CI)

◆ unregisterAssumption()

void AssumptionCache::unregisterAssumption ( AssumeInst CI)

◆ updateAffectedValues()

void AssumptionCache::updateAffectedValues ( AssumeInst CI)

Update the cache of values being affected by this assumption (i.e.

the values about which this assumption provides information).

Definition at line 99 of file AssumptionCache.cpp.

References llvm::AssumptionCache::ResultElem::Assume, findAffectedValues(), llvm::AssumptionCache::ResultElem::Index, and llvm::none_of().

Referenced by registerAssumption(), and llvm::InstCombinerImpl::visitCallInst().


The documentation for this class was generated from the following files: