blob: a2257420529e712fb9d484129a00ac02b712e1e9 [file] [log] [blame]
Ruchira Sasanka8e604792001-09-14 21:18:34 +00001#include "llvm/CodeGen/IGNode.h"
Chris Lattner697954c2002-01-20 22:54:45 +00002#include <algorithm>
3#include <iostream>
4using std::cerr;
Ruchira Sasanka8e604792001-09-14 21:18:34 +00005
Ruchira Sasanka4f3eb222002-01-07 19:19:18 +00006//-----------------------------------------------------------------------------
7// Constructor
8//-----------------------------------------------------------------------------
Chris Lattner697954c2002-01-20 22:54:45 +00009IGNode::IGNode(LiveRange *const PLR, unsigned int Ind) : Index(Ind),
10 ParentLR(PLR)
Ruchira Sasanka8e604792001-09-14 21:18:34 +000011{
12 OnStack = false;
13 CurDegree = -1 ;
14 ParentLR->setUserIGNode( this );
15}
16
17
Ruchira Sasanka4f3eb222002-01-07 19:19:18 +000018//-----------------------------------------------------------------------------
19// Sets this IGNode on stack and reduce the degree of neighbors
20//-----------------------------------------------------------------------------
21void IGNode::pushOnStack()
22{
Ruchira Sasanka8e604792001-09-14 21:18:34 +000023 OnStack = true;
Ruchira Sasankaa9e45c82001-11-03 22:01:09 +000024 int neighs = AdjList.size();
Ruchira Sasanka8e604792001-09-14 21:18:34 +000025
Ruchira Sasankaa9e45c82001-11-03 22:01:09 +000026 if( neighs < 0) {
Chris Lattner697954c2002-01-20 22:54:45 +000027 cerr << "\nAdj List size = " << neighs;
Ruchira Sasankaa9e45c82001-11-03 22:01:09 +000028 assert(0 && "Invalid adj list size");
29 }
30
Chris Lattner697954c2002-01-20 22:54:45 +000031 for(int i=0; i < neighs; i++)
32 AdjList[i]->decCurDegree();
Ruchira Sasanka8e604792001-09-14 21:18:34 +000033}
34
Ruchira Sasanka4f3eb222002-01-07 19:19:18 +000035//-----------------------------------------------------------------------------
36// Deletes an adjacency node. IGNodes are deleted when coalescing merges
37// two IGNodes together.
38//-----------------------------------------------------------------------------
Ruchira Sasanka8e604792001-09-14 21:18:34 +000039void IGNode::delAdjIGNode(const IGNode *const Node) {
Chris Lattner697954c2002-01-20 22:54:45 +000040 std::vector<IGNode *>::iterator It =
41 find(AdjList.begin(), AdjList.end(), Node);
Ruchira Sasanka8e604792001-09-14 21:18:34 +000042 assert( It != AdjList.end() ); // the node must be there
Chris Lattner697954c2002-01-20 22:54:45 +000043
44 AdjList.erase(It);
Ruchira Sasanka8e604792001-09-14 21:18:34 +000045}