diff options
Diffstat (limited to 'lib/CodeGen/InstrSched/SchedGraph.h')
-rw-r--r-- | lib/CodeGen/InstrSched/SchedGraph.h | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/lib/CodeGen/InstrSched/SchedGraph.h b/lib/CodeGen/InstrSched/SchedGraph.h deleted file mode 100644 index 53ded6377d..0000000000 --- a/lib/CodeGen/InstrSched/SchedGraph.h +++ /dev/null @@ -1,262 +0,0 @@ -//===-- SchedGraph.h - Scheduling Graph -------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This is a scheduling graph based on SSA graph plus extra dependence edges -// capturing dependences due to machine resources (machine registers, CC -// registers, and any others). -// -// This graph tries to leverage the SSA graph as much as possible, but captures -// the extra dependences through a common interface. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CODEGEN_SCHEDGRAPH_H -#define LLVM_CODEGEN_SCHEDGRAPH_H - -#include "llvm/CodeGen/SchedGraphCommon.h" -#include "llvm/CodeGen/MachineInstr.h" -#include "llvm/Transforms/Scalar.h" -#include "llvm/ADT/hash_map" -#include "llvm/ADT/GraphTraits.h" - -namespace llvm { - -class RegToRefVecMap; -class ValueToDefVecMap; -class RefVec; - -class SchedGraphNode : public SchedGraphNodeCommon { - - MachineBasicBlock *MBB; - const MachineInstr *MI; - - - SchedGraphNode(unsigned nodeId, MachineBasicBlock *mbb, int indexInBB, - const TargetMachine& Target); - ~SchedGraphNode(); - - friend class SchedGraph; // give access for ctor and dtor - friend class SchedGraphEdge; // give access for adding edges - -public: - - // Accessor methods - const MachineInstr* getMachineInstr() const { return MI; } - const MachineOpCode getOpcode() const { return MI->getOpcode(); } - bool isDummyNode() const { return (MI == NULL); } - MachineBasicBlock &getMachineBasicBlock() const { return *MBB; } - - void print(std::ostream &os) const; -}; - -class SchedGraph : public SchedGraphCommon { - MachineBasicBlock &MBB; - hash_map<const MachineInstr*, SchedGraphNode*> GraphMap; - -public: - typedef hash_map<const MachineInstr*, SchedGraphNode*>::const_iterator iterator; - typedef hash_map<const MachineInstr*, SchedGraphNode*>::const_iterator const_iterator; - - MachineBasicBlock& getBasicBlock() const{return MBB;} - const unsigned int getNumNodes() const { return GraphMap.size()+2; } - SchedGraphNode* getGraphNodeForInstr(const MachineInstr* MI) const { - const_iterator onePair = find(MI); - return (onePair != end())? onePair->second : NULL; - } - - // Debugging support - void dump() const; - -protected: - SchedGraph(MachineBasicBlock& mbb, const TargetMachine& TM); - ~SchedGraph(); - - // Unordered iterators. - // Return values is pair<const MachineIntr*,SchedGraphNode*>. - // - hash_map<const MachineInstr*, SchedGraphNode*>::const_iterator begin() const { - return GraphMap.begin(); - } - hash_map<const MachineInstr*, SchedGraphNode*>::const_iterator end() const { - return GraphMap.end(); - } - - unsigned size() { return GraphMap.size(); } - iterator find(const MachineInstr *MI) const { return GraphMap.find(MI); } - - SchedGraphNode *&operator[](const MachineInstr *MI) { - return GraphMap[MI]; - } - -private: - friend class SchedGraphSet; // give access to ctor - - inline void noteGraphNodeForInstr (const MachineInstr* minstr, - SchedGraphNode* node) { - assert((*this)[minstr] == NULL); - (*this)[minstr] = node; - } - - // - // Graph builder - // - void buildGraph(const TargetMachine& target); - - void buildNodesForBB(const TargetMachine& target,MachineBasicBlock &MBB, - std::vector<SchedGraphNode*>& memNV, - std::vector<SchedGraphNode*>& callNV, - RegToRefVecMap& regToRefVecMap, - ValueToDefVecMap& valueToDefVecMap); - - - void findDefUseInfoAtInstr(const TargetMachine& target, SchedGraphNode* node, - std::vector<SchedGraphNode*>& memNV, - std::vector<SchedGraphNode*>& callNV, - RegToRefVecMap& regToRefVecMap, - ValueToDefVecMap& valueToDefVecMap); - - void addEdgesForInstruction(const MachineInstr& minstr, - const ValueToDefVecMap& valueToDefVecMap, - const TargetMachine& target); - - void addCDEdges(const TerminatorInst* term, const TargetMachine& target); - - void addMemEdges(const std::vector<SchedGraphNode*>& memNod, - const TargetMachine& target); - - void addCallCCEdges(const std::vector<SchedGraphNode*>& memNod, - MachineBasicBlock& bbMvec, - const TargetMachine& target); - - void addCallDepEdges(const std::vector<SchedGraphNode*>& callNV, - const TargetMachine& target); - - void addMachineRegEdges(RegToRefVecMap& regToRefVecMap, - const TargetMachine& target); - - void addEdgesForValue(SchedGraphNode* refNode, const RefVec& defVec, - const Value* defValue, bool refNodeIsDef, - bool refNodeIsDefAndUse, - const TargetMachine& target); - - void addDummyEdges(); - -}; - - - -class SchedGraphSet { - const Function* function; - std::vector<SchedGraph*> Graphs; - - // Graph builder - void buildGraphsForMethod(const Function *F, const TargetMachine& target); - - inline void addGraph(SchedGraph* graph) { - assert(graph != NULL); - Graphs.push_back(graph); - } - -public: - SchedGraphSet(const Function *function, const TargetMachine& target); - ~SchedGraphSet(); - - //iterators - typedef std::vector<SchedGraph*>::const_iterator iterator; - typedef std::vector<SchedGraph*>::const_iterator const_iterator; - - std::vector<SchedGraph*>::const_iterator begin() const { return Graphs.begin(); } - std::vector<SchedGraph*>::const_iterator end() const { return Graphs.end(); } - - // Debugging support - void dump() const; -}; - - - - -// -// sg_pred_iterator -// sg_pred_const_iterator -// -typedef SGPredIterator<SchedGraphNode, SchedGraphEdge, SchedGraphNode::iterator> - sg_pred_iterator; -typedef SGPredIterator<const SchedGraphNode, const SchedGraphEdge,SchedGraphNode::const_iterator> - sg_pred_const_iterator; - -inline sg_pred_iterator pred_begin(SchedGraphNode *N) { - return sg_pred_iterator(N->beginInEdges()); -} -inline sg_pred_iterator pred_end(SchedGraphNode *N) { - return sg_pred_iterator(N->endInEdges()); -} -inline sg_pred_const_iterator pred_begin(const SchedGraphNode *N) { - return sg_pred_const_iterator(N->beginInEdges()); -} -inline sg_pred_const_iterator pred_end(const SchedGraphNode *N) { - return sg_pred_const_iterator(N->endInEdges()); -} - - -// -// sg_succ_iterator -// sg_succ_const_iterator -// -typedef SGSuccIterator<SchedGraphNode, SchedGraphEdge, SchedGraphNode::iterator> - sg_succ_iterator; -typedef SGSuccIterator<const SchedGraphNode, const SchedGraphEdge,SchedGraphNode::const_iterator> - sg_succ_const_iterator; - -inline sg_succ_iterator succ_begin(SchedGraphNode *N) { - return sg_succ_iterator(N->beginOutEdges()); -} -inline sg_succ_iterator succ_end(SchedGraphNode *N) { - return sg_succ_iterator(N->endOutEdges()); -} -inline sg_succ_const_iterator succ_begin(const SchedGraphNode *N) { - return sg_succ_const_iterator(N->beginOutEdges()); -} -inline sg_succ_const_iterator succ_end(const SchedGraphNode *N) { - return sg_succ_const_iterator(N->endOutEdges()); -} - -// Provide specializations of GraphTraits to be able to use graph iterators on -// the scheduling graph! -// -template <> struct GraphTraits<SchedGraph*> { - typedef SchedGraphNode NodeType; - typedef sg_succ_iterator ChildIteratorType; - - static inline NodeType *getEntryNode(SchedGraph *SG) { return (NodeType*)SG->getRoot(); } - static inline ChildIteratorType child_begin(NodeType *N) { - return succ_begin(N); - } - static inline ChildIteratorType child_end(NodeType *N) { - return succ_end(N); - } -}; - -template <> struct GraphTraits<const SchedGraph*> { - typedef const SchedGraphNode NodeType; - typedef sg_succ_const_iterator ChildIteratorType; - - static inline NodeType *getEntryNode(const SchedGraph *SG) { - return (NodeType*)SG->getRoot(); - } - static inline ChildIteratorType child_begin(NodeType *N) { - return succ_begin(N); - } - static inline ChildIteratorType child_end(NodeType *N) { - return succ_end(N); - } -}; - -} // End llvm namespace - -#endif |