1 //===-- IGNode.cpp --------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
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.
8 //===----------------------------------------------------------------------===//
10 // class IGNode for coloring-based register allocation for LLVM.
12 //===----------------------------------------------------------------------===//
18 //-----------------------------------------------------------------------------
19 // Sets this IGNode on stack and reduce the degree of neighbors
20 //-----------------------------------------------------------------------------
22 void IGNode::pushOnStack() {
24 int neighs = AdjList.size();
27 std::cerr << "\nAdj List size = " << neighs;
28 assert(0 && "Invalid adj list size");
31 for(int i=0; i < neighs; i++)
32 AdjList[i]->decCurDegree();
35 //-----------------------------------------------------------------------------
36 // Deletes an adjacency node. IGNodes are deleted when coalescing merges
37 // two IGNodes together.
38 //-----------------------------------------------------------------------------
40 void IGNode::delAdjIGNode(const IGNode *Node) {
41 std::vector<IGNode *>::iterator It=find(AdjList.begin(), AdjList.end(), Node);
42 assert( It != AdjList.end() ); // the node must be there
46 //-----------------------------------------------------------------------------
47 // Get the number of unique neighbors if these two nodes are merged
48 //-----------------------------------------------------------------------------
51 IGNode::getCombinedDegree(const IGNode* otherNode) const
53 std::vector<IGNode*> nbrs(AdjList);
54 nbrs.insert(nbrs.end(), otherNode->AdjList.begin(), otherNode->AdjList.end());
55 sort(nbrs.begin(), nbrs.end());
56 std::vector<IGNode*>::iterator new_end = unique(nbrs.begin(), nbrs.end());
57 return new_end - nbrs.begin();