extending the interface of Dependence slightly to support future work

llvm-svn: 185241
This commit is contained in:
Preston Briggs 2013-06-28 23:34:23 +00:00
parent 5c47650fe0
commit bb97db3df9
1 changed files with 35 additions and 1 deletions

View File

@ -61,11 +61,20 @@ namespace llvm {
/// cases (for output, flow, and anti dependences), the dependence implies /// cases (for output, flow, and anti dependences), the dependence implies
/// an ordering, where the source must precede the destination; in contrast, /// an ordering, where the source must precede the destination; in contrast,
/// input dependences are unordered. /// input dependences are unordered.
///
/// When a dependence graph is built, each Dependence will be a member of
/// the set of predecessor edges for its destination instruction and a set
/// if successor edges for its source instruction. These sets are represented
/// as singly-linked lists, with the "next" fields stored in the dependence
/// itelf.
class Dependence { class Dependence {
public: public:
Dependence(Instruction *Source, Dependence(Instruction *Source,
Instruction *Destination) : Instruction *Destination) :
Src(Source), Dst(Destination) {} Src(Source),
Dst(Destination),
NextPredecessor(NULL),
NextSuccessor(NULL) {}
virtual ~Dependence() {} virtual ~Dependence() {}
/// Dependence::DVEntry - Each level in the distance/direction vector /// Dependence::DVEntry - Each level in the distance/direction vector
@ -164,11 +173,36 @@ namespace llvm {
/// variable associated with the loop at this level. /// variable associated with the loop at this level.
virtual bool isScalar(unsigned Level) const; virtual bool isScalar(unsigned Level) const;
/// getNextPredecessor - Returns the value of the NextPredecessor
/// field.
const Dependence *getNextPredecessor() const {
return NextPredecessor;
}
/// getNextSuccessor - Returns the value of the NextSuccessor
/// field.
const Dependence *getNextSuccessor() const {
return NextSuccessor;
}
/// setNextPredecessor - Sets the value of the NextPredecessor
/// field.
void setNextPredecessor(const Dependence *pred) {
NextPredecessor = pred;
}
/// setNextSuccessor - Sets the value of the NextSuccessor
/// field.
void setNextSuccessor(const Dependence *succ) {
NextSuccessor = succ;
}
/// dump - For debugging purposes, dumps a dependence to OS. /// dump - For debugging purposes, dumps a dependence to OS.
/// ///
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
private: private:
Instruction *Src, *Dst; Instruction *Src, *Dst;
const Dependence *NextPredecessor, *NextSuccessor;
friend class DependenceAnalysis; friend class DependenceAnalysis;
}; };