mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
Clean up sub-register implementation by moving subReg information back to
MachineOperand auxInfo. Previous clunky implementation uses an external map to track sub-register uses. That works because register allocator uses a new virtual register for each spilled use. With interval splitting (coming soon), we may have multiple uses of the same register some of which are of using different sub-registers from others. It's too fragile to constantly update the information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44104 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -670,12 +670,8 @@ rewriteInstructionForSpills(const LiveInterval &li,
|
||||
unsigned RegI = Reg;
|
||||
if (Reg == 0 || MRegisterInfo::isPhysicalRegister(Reg))
|
||||
continue;
|
||||
bool isSubReg = RegMap->isSubRegister(Reg);
|
||||
unsigned SubIdx = 0;
|
||||
if (isSubReg) {
|
||||
SubIdx = RegMap->getSubRegisterIndex(Reg);
|
||||
Reg = RegMap->getSuperRegister(Reg);
|
||||
}
|
||||
unsigned SubIdx = mop.getSubReg();
|
||||
bool isSubReg = SubIdx != 0;
|
||||
if (Reg != li.reg)
|
||||
continue;
|
||||
|
||||
@ -710,8 +706,6 @@ rewriteInstructionForSpills(const LiveInterval &li,
|
||||
// Create a new virtual register for the spill interval.
|
||||
unsigned NewVReg = RegMap->createVirtualRegister(rc);
|
||||
vrm.grow();
|
||||
if (isSubReg)
|
||||
RegMap->setIsSubRegister(NewVReg, NewVReg, SubIdx);
|
||||
|
||||
// Scan all of the operands of this instruction rewriting operands
|
||||
// to use NewVReg instead of li.reg as appropriate. We do this for
|
||||
|
Reference in New Issue
Block a user