mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 21:18:19 +00:00
Allow coalescing with reserved physregs in certain cases:
When a virtual register has a single value that is defined as a copy of a reserved register, permit that copy to be joined. These virtual register are usually copies of the stack pointer: %vreg75<def> = COPY %ESP; GR32:%vreg75 MOV32mr %vreg75, 1, %noreg, 0, %noreg, %vreg74<kill> MOV32mi %vreg75, 1, %noreg, 8, %noreg, 0 MOV32mi %vreg75<kill>, 1, %noreg, 4, %noreg, 0 CALLpcrel32 ... Coalescing these virtual registers early decreases register pressure. Previously, they were coalesced by RALinScan::attemptTrivialCoalescing after register allocation was completed. The lower register pressure causes the mcinst-lowering-cmp0.ll test case to fail because it depends on linear scan spilling a particular register. I am deleting 2008-08-05-SpillerBug.ll because it is counting the number of instructions emitted, and its revision history shows the 'correct' count being edited many times. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128845 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -572,7 +572,7 @@ void RALinScan::initIntervalSets()
|
||||
|
||||
for (LiveIntervals::iterator i = li_->begin(), e = li_->end(); i != e; ++i) {
|
||||
if (TargetRegisterInfo::isPhysicalRegister(i->second->reg)) {
|
||||
if (!i->second->empty()) {
|
||||
if (!i->second->empty() && allocatableRegs_.test(i->second->reg)) {
|
||||
mri_->setPhysRegUsed(i->second->reg);
|
||||
fixed_.push_back(std::make_pair(i->second, i->second->begin()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user