mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-15 19:24:33 +00:00
Fix the register scavenger for targets that provide custom spilling
As pointed out by Richard Sandiford, my recent updates to the register scavenger broke targets that use custom spilling (because the new code assumed that if there were no valid spill slots, than spilling would be impossible). I don't have a test case, but it should be possible to create one for Thumb 1, Mips 16, etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178073 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -371,8 +371,11 @@ unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC,
|
||||
if (Scavenged[SI].Reg == 0)
|
||||
break;
|
||||
|
||||
assert(SI < Scavenged.size() &&
|
||||
"Scavenger slots are live, unable to scavenge another register!");
|
||||
if (SI < Scavenged.size()) {
|
||||
// We need to scavenge a register but have no spill slot, the target
|
||||
// must know how to do it (if not, we'll assert below).
|
||||
Scavenged.push_back(ScavengedInfo());
|
||||
}
|
||||
|
||||
// Avoid infinite regress
|
||||
Scavenged[SI].Reg = SReg;
|
||||
|
Reference in New Issue
Block a user