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 // This file implements an Interference graph node for coloring-based register
13 //===----------------------------------------------------------------------===//
21 //-----------------------------------------------------------------------------
22 // Sets this IGNode on stack and reduce the degree of neighbors
23 //-----------------------------------------------------------------------------
25 void IGNode::pushOnStack() {
27 int neighs = AdjList.size();
30 std::cerr << "\nAdj List size = " << neighs;
31 assert(0 && "Invalid adj list size");
34 for (int i=0; i < neighs; i++)
35 AdjList[i]->decCurDegree();
38 //-----------------------------------------------------------------------------
39 // Deletes an adjacency node. IGNodes are deleted when coalescing merges
40 // two IGNodes together.
41 //-----------------------------------------------------------------------------
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!");
49 //-----------------------------------------------------------------------------
50 // Get the number of unique neighbors if these two nodes are merged
51 //-----------------------------------------------------------------------------
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();
62 } // End llvm namespace