Don't derive from ValueSet to implement class LiveRange; instead, use a
authorBrian Gaeke <gaeke@uiuc.edu>
Thu, 29 Jul 2004 06:43:06 +0000 (06:43 +0000)
committerBrian Gaeke <gaeke@uiuc.edu>
Thu, 29 Jul 2004 06:43:06 +0000 (06:43 +0000)
SetVector<Value *> data member.
Add << operator for LiveRanges (a dumb one, for now.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15320 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/RegAlloc/LiveRange.h

index 3d19bbd1fc773c255d90ba691554b1a0ad548632..7a37596af00a235378656476c670efe1b4aa5672 100644 (file)
@@ -7,11 +7,8 @@
 // 
 //===----------------------------------------------------------------------===//
 //
-// Implements a live range using a ValueSet. A LiveRange is a simple set
-// of Values. 
-//
-// Since the Value pointed by a use is the same as of its def, it is sufficient
-// to keep only defs in a LiveRange.
+// Implements a live range using a SetVector of Value *s.  We keep only
+// defs in a LiveRange.
 //
 //===----------------------------------------------------------------------===//
 
 #define LIVERANGE_H
 
 #include "llvm/Value.h"
-#include "llvm/CodeGen/ValueSet.h"
+#include "Support/SetVector.h"
+#include <iostream>
 
 namespace llvm {
 
 class RegClass;
 class IGNode;
 
-class LiveRange : public ValueSet {
-  RegClass *MyRegClass;       // register class (e.g., int, FP) for this LR
+class LiveRange {
+public:
+  typedef SetVector<const Value *> ValueContainerType;
+  typedef ValueContainerType::iterator iterator;
+  typedef ValueContainerType::const_iterator const_iterator;
+
+private:
+  ValueContainerType MyValues; // Values in this LiveRange
+  RegClass *MyRegClass;        // register class (e.g., int, FP) for this LR
 
   /// doesSpanAcrossCalls - Does this live range span across calls? 
   /// This information is used by graph coloring algo to avoid allocating
@@ -70,6 +75,13 @@ class LiveRange : public ValueSet {
   unsigned SpillCost;
 
 public:
+  iterator        begin()       { return MyValues.begin();    }
+  const_iterator  begin() const { return MyValues.begin();    }
+  iterator          end()       { return MyValues.end();      }
+  const_iterator    end() const { return MyValues.end();      }
+  bool insert(const Value *&X)  { return MyValues.insert (X); }
+  void insert(iterator b, iterator e) { MyValues.insert (b, e); }
+
   LiveRange() {
     Color = SuggestedColor = -1;        // not yet colored 
     mustSpill = false;
@@ -172,6 +184,11 @@ public:
   }
 };
 
+static inline std::ostream &operator << (std::ostream &os, const LiveRange &lr) {
+  os << "LiveRange@" << (void *)(&lr);
+  return os;
+};
+
 } // End llvm namespace
 
 #endif