aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/LiveInterval.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-06-04 09:18:41 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-06-04 09:18:41 +0000
commit3f32d65912b4da23793dab618d981be2ce11c331 (patch)
tree6d1861bf53b6feb65e0dd92460b033125aa731f0 /include/llvm/CodeGen/LiveInterval.h
parentd8a46e3a74251989f282ca186893dc90bf48e26d (diff)
Add a stack slot coloring pass. Not yet enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51934 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/LiveInterval.h')
-rw-r--r--include/llvm/CodeGen/LiveInterval.h24
1 files changed, 21 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h
index e941a458df..b6f38dfc35 100644
--- a/include/llvm/CodeGen/LiveInterval.h
+++ b/include/llvm/CodeGen/LiveInterval.h
@@ -35,6 +35,7 @@ namespace llvm {
/// merge point), it contains ~0u,x. If the value number is not in use, it
/// contains ~1u,x to indicate that the value # is not used.
/// def - Instruction # of the definition.
+ /// - or reg # of the definition if it's a stack slot liveinterval.
/// copy - Copy iff val# is defined by a copy; zero otherwise.
/// hasPHIKill - One or more of the kills are PHI nodes.
/// kills - Instruction # of the kills.
@@ -100,15 +101,16 @@ namespace llvm {
typedef SmallVector<LiveRange,4> Ranges;
typedef SmallVector<VNInfo*,4> VNInfoList;
- unsigned reg; // the register of this interval
+ bool isSS; // True if this represents a stack slot
+ unsigned reg; // the register or stack slot of this interval
unsigned preference; // preferred register to allocate for this interval
float weight; // weight of this interval
Ranges ranges; // the ranges in which this register is live
VNInfoList valnos; // value#'s
public:
- LiveInterval(unsigned Reg, float Weight)
- : reg(Reg), preference(0), weight(Weight) {
+ LiveInterval(unsigned Reg, float Weight, bool IsSS = false)
+ : isSS(IsSS), reg(Reg), preference(0), weight(Weight) {
}
typedef Ranges::iterator iterator;
@@ -139,6 +141,17 @@ namespace llvm {
return I;
}
+ /// isStackSlot - Return true if this is a stack slot interval.
+ ///
+ bool isStackSlot() const { return isSS; }
+
+ /// getStackSlotIndex - Return stack slot index if this is a stack slot
+ /// interval.
+ int getStackSlotIndex() const {
+ assert(isStackSlot() && "Interval is not a stack slot interval!");
+ return reg;
+ }
+
bool containsOneValue() const { return valnos.size() == 1; }
unsigned getNumValNums() const { return (unsigned)valnos.size(); }
@@ -313,6 +326,11 @@ namespace llvm {
/// FindLiveRangeContaining - Return an iterator to the live range that
/// contains the specified index, or end() if there is none.
iterator FindLiveRangeContaining(unsigned Idx);
+
+ /// findDefinedVNInfo - Find the VNInfo that's defined at the specified
+ /// index (register interval) or defined by the specified register (stack
+ /// inteval).
+ VNInfo *findDefinedVNInfo(unsigned DefIdxOrReg) const;
/// overlaps - Return true if the intersection of the two live intervals is
/// not empty.