From 94743e4915eb9a7d9c2dd57862e6634e9ece8eb5 Mon Sep 17 00:00:00 2001 From: Alkis Evlogimenos Date: Sat, 13 Dec 2003 11:58:10 +0000 Subject: [PATCH] When reserving a preallocated register spill the aliases of this register too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10450 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/RegAllocLinearScan.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/CodeGen/RegAllocLinearScan.cpp b/lib/CodeGen/RegAllocLinearScan.cpp index 8645a2b0448..dd94ad31c1f 100644 --- a/lib/CodeGen/RegAllocLinearScan.cpp +++ b/lib/CodeGen/RegAllocLinearScan.cpp @@ -628,6 +628,22 @@ void RA::reservePhysReg(unsigned physReg) assignVirt2StackSlot(virtReg); } p2vMap_[physReg] = physReg; // this denotes a reserved physical register + + // if it also aliases any other registers with values spill them too + for (const unsigned* as = mri_->getAliasSet(physReg); *as; ++as) { + unsigned virtReg = p2vMap_[*as]; + if (virtReg != 0 && virtReg != *as) { + // remove interval from active + for (IntervalPtrs::iterator i = active_.begin(), e = active_.end(); + i != e; ++i) { + if ((*i)->reg == virtReg) { + active_.erase(i); + break; + } + } + assignVirt2StackSlot(virtReg); + } + } } void RA::clearReservedPhysReg(unsigned physReg) -- 2.34.1