diff --git a/lib/CodeGen/RegAlloc/InterferenceGraph.cpp b/lib/CodeGen/RegAlloc/InterferenceGraph.cpp
index 0de7275..a366c11 100644
--- a/lib/CodeGen/RegAlloc/InterferenceGraph.cpp
+++ b/lib/CodeGen/RegAlloc/InterferenceGraph.cpp
@@ -1,6 +1,7 @@
 #include "llvm/CodeGen/InterferenceGraph.h"
 #include "Support/STLExtras.h"
 #include <iostream>
+#include <algorithm>
 using std::cerr;
 
 //-----------------------------------------------------------------------------
diff --git a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
index b5f9275..26e4788 100644
--- a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
@@ -58,7 +58,7 @@
 
     //assert(( L1->getTypeID() == L2->getTypeID()) && "Merge:Different types");
 
-    L1->add( *L2It );                   // add the var in L2 to L1
+    L1->insert(*L2It);                  // add the var in L2 to L1
     LiveRangeMap[ *L2It ] = L1;         // now the elements in L2 should map 
                                         //to L1    
   }
@@ -105,11 +105,9 @@
              
   for( ; ArgIt != ArgList.end() ; ++ArgIt) {     // for each argument
     LiveRange * ArgRange = new LiveRange();      // creates a new LR and 
-    const Value *const Val = (const Value *) *ArgIt;
+    const Value *Val = (const Value *) *ArgIt;
 
-    assert( Val);
-
-    ArgRange->add(Val);     // add the arg (def) to it
+    ArgRange->insert(Val);     // add the arg (def) to it
     LiveRangeMap[Val] = ArgRange;
 
     // create a temp machine op to find the register class of value
@@ -173,8 +171,8 @@
 	}
 
 	// create a new LR iff this operand is a def
-	if( OpI.isDef() ) {     
-	  const Value *const Def = *OpI;
+	if (OpI.isDef()) {     
+	  const Value *Def = *OpI;
 
 	  // Only instruction values are accepted for live ranges here
 	  if( Def->getValueType() != Value::InstructionVal ) {
@@ -188,10 +186,10 @@
 	  // see LR already there (because of multiple defs)
 	  if( !DefRange) {                  // if it is not in LiveRangeMap
 	    DefRange = new LiveRange();     // creates a new live range and 
-	    DefRange->add( Def );           // add the instruction (def) to it
+	    DefRange->insert(Def);          // add the instruction (def) to it
 	    LiveRangeMap[ Def ] = DefRange; // update the map
 
-	    if( DEBUG_RA > 1) { 	    
+	    if (DEBUG_RA > 1) { 	    
 	      cerr << "  creating a LR for def: ";    
 	      printValue(Def); cerr  << "\n";
 	    }
@@ -215,7 +213,7 @@
 
 	  }
 	  else {
-	    DefRange->add( Def );           // add the opearand to def range
+	    DefRange->insert(Def);          // add the opearand to def range
                                             // update the map - Operand points 
 	                                    // to the merged set
 	    LiveRangeMap[ Def ] = DefRange; 
diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
index 46f045c..422541c 100644
--- a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
@@ -17,6 +17,7 @@
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MachineFrameInfo.h"
+#include "llvm/Method.h"
 #include <iostream>
 #include <math.h>
 using std::cerr;
@@ -423,7 +424,7 @@
 
 
   for( ; ArgIt != ArgList.end() ; ++ArgIt) {  // for each argument
-    addInterference( *ArgIt, InSet, false );  // add interferences between 
+    addInterference((Value*)*ArgIt, InSet, false); // add interferences between 
                                               // args and LVars at start
     if( DEBUG_RA > 1) {
        cerr << " - %% adding interference for  argument ";    
diff --git a/lib/Target/SparcV9/RegAlloc/InterferenceGraph.cpp b/lib/Target/SparcV9/RegAlloc/InterferenceGraph.cpp
index 0de7275..a366c11 100644
--- a/lib/Target/SparcV9/RegAlloc/InterferenceGraph.cpp
+++ b/lib/Target/SparcV9/RegAlloc/InterferenceGraph.cpp
@@ -1,6 +1,7 @@
 #include "llvm/CodeGen/InterferenceGraph.h"
 #include "Support/STLExtras.h"
 #include <iostream>
+#include <algorithm>
 using std::cerr;
 
 //-----------------------------------------------------------------------------
diff --git a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
index b5f9275..26e4788 100644
--- a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
@@ -58,7 +58,7 @@
 
     //assert(( L1->getTypeID() == L2->getTypeID()) && "Merge:Different types");
 
-    L1->add( *L2It );                   // add the var in L2 to L1
+    L1->insert(*L2It);                  // add the var in L2 to L1
     LiveRangeMap[ *L2It ] = L1;         // now the elements in L2 should map 
                                         //to L1    
   }
@@ -105,11 +105,9 @@
              
   for( ; ArgIt != ArgList.end() ; ++ArgIt) {     // for each argument
     LiveRange * ArgRange = new LiveRange();      // creates a new LR and 
-    const Value *const Val = (const Value *) *ArgIt;
+    const Value *Val = (const Value *) *ArgIt;
 
-    assert( Val);
-
-    ArgRange->add(Val);     // add the arg (def) to it
+    ArgRange->insert(Val);     // add the arg (def) to it
     LiveRangeMap[Val] = ArgRange;
 
     // create a temp machine op to find the register class of value
@@ -173,8 +171,8 @@
 	}
 
 	// create a new LR iff this operand is a def
-	if( OpI.isDef() ) {     
-	  const Value *const Def = *OpI;
+	if (OpI.isDef()) {     
+	  const Value *Def = *OpI;
 
 	  // Only instruction values are accepted for live ranges here
 	  if( Def->getValueType() != Value::InstructionVal ) {
@@ -188,10 +186,10 @@
 	  // see LR already there (because of multiple defs)
 	  if( !DefRange) {                  // if it is not in LiveRangeMap
 	    DefRange = new LiveRange();     // creates a new live range and 
-	    DefRange->add( Def );           // add the instruction (def) to it
+	    DefRange->insert(Def);          // add the instruction (def) to it
 	    LiveRangeMap[ Def ] = DefRange; // update the map
 
-	    if( DEBUG_RA > 1) { 	    
+	    if (DEBUG_RA > 1) { 	    
 	      cerr << "  creating a LR for def: ";    
 	      printValue(Def); cerr  << "\n";
 	    }
@@ -215,7 +213,7 @@
 
 	  }
 	  else {
-	    DefRange->add( Def );           // add the opearand to def range
+	    DefRange->insert(Def);          // add the opearand to def range
                                             // update the map - Operand points 
 	                                    // to the merged set
 	    LiveRangeMap[ Def ] = DefRange; 
diff --git a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
index 46f045c..422541c 100644
--- a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
@@ -17,6 +17,7 @@
 #include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MachineFrameInfo.h"
+#include "llvm/Method.h"
 #include <iostream>
 #include <math.h>
 using std::cerr;
@@ -423,7 +424,7 @@
 
 
   for( ; ArgIt != ArgList.end() ; ++ArgIt) {  // for each argument
-    addInterference( *ArgIt, InSet, false );  // add interferences between 
+    addInterference((Value*)*ArgIt, InSet, false); // add interferences between 
                                               // args and LVars at start
     if( DEBUG_RA > 1) {
        cerr << " - %% adding interference for  argument ";    
