diff --git a/llvm/lib/CodeGen/InstrSched/SchedGraph.h b/llvm/lib/CodeGen/InstrSched/SchedGraph.h
index 99e2057..8a8a523 100644
--- a/llvm/lib/CodeGen/InstrSched/SchedGraph.h
+++ b/llvm/lib/CodeGen/InstrSched/SchedGraph.h
@@ -336,49 +336,35 @@
 
 class SchedGraphSet :  
   public NonCopyable,
-  private std::hash_map<const BasicBlock*, SchedGraph*>
+  private std::vector<SchedGraph*>
 {
 private:
   const Function* method;
   
 public:
-  typedef std::hash_map<const BasicBlock*, SchedGraph*> map_base;
-  using map_base::iterator;
-  using map_base::const_iterator;
+  typedef std::vector<SchedGraph*> baseVector;
+  using baseVector::iterator;
+  using baseVector::const_iterator;
   
 public:
   /*ctor*/	SchedGraphSet		(const Function * function,
 					 const TargetMachine& target);
   /*dtor*/	~SchedGraphSet		();
   
-  //
-  // Accessors
-  //
-  SchedGraph*	getGraphForBasicBlock	(const BasicBlock* bb) const {
-    const_iterator onePair = this->find(bb);
-    return (onePair != this->end())? (*onePair).second : NULL;
-  }
-  
-  //
   // Iterators
-  //
-  using map_base::begin;
-  using map_base::end;
+  using baseVector::begin;
+  using baseVector::end;
   
-  //
   // Debugging support
-  // 
   void		dump	() const;
   
 private:
-  inline void	noteGraphForBlock(const BasicBlock* bb, SchedGraph* graph) {
-    assert((*this)[bb] == NULL);
-    (*this)[bb] = graph;
+  inline void	addGraph(SchedGraph* graph) {
+    assert(graph != NULL);
+    this->push_back(graph);
   }
-
-  //
+  
   // Graph builder
-  //
   void		buildGraphsForMethod	(const Function *F,
 					 const TargetMachine& target);
 };
