Make assertIGNode be private to the InterferenceGraph.cpp file
[oota-llvm.git] / lib / Target / SparcV9 / RegAlloc / InterferenceGraph.h
1 /* Title:   InterferenceGraph.h   -*- C++ -*-
2    Author:  Ruchira Sasanka
3    Date:    July 20, 01
4    Purpose: Interference Graph used for register coloring.
5
6    Notes: 
7    Adj Info is  stored in the lower trangular matrix (i.e., row > col ) 
8
9    This class must be used in the following way:
10
11    * Construct class
12    * call addLRToIG as many times to add ALL LRs to this IG
13    * call createGraph to create the actual matrix
14    * Then setInterference, getInterference, mergeIGNodesOfLRs can be 
15      called as desired to modify the graph.
16    * Once the modifications to the graph are over, call 
17      setCurDegreeOfIGNodes() before pushing IGNodes on to stack for coloring.
18 */
19
20
21 #ifndef  INTERFERENCE_GRAPH_H
22 #define  INTERFERENCE_GRAPH_H
23
24
25 #include "llvm/CodeGen/IGNode.h"
26
27 typedef std::vector <IGNode *> IGNodeListType;
28
29
30 class InterferenceGraph {
31   char **IG;                            // a poiner to the interference graph
32   unsigned int Size;                    // size of a side of the IG
33   RegClass *const RegCl;                // RegCl contains this IG
34   IGNodeListType IGNodeList;            // a list of all IGNodes in a reg class
35                             
36  public:
37   // the matrix is not yet created by the constructor. Call createGraph() 
38   // to create it after adding all IGNodes to the IGNodeList
39   InterferenceGraph(RegClass *RC);
40   ~InterferenceGraph();
41
42   void createGraph();
43
44   void addLRToIG(LiveRange *LR);
45
46   void setInterference(const LiveRange *LR1,
47                        const LiveRange *LR2);
48
49   unsigned getInterference(const LiveRange *LR1,
50                            const LiveRange *LR2) const ;
51
52   void mergeIGNodesOfLRs(const LiveRange *LR1, LiveRange *LR2);
53
54   IGNodeListType &getIGNodeList() { return IGNodeList; } 
55   const IGNodeListType &getIGNodeList() const { return IGNodeList; } 
56
57   void setCurDegreeOfIGNodes();
58
59   void printIG() const;
60   void printIGNodeList() const;
61 };
62
63 #endif