LLVM 19.0.0git
Public Member Functions | Public Attributes | List of all members
llvm::ScalarEvolution::ExitLimit Struct Reference

Information about the number of loop iterations for which a loop exit's branch condition evaluates to the not-taken path. More...

#include "llvm/Analysis/ScalarEvolution.h"

Public Member Functions

void addPredicate (const SCEVPredicate *P)
 
 ExitLimit (const SCEV *E)
 Construct either an exact exit limit from a constant, or an unknown one from a SCEVCouldNotCompute.
 
 ExitLimit (const SCEV *E, const SCEV *ConstantMaxNotTaken, const SCEV *SymbolicMaxNotTaken, bool MaxOrZero, ArrayRef< const SmallPtrSetImpl< const SCEVPredicate * > * > PredSetList=std::nullopt)
 
 ExitLimit (const SCEV *E, const SCEV *ConstantMaxNotTaken, const SCEV *SymbolicMaxNotTaken, bool MaxOrZero, const SmallPtrSetImpl< const SCEVPredicate * > &PredSet)
 
bool hasAnyInfo () const
 Test whether this ExitLimit contains any computed information, or whether it's all SCEVCouldNotCompute values.
 
bool hasFullInfo () const
 Test whether this ExitLimit contains all information.
 

Public Attributes

const SCEVExactNotTaken
 
const SCEVConstantMaxNotTaken
 
const SCEVSymbolicMaxNotTaken
 
bool MaxOrZero = false
 
SmallPtrSet< const SCEVPredicate *, 4 > Predicates
 A set of predicate guards for this ExitLimit.
 

Detailed Description

Information about the number of loop iterations for which a loop exit's branch condition evaluates to the not-taken path.

This is a temporary pair of exact and max expressions that are eventually summarized in ExitNotTakenInfo and BackedgeTakenInfo.

Definition at line 1103 of file ScalarEvolution.h.

Constructor & Destructor Documentation

◆ ExitLimit() [1/3]

ScalarEvolution::ExitLimit::ExitLimit ( const SCEV E)

Construct either an exact exit limit from a constant, or an unknown one from a SCEVCouldNotCompute.

No other types of SCEVs are allowed as arguments and asserts enforce that internally.

Definition at line 8694 of file ScalarEvolution.cpp.

◆ ExitLimit() [2/3]

ScalarEvolution::ExitLimit::ExitLimit ( const SCEV E,
const SCEV ConstantMaxNotTaken,
const SCEV SymbolicMaxNotTaken,
bool  MaxOrZero,
ArrayRef< const SmallPtrSetImpl< const SCEVPredicate * > * >  PredSetList = std::nullopt 
)

◆ ExitLimit() [3/3]

ScalarEvolution::ExitLimit::ExitLimit ( const SCEV E,
const SCEV ConstantMaxNotTaken,
const SCEV SymbolicMaxNotTaken,
bool  MaxOrZero,
const SmallPtrSetImpl< const SCEVPredicate * > &  PredSet 
)

Definition at line 8733 of file ScalarEvolution.cpp.

Member Function Documentation

◆ addPredicate()

void llvm::ScalarEvolution::ExitLimit::addPredicate ( const SCEVPredicate P)
inline

Definition at line 1117 of file ScalarEvolution.h.

References assert(), P, and Predicates.

Referenced by ExitLimit().

◆ hasAnyInfo()

bool llvm::ScalarEvolution::ExitLimit::hasAnyInfo ( ) const
inline

Test whether this ExitLimit contains any computed information, or whether it's all SCEVCouldNotCompute values.

Definition at line 1139 of file ScalarEvolution.h.

References ConstantMaxNotTaken, and ExactNotTaken.

◆ hasFullInfo()

bool llvm::ScalarEvolution::ExitLimit::hasFullInfo ( ) const
inline

Test whether this ExitLimit contains all information.

Definition at line 1145 of file ScalarEvolution.h.

References ExactNotTaken.

Member Data Documentation

◆ ConstantMaxNotTaken

const SCEV* llvm::ScalarEvolution::ExitLimit::ConstantMaxNotTaken

Definition at line 1105 of file ScalarEvolution.h.

Referenced by ExitLimit(), and hasAnyInfo().

◆ ExactNotTaken

const SCEV* llvm::ScalarEvolution::ExitLimit::ExactNotTaken

Definition at line 1104 of file ScalarEvolution.h.

Referenced by ExitLimit(), hasAnyInfo(), and hasFullInfo().

◆ MaxOrZero

bool llvm::ScalarEvolution::ExitLimit::MaxOrZero = false

Definition at line 1110 of file ScalarEvolution.h.

◆ Predicates

SmallPtrSet<const SCEVPredicate *, 4> llvm::ScalarEvolution::ExitLimit::Predicates

A set of predicate guards for this ExitLimit.

The result is only valid if all of the predicates in Predicates evaluate to 'true' at run-time.

Definition at line 1115 of file ScalarEvolution.h.

Referenced by addPredicate().

◆ SymbolicMaxNotTaken

const SCEV* llvm::ScalarEvolution::ExitLimit::SymbolicMaxNotTaken

Definition at line 1107 of file ScalarEvolution.h.

Referenced by ExitLimit(), and optimizeLoopExitWithUnknownExitCount().


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