From cff860801e8cac730c3b171e1dc8b66b7900dec6 Mon Sep 17 00:00:00 2001 From: David Greene Date: Thu, 22 May 2008 21:12:21 +0000 Subject: [PATCH] Don't attempt to update SpillSlotToUsesMap for stack slots that aren't generated by the spiller. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51439 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/VirtRegMap.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/VirtRegMap.cpp b/lib/CodeGen/VirtRegMap.cpp index 3793af077db..57557674b98 100644 --- a/lib/CodeGen/VirtRegMap.cpp +++ b/lib/CodeGen/VirtRegMap.cpp @@ -147,8 +147,14 @@ int VirtRegMap::getEmergencySpillSlot(const TargetRegisterClass *RC) { void VirtRegMap::addSpillSlotUse(int FI, MachineInstr *MI) { if (!MF.getFrameInfo()->isFixedObjectIndex(FI)) { - assert(FI >= 0 && "Spill slot index should not be negative!"); - SpillSlotToUsesMap[FI-LowSpillSlot].insert(MI); + // If FI < LowSpillSlot, this stack reference was produced by + // instruction selection and is not a spill + if (FI >= LowSpillSlot) { + assert(FI >= 0 && "Spill slot index should not be negative!"); + assert(FI-LowSpillSlot < SpillSlotToUsesMap.size() + && "Invalid spill slot"); + SpillSlotToUsesMap[FI-LowSpillSlot].insert(MI); + } } } @@ -179,6 +185,12 @@ void VirtRegMap::RemoveMachineInstrFromMaps(MachineInstr *MI) { int FI = MO.getIndex(); if (MF.getFrameInfo()->isFixedObjectIndex(FI)) continue; + // This stack reference was produced by instruction selection and + // is not a spill + if (FI < LowSpillSlot) + continue; + assert(FI-LowSpillSlot < SpillSlotToUsesMap.size() + && "Invalid spill slot"); SpillSlotToUsesMap[FI-LowSpillSlot].erase(MI); } MI2VirtMap.erase(MI);