LLVM 20.0.0git
|
FullDependence - This class represents a dependence between two memory references in a function. More...
#include "llvm/Analysis/DependenceAnalysis.h"
Public Member Functions | |
FullDependence (Instruction *Src, Instruction *Dst, bool LoopIndependent, unsigned Levels) | |
bool | isLoopIndependent () const override |
isLoopIndependent - Returns true if this is a loop-independent dependence. | |
bool | isConfused () const override |
isConfused - Returns true if this dependence is confused (the compiler understands nothing and makes worst-case assumptions). | |
bool | isConsistent () const override |
isConsistent - Returns true if this dependence is consistent (occurs every time the source and destination are executed). | |
unsigned | getLevels () const override |
getLevels - Returns the number of common loops surrounding the source and destination of the dependence. | |
unsigned | getDirection (unsigned Level) const override |
getDirection - Returns the direction associated with a particular level. | |
const SCEV * | getDistance (unsigned Level) const override |
getDistance - Returns the distance (or NULL) associated with a particular level. | |
bool | isDirectionNegative () const override |
Check if the direction vector is negative. | |
bool | normalize (ScalarEvolution *SE) override |
If the direction vector is negative, normalize the direction vector to make it non-negative. | |
bool | isPeelFirst (unsigned Level) const override |
isPeelFirst - Returns true if peeling the first iteration from this loop will break this dependence. | |
bool | isPeelLast (unsigned Level) const override |
isPeelLast - Returns true if peeling the last iteration from this loop will break this dependence. | |
bool | isSplitable (unsigned Level) const override |
isSplitable - Returns true if splitting the loop will break the dependence. | |
bool | isScalar (unsigned Level) const override |
isScalar - Returns true if a particular level is scalar; that is, if no subscript in the source or destination mention the induction variable associated with the loop at this level. | |
Public Member Functions inherited from llvm::Dependence | |
Dependence (Instruction *Source, Instruction *Destination) | |
virtual | ~Dependence ()=default |
Instruction * | getSrc () const |
getSrc - Returns the source instruction for this dependence. | |
Instruction * | getDst () const |
getDst - Returns the destination instruction for this dependence. | |
bool | isInput () const |
isInput - Returns true if this is an input dependence. | |
bool | isOutput () const |
isOutput - Returns true if this is an output dependence. | |
bool | isFlow () const |
isFlow - Returns true if this is a flow (aka true) dependence. | |
bool | isAnti () const |
isAnti - Returns true if this is an anti dependence. | |
bool | isOrdered () const |
isOrdered - Returns true if dependence is Output, Flow, or Anti | |
bool | isUnordered () const |
isUnordered - Returns true if dependence is Input | |
virtual bool | isLoopIndependent () const |
isLoopIndependent - Returns true if this is a loop-independent dependence. | |
virtual bool | isConfused () const |
isConfused - Returns true if this dependence is confused (the compiler understands nothing and makes worst-case assumptions). | |
virtual bool | isConsistent () const |
isConsistent - Returns true if this dependence is consistent (occurs every time the source and destination are executed). | |
virtual unsigned | getLevels () const |
getLevels - Returns the number of common loops surrounding the source and destination of the dependence. | |
virtual unsigned | getDirection (unsigned Level) const |
getDirection - Returns the direction associated with a particular level. | |
virtual const SCEV * | getDistance (unsigned Level) const |
getDistance - Returns the distance (or NULL) associated with a particular level. | |
virtual bool | isDirectionNegative () const |
Check if the direction vector is negative. | |
virtual bool | normalize (ScalarEvolution *SE) |
If the direction vector is negative, normalize the direction vector to make it non-negative. | |
virtual bool | isPeelFirst (unsigned Level) const |
isPeelFirst - Returns true if peeling the first iteration from this loop will break this dependence. | |
virtual bool | isPeelLast (unsigned Level) const |
isPeelLast - Returns true if peeling the last iteration from this loop will break this dependence. | |
virtual bool | isSplitable (unsigned Level) const |
isSplitable - Returns true if splitting this loop will break the dependence. | |
virtual bool | isScalar (unsigned Level) const |
isScalar - Returns true if a particular level is scalar; that is, if no subscript in the source or destination mention the induction variable associated with the loop at this level. | |
const Dependence * | getNextPredecessor () const |
getNextPredecessor - Returns the value of the NextPredecessor field. | |
const Dependence * | getNextSuccessor () const |
getNextSuccessor - Returns the value of the NextSuccessor field. | |
void | setNextPredecessor (const Dependence *pred) |
setNextPredecessor - Sets the value of the NextPredecessor field. | |
void | setNextSuccessor (const Dependence *succ) |
setNextSuccessor - Sets the value of the NextSuccessor field. | |
void | dump (raw_ostream &OS) const |
dump - For debugging purposes, dumps a dependence to OS. | |
Friends | |
class | DependenceInfo |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::Dependence | |
Dependence (Dependence &&)=default | |
Dependence & | operator= (Dependence &&)=default |
Protected Attributes inherited from llvm::Dependence | |
Instruction * | Src |
Instruction * | Dst |
FullDependence - This class represents a dependence between two memory references in a function.
It contains detailed information about the dependence (direction vectors, etc.) and is used when the compiler is able to accurately analyze the interaction of the references; that is, it is not a confused dependence (see Dependence). In most cases (for output, flow, and anti dependences), the dependence implies an ordering, where the source must precede the destination; in contrast, input dependences are unordered.
Definition at line 226 of file DependenceAnalysis.h.
FullDependence::FullDependence | ( | Instruction * | Src, |
Instruction * | Dst, | ||
bool | LoopIndependent, | ||
unsigned | Levels | ||
) |
Definition at line 265 of file DependenceAnalysis.cpp.
getDirection - Returns the direction associated with a particular level.
Reimplemented from llvm::Dependence.
Definition at line 334 of file DependenceAnalysis.cpp.
References assert().
getDistance - Returns the distance (or NULL) associated with a particular level.
Reimplemented from llvm::Dependence.
Definition at line 341 of file DependenceAnalysis.cpp.
References assert().
|
inlineoverridevirtual |
getLevels - Returns the number of common loops surrounding the source and destination of the dependence.
Reimplemented from llvm::Dependence.
Definition at line 246 of file DependenceAnalysis.h.
|
inlineoverridevirtual |
isConfused - Returns true if this dependence is confused (the compiler understands nothing and makes worst-case assumptions).
Reimplemented from llvm::Dependence.
Definition at line 238 of file DependenceAnalysis.h.
|
inlineoverridevirtual |
isConsistent - Returns true if this dependence is consistent (occurs every time the source and destination are executed).
Reimplemented from llvm::Dependence.
Definition at line 242 of file DependenceAnalysis.h.
|
overridevirtual |
Check if the direction vector is negative.
A negative direction vector means Src and Dst are reversed in the actual program.
Reimplemented from llvm::Dependence.
Definition at line 290 of file DependenceAnalysis.cpp.
References llvm::Dependence::DVEntry::EQ, llvm::Dependence::DVEntry::GE, and llvm::Dependence::DVEntry::GT.
Referenced by normalize().
|
inlineoverridevirtual |
isLoopIndependent - Returns true if this is a loop-independent dependence.
Reimplemented from llvm::Dependence.
Definition at line 233 of file DependenceAnalysis.h.
isPeelFirst - Returns true if peeling the first iteration from this loop will break this dependence.
Reimplemented from llvm::Dependence.
Definition at line 358 of file DependenceAnalysis.cpp.
References assert().
isPeelLast - Returns true if peeling the last iteration from this loop will break this dependence.
Reimplemented from llvm::Dependence.
Definition at line 366 of file DependenceAnalysis.cpp.
References assert().
isScalar - Returns true if a particular level is scalar; that is, if no subscript in the source or destination mention the induction variable associated with the loop at this level.
Reimplemented from llvm::Dependence.
Definition at line 350 of file DependenceAnalysis.cpp.
References assert().
isSplitable - Returns true if splitting the loop will break the dependence.
Reimplemented from llvm::Dependence.
Definition at line 373 of file DependenceAnalysis.cpp.
References assert().
|
overridevirtual |
If the direction vector is negative, normalize the direction vector to make it non-negative.
Normalization is done by reversing Src and Dst, plus reversing the dependence directions and distances in the vector.
Reimplemented from llvm::Dependence.
Definition at line 303 of file DependenceAnalysis.cpp.
References llvm::dbgs(), llvm::Dependence::Dst, llvm::Dependence::dump(), llvm::Dependence::DVEntry::EQ, llvm::ScalarEvolution::getNegativeSCEV(), llvm::Dependence::DVEntry::GT, isDirectionNegative(), LLVM_DEBUG, llvm::Dependence::DVEntry::LT, llvm::Dependence::Src, and std::swap().
|
friend |
Definition at line 288 of file DependenceAnalysis.h.