mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
Shrink a BitVector that didn't mean to store bits for all physical registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123108 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1016,8 +1016,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
<< MF.getFunction()->getName() << '\n');
|
<< MF.getFunction()->getName() << '\n');
|
||||||
|
|
||||||
// ReMatRegs - Keep track of the registers whose def's are remat'ed.
|
// ReMatRegs - Keep track of the registers whose def's are remat'ed.
|
||||||
BitVector ReMatRegs;
|
BitVector ReMatRegs(MRI->getNumVirtRegs());
|
||||||
ReMatRegs.resize(MRI->getLastVirtReg()+1);
|
|
||||||
|
|
||||||
typedef DenseMap<unsigned, SmallVector<std::pair<unsigned, unsigned>, 4> >
|
typedef DenseMap<unsigned, SmallVector<std::pair<unsigned, unsigned>, 4> >
|
||||||
TiedOperandMap;
|
TiedOperandMap;
|
||||||
@ -1146,7 +1145,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
DEBUG(dbgs() << "2addr: REMATTING : " << *DefMI << "\n");
|
DEBUG(dbgs() << "2addr: REMATTING : " << *DefMI << "\n");
|
||||||
unsigned regASubIdx = mi->getOperand(DstIdx).getSubReg();
|
unsigned regASubIdx = mi->getOperand(DstIdx).getSubReg();
|
||||||
TII->reMaterialize(*mbbi, mi, regA, regASubIdx, DefMI, *TRI);
|
TII->reMaterialize(*mbbi, mi, regA, regASubIdx, DefMI, *TRI);
|
||||||
ReMatRegs.set(regB);
|
ReMatRegs.set(TargetRegisterInfo::virtReg2Index(regB));
|
||||||
++NumReMats;
|
++NumReMats;
|
||||||
} else {
|
} else {
|
||||||
BuildMI(*mbbi, mi, mi->getDebugLoc(), TII->get(TargetOpcode::COPY),
|
BuildMI(*mbbi, mi, mi->getDebugLoc(), TII->get(TargetOpcode::COPY),
|
||||||
@ -1232,13 +1231,12 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Some remat'ed instructions are dead.
|
// Some remat'ed instructions are dead.
|
||||||
int VReg = ReMatRegs.find_first();
|
for (int i = ReMatRegs.find_first(); i != -1; i = ReMatRegs.find_next(i)) {
|
||||||
while (VReg != -1) {
|
unsigned VReg = TargetRegisterInfo::index2VirtReg(i);
|
||||||
if (MRI->use_nodbg_empty(VReg)) {
|
if (MRI->use_nodbg_empty(VReg)) {
|
||||||
MachineInstr *DefMI = MRI->getVRegDef(VReg);
|
MachineInstr *DefMI = MRI->getVRegDef(VReg);
|
||||||
DefMI->eraseFromParent();
|
DefMI->eraseFromParent();
|
||||||
}
|
}
|
||||||
VReg = ReMatRegs.find_next(VReg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eliminate REG_SEQUENCE instructions. Their whole purpose was to preseve
|
// Eliminate REG_SEQUENCE instructions. Their whole purpose was to preseve
|
||||||
|
Reference in New Issue
Block a user