Remove unused field. Change the way unused regs. are marked and
[oota-llvm.git] / lib / CodeGen / RegAlloc / IGNode.cpp
1 //===-- IGNode.cpp -------------------------------------------------------===//
2 // 
3 //  class IGNode for coloring-based register allocation for LLVM.
4 // 
5 //===----------------------------------------------------------------------===//
6
7 #include "llvm/CodeGen/IGNode.h"
8 #include <algorithm>
9 #include <iostream>
10 using std::cerr;
11
12 //-----------------------------------------------------------------------------
13 // Sets this IGNode on stack and reduce the degree of neighbors  
14 //-----------------------------------------------------------------------------
15
16 void IGNode::pushOnStack() {
17   OnStack = true; 
18   int neighs = AdjList.size();
19
20   if (neighs < 0) {
21     cerr << "\nAdj List size = " << neighs;
22     assert(0 && "Invalid adj list size");
23   }
24
25   for(int i=0; i < neighs; i++)
26     AdjList[i]->decCurDegree();
27 }
28  
29 //-----------------------------------------------------------------------------
30 // Deletes an adjacency node. IGNodes are deleted when coalescing merges
31 // two IGNodes together.
32 //-----------------------------------------------------------------------------
33
34 void IGNode::delAdjIGNode(const IGNode *Node) {
35   std::vector<IGNode *>::iterator It=find(AdjList.begin(), AdjList.end(), Node);
36   assert( It != AdjList.end() );      // the node must be there
37   AdjList.erase(It);
38 }
39
40 //-----------------------------------------------------------------------------
41 // Get the number of unique neighbors if these two nodes are merged
42 //-----------------------------------------------------------------------------
43
44 unsigned
45 IGNode::getCombinedDegree(const IGNode* otherNode) const
46 {
47   std::vector<IGNode*> nbrs(AdjList);
48   nbrs.insert(nbrs.end(), otherNode->AdjList.begin(), otherNode->AdjList.end());
49   sort(nbrs.begin(), nbrs.end());
50   std::vector<IGNode*>::iterator new_end = unique(nbrs.begin(), nbrs.end());
51   return new_end - nbrs.begin();
52 }
53
54