Remove getAllocatedRegNum(). Use getReg() instead.
[oota-llvm.git] / lib / Target / SparcV9 / RegAlloc / IGNode.cpp
1 //===-- IGNode.cpp --------------------------------------------------------===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 // 
10 // This file implements an Interference graph node for coloring-based register
11 // allocation.
12 // 
13 //===----------------------------------------------------------------------===//
14
15 #include "IGNode.h"
16 #include <algorithm>
17 #include <iostream>
18
19 namespace llvm {
20
21 //-----------------------------------------------------------------------------
22 // Sets this IGNode on stack and reduce the degree of neighbors  
23 //-----------------------------------------------------------------------------
24
25 void IGNode::pushOnStack() {
26   OnStack = true; 
27   int neighs = AdjList.size();
28
29   if (neighs < 0) {
30     std::cerr << "\nAdj List size = " << neighs;
31     assert(0 && "Invalid adj list size");
32   }
33
34   for (int i=0; i < neighs; i++)
35     AdjList[i]->decCurDegree();
36 }
37  
38 //-----------------------------------------------------------------------------
39 // Deletes an adjacency node. IGNodes are deleted when coalescing merges
40 // two IGNodes together.
41 //-----------------------------------------------------------------------------
42
43 void IGNode::delAdjIGNode(const IGNode *Node) {
44   std::vector<IGNode *>::iterator It=find(AdjList.begin(), AdjList.end(), Node);
45   assert(It != AdjList.end() && "The node must be there!");
46   AdjList.erase(It);
47 }
48
49 //-----------------------------------------------------------------------------
50 // Get the number of unique neighbors if these two nodes are merged
51 //-----------------------------------------------------------------------------
52
53 unsigned
54 IGNode::getCombinedDegree(const IGNode* otherNode) const {
55   std::vector<IGNode*> nbrs(AdjList);
56   nbrs.insert(nbrs.end(), otherNode->AdjList.begin(), otherNode->AdjList.end());
57   sort(nbrs.begin(), nbrs.end());
58   std::vector<IGNode*>::iterator new_end = unique(nbrs.begin(), nbrs.end());
59   return new_end - nbrs.begin();
60 }
61
62 } // End llvm namespace