[llvm-branch-commits] [llvm-branch] r71141 - in /llvm/branches/Apple/Dib: include/llvm/CodeGen/Passes.h lib/CodeGen/LLVMTargetMachine.cpp lib/CodeGen/StackSlotColoring.cpp
Bill Wendling
isanbard at gmail.com
Wed May 6 18:36:12 PDT 2009
Author: void
Date: Wed May 6 20:36:12 2009
New Revision: 71141
URL: http://llvm.org/viewvc/llvm-project?rev=71141&view=rev
Log:
--- Merging r71140 into '.':
U include/llvm/CodeGen/Passes.h
U lib/CodeGen/StackSlotColoring.cpp
U lib/CodeGen/LLVMTargetMachine.cpp
Modified:
llvm/branches/Apple/Dib/include/llvm/CodeGen/Passes.h
llvm/branches/Apple/Dib/lib/CodeGen/LLVMTargetMachine.cpp
llvm/branches/Apple/Dib/lib/CodeGen/StackSlotColoring.cpp
Modified: llvm/branches/Apple/Dib/include/llvm/CodeGen/Passes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/include/llvm/CodeGen/Passes.h?rev=71141&r1=71140&r2=71141&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/include/llvm/CodeGen/Passes.h (original)
+++ llvm/branches/Apple/Dib/include/llvm/CodeGen/Passes.h Wed May 6 20:36:12 2009
@@ -191,7 +191,7 @@
FunctionPass *createMachineSinkingPass();
/// createStackSlotColoringPass - This pass performs stack slot coloring.
- FunctionPass *createStackSlotColoringPass();
+ FunctionPass *createStackSlotColoringPass(bool);
/// createStackProtectorPass - This pass adds stack protectors to functions.
FunctionPass *createStackProtectorPass(const TargetLowering *tli);
Modified: llvm/branches/Apple/Dib/lib/CodeGen/LLVMTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/LLVMTargetMachine.cpp?rev=71141&r1=71140&r2=71141&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/CodeGen/LLVMTargetMachine.cpp (original)
+++ llvm/branches/Apple/Dib/lib/CodeGen/LLVMTargetMachine.cpp Wed May 6 20:36:12 2009
@@ -193,7 +193,8 @@
// Perform stack slot coloring.
if (OptLevel != CodeGenOpt::None)
- PM.add(createStackSlotColoringPass());
+ PM.add(createStackSlotColoringPass(false));
+ /*OptLevel >= CodeGenOpt::Aggressive*/
if (PrintMachineCode) // Print the register-allocated code
PM.add(createMachineFunctionPrinterPass(cerr));
Modified: llvm/branches/Apple/Dib/lib/CodeGen/StackSlotColoring.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/StackSlotColoring.cpp?rev=71141&r1=71140&r2=71141&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/CodeGen/StackSlotColoring.cpp (original)
+++ llvm/branches/Apple/Dib/lib/CodeGen/StackSlotColoring.cpp Wed May 6 20:36:12 2009
@@ -37,21 +37,22 @@
cl::desc("Suppress slot sharing during stack coloring"));
static cl::opt<bool>
-ColorWithRegs("color-ss-with-regs",
- cl::init(false), cl::Hidden,
- cl::desc("Color stack slots with free registers"));
+ColorWithRegsOpt("color-ss-with-regs",
+ cl::init(false), cl::Hidden,
+ cl::desc("Color stack slots with free registers"));
static cl::opt<int> DCELimit("ssc-dce-limit", cl::init(-1), cl::Hidden);
STATISTIC(NumEliminated, "Number of stack slots eliminated due to coloring");
STATISTIC(NumRegRepl, "Number of stack slot refs replaced with reg refs");
-STATISTIC(NumLoadElim, "Number of load eliminated");
+STATISTIC(NumLoadElim, "Number of loads eliminated");
STATISTIC(NumStoreElim, "Number of stores eliminated");
STATISTIC(NumDead, "Number of trivially dead stack accesses eliminated");
namespace {
class VISIBILITY_HIDDEN StackSlotColoring : public MachineFunctionPass {
+ bool ColorWithRegs;
LiveStacks* LS;
VirtRegMap* VRM;
MachineFrameInfo *MFI;
@@ -89,7 +90,10 @@
public:
static char ID; // Pass identification
- StackSlotColoring() : MachineFunctionPass(&ID), NextColor(-1) {}
+ StackSlotColoring() :
+ MachineFunctionPass(&ID), ColorWithRegs(false), NextColor(-1) {}
+ StackSlotColoring(bool RegColor) :
+ MachineFunctionPass(&ID), ColorWithRegs(RegColor), NextColor(-1) {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<LiveStacks>();
@@ -136,8 +140,8 @@
static RegisterPass<StackSlotColoring>
X("stack-slot-coloring", "Stack Slot Coloring");
-FunctionPass *llvm::createStackSlotColoringPass() {
- return new StackSlotColoring();
+FunctionPass *llvm::createStackSlotColoringPass(bool RegColor) {
+ return new StackSlotColoring(RegColor);
}
namespace {
@@ -231,7 +235,7 @@
StackSlotColoring::ColorSlotsWithFreeRegs(SmallVector<int, 16> &SlotMapping,
SmallVector<SmallVector<int, 4>, 16> &RevMap,
BitVector &SlotIsReg) {
- if (!ColorWithRegs || !VRM->HasUnusedRegisters())
+ if (!(ColorWithRegs || ColorWithRegsOpt) || !VRM->HasUnusedRegisters())
return false;
bool Changed = false;
@@ -239,7 +243,9 @@
for (unsigned i = 0, e = SSIntervals.size(); i != e; ++i) {
LiveInterval *li = SSIntervals[i];
int SS = li->getStackSlotIndex();
- if (!UsedColors[SS])
+ if (!UsedColors[SS] || li->weight < 20)
+ // If the weight is < 20, i.e. two references in a loop with depth 1,
+ // don't bother with it.
continue;
// These slots allow to share the same registers.
@@ -472,6 +478,9 @@
bool StackSlotColoring::PropagateBackward(MachineBasicBlock::iterator MII,
MachineBasicBlock *MBB,
unsigned OldReg, unsigned NewReg) {
+ if (MII == MBB->begin())
+ return false;
+
SmallVector<MachineOperand*, 4> Refs;
while (--MII != MBB->begin()) {
bool FoundDef = false; // Not counting 2address def.
@@ -522,6 +531,9 @@
bool StackSlotColoring::PropagateForward(MachineBasicBlock::iterator MII,
MachineBasicBlock *MBB,
unsigned OldReg, unsigned NewReg) {
+ if (MII == MBB->end())
+ return false;
+
SmallVector<MachineOperand*, 4> Uses;
while (++MII != MBB->end()) {
bool FoundUse = false;
More information about the llvm-branch-commits
mailing list