Added new circuit finding alogrithm.

Fixed bug in graph so that phi ite diff edges are added.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20108 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
index fa523d1..a8215d6 100644
--- a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
+++ b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
@@ -67,7 +67,7 @@
     int II;
 
     //Internal functions
-    void CreateDefMap(MachineBasicBlock *BI);
+    bool CreateDefMap(MachineBasicBlock *BI);
     bool MachineBBisValid(const MachineBasicBlock *BI);
     int calculateResMII(const MachineBasicBlock *BI);
     int calculateRecMII(MSchedGraph *graph, int MII);
@@ -87,6 +87,16 @@
 			     std::vector<MSchedGraphNode*> &visitedNodes, int II);
     void addReccurrence(std::vector<MSchedGraphNode*> &recurrence, int II, MSchedGraphNode*, MSchedGraphNode*);
 
+    void findAllCircuits(MSchedGraph *MSG, int II);
+    bool circuit(MSchedGraphNode *v, std::vector<MSchedGraphNode*> &stack, 
+		 std::set<MSchedGraphNode*> &blocked, 
+		 std::vector<MSchedGraphNode*> &SCC, MSchedGraphNode *s,
+		 std::map<MSchedGraphNode*, std::set<MSchedGraphNode*> > &B, int II,
+		 std::map<MSchedGraphNode*, MSchedGraphNode*> &newNodes);
+    
+    void unblock(MSchedGraphNode *u, std::set<MSchedGraphNode*> &blocked,
+		 std::map<MSchedGraphNode*, std::set<MSchedGraphNode*> > &B);
+
     void computePartialOrder();
     bool computeSchedule();
     bool scheduleNode(MSchedGraphNode *node,