[llvm-commits] [llvm] r52639 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h lib/CodeGen/LiveInterval.cpp lib/CodeGen/StackSlotColoring.cpp
Evan Cheng
evan.cheng at apple.com
Mon Jun 23 14:03:19 PDT 2008
Author: evancheng
Date: Mon Jun 23 16:03:19 2008
New Revision: 52639
URL: http://llvm.org/viewvc/llvm-project?rev=52639&view=rev
Log:
Instead of adding an isSS field to LiveInterval to denote stack slot. Use top bit of 'reg' instead. If the top bit is set, than the LiveInterval represents a stack slot live interval.
Modified:
llvm/trunk/include/llvm/CodeGen/LiveInterval.h
llvm/trunk/lib/CodeGen/LiveInterval.cpp
llvm/trunk/lib/CodeGen/StackSlotColoring.cpp
Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=52639&r1=52638&r2=52639&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Mon Jun 23 16:03:19 2008
@@ -101,8 +101,8 @@
typedef SmallVector<LiveRange,4> Ranges;
typedef SmallVector<VNInfo*,4> VNInfoList;
- bool isSS; // True if this represents a stack slot
unsigned reg; // the register or stack slot of this interval
+ // if the top bits is set, it represents a stack slot.
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
@@ -110,7 +110,9 @@
public:
LiveInterval(unsigned Reg, float Weight, bool IsSS = false)
- : isSS(IsSS), reg(Reg), preference(0), weight(Weight) {
+ : reg(Reg), preference(0), weight(Weight) {
+ if (IsSS)
+ reg = reg | (1U << (sizeof(unsigned)*8-1));
}
typedef Ranges::iterator iterator;
@@ -143,13 +145,15 @@
/// isStackSlot - Return true if this is a stack slot interval.
///
- bool isStackSlot() const { return isSS; }
+ bool isStackSlot() const {
+ return reg & (1U << (sizeof(unsigned)*8-1));
+ }
/// 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;
+ return reg & ~(1U << (sizeof(unsigned)*8-1));
}
bool containsOneValue() const { return valnos.size() == 1; }
Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=52639&r1=52638&r2=52639&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Mon Jun 23 16:03:19 2008
@@ -678,8 +678,8 @@
void LiveInterval::print(std::ostream &OS,
const TargetRegisterInfo *TRI) const {
- if (isSS)
- OS << "SS#" << reg;
+ if (isStackSlot())
+ OS << "SS#" << getStackSlotIndex();
else if (TRI && TargetRegisterInfo::isPhysicalRegister(reg))
OS << TRI->getName(reg);
else
Modified: llvm/trunk/lib/CodeGen/StackSlotColoring.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StackSlotColoring.cpp?rev=52639&r1=52638&r2=52639&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/StackSlotColoring.cpp (original)
+++ llvm/trunk/lib/CodeGen/StackSlotColoring.cpp Mon Jun 23 16:03:19 2008
@@ -1,4 +1,4 @@
-//===-- StackSlotColoring.cpp - Sinking for machine instructions ----------===//
+//===-- StackSlotColoring.cpp - Stack slot coloring pass. -----------------===//
//
// The LLVM Compiler Infrastructure
//
@@ -12,9 +12,9 @@
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "stackcoloring"
+#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/LiveStackAnalysis.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/Passes.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
@@ -201,7 +201,6 @@
bool StackSlotColoring::ColorSlots(MachineFunction &MF) {
unsigned NumObjs = MFI->getObjectIndexEnd();
std::vector<int> SlotMapping(NumObjs, -1);
- SlotMapping.resize(NumObjs, -1);
bool Changed = false;
for (unsigned i = 0, e = SSIntervals.size(); i != e; ++i) {
More information about the llvm-commits
mailing list