[llvm-commits] [llvm] r62863 - /llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp
Bill Wendling
isanbard at gmail.com
Fri Jan 23 11:22:35 PST 2009
Author: void
Date: Fri Jan 23 13:22:34 2009
New Revision: 62863
URL: http://llvm.org/viewvc/llvm-project?rev=62863&view=rev
Log:
Pull r62834 into Dib:
Stage two of fixing pre-alloc-splitting's code size issues: filter out
restores that are just going to be re-spilled again.
Modified:
llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp
Modified: llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp?rev=62863&r1=62862&r2=62863&view=diff
==============================================================================
--- llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp (original)
+++ llvm/branches/Apple/Dib/lib/CodeGen/PreAllocSplitting.cpp Fri Jan 23 13:22:34 2009
@@ -1388,7 +1388,7 @@
for (SmallPtrSet<LiveInterval*, 8>::iterator LI = split.begin(),
LE = split.end(); LI != LE; ++LI) {
- DenseMap<VNInfo*, unsigned > VNUseCount;
+ DenseMap<VNInfo*, SmallPtrSet<MachineInstr*, 4> > VNUseCount;
for (MachineRegisterInfo::use_iterator UI = MRI->use_begin((*LI)->reg),
UE = MRI->use_end(); UI != UE; ++UI) {
@@ -1396,27 +1396,55 @@
index = LiveIntervals::getUseIndex(index);
const LiveRange* LR = (*LI)->getLiveRangeContaining(index);
- VNUseCount[LR->valno]++;
+ VNUseCount[LR->valno].insert(&*UI);
}
for (LiveInterval::vni_iterator VI = (*LI)->vni_begin(),
VE = (*LI)->vni_end(); VI != VE; ++VI) {
VNInfo* CurrVN = *VI;
if (CurrVN->hasPHIKill) continue;
- if (VNUseCount[CurrVN] > 0) continue;
unsigned DefIdx = CurrVN->def;
if (DefIdx == ~0U || DefIdx == ~1U) continue;
-
+
MachineInstr* DefMI = LIs->getInstructionFromIndex(DefIdx);
int FrameIndex;
if (!TII->isLoadFromStackSlot(DefMI, FrameIndex)) continue;
- LIs->RemoveMachineInstrFromMaps(DefMI);
- (*LI)->removeValNo(CurrVN);
- DefMI->eraseFromParent();
- NumDeadSpills++;
- changed = true;
+ if (VNUseCount[CurrVN].size() == 0) {
+ LIs->RemoveMachineInstrFromMaps(DefMI);
+ (*LI)->removeValNo(CurrVN);
+ DefMI->eraseFromParent();
+ NumDeadSpills++;
+ changed = true;
+ } else {
+ bool NonRestore = false;
+ for (SmallPtrSet<MachineInstr*, 4>::iterator UI =
+ VNUseCount[CurrVN].begin(), UE = VNUseCount[CurrVN].end();
+ UI != UI; ++UI) {
+ int StoreFrameIndex;
+ unsigned StoreVReg = TII->isStoreToStackSlot(*UI, StoreFrameIndex);
+ if (StoreVReg != (*LI)->reg || StoreFrameIndex != FrameIndex) {
+ NonRestore = false;
+ break;
+ }
+ }
+
+ if (NonRestore) continue;
+
+ for (SmallPtrSet<MachineInstr*, 4>::iterator UI =
+ VNUseCount[CurrVN].begin(), UE = VNUseCount[CurrVN].end();
+ UI != UI; ++UI) {
+ LIs->RemoveMachineInstrFromMaps(*UI);
+ (*UI)->eraseFromParent();
+ }
+
+ LIs->RemoveMachineInstrFromMaps(DefMI);
+ (*LI)->removeValNo(CurrVN);
+ DefMI->eraseFromParent();
+ NumDeadSpills++;
+ changed = true;
+ }
}
}
More information about the llvm-commits
mailing list