mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-13 10:32:06 +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:
parent
4314268128
commit
00f93fc046
@ -1016,8 +1016,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
||||
<< MF.getFunction()->getName() << '\n');
|
||||
|
||||
// ReMatRegs - Keep track of the registers whose def's are remat'ed.
|
||||
BitVector ReMatRegs;
|
||||
ReMatRegs.resize(MRI->getLastVirtReg()+1);
|
||||
BitVector ReMatRegs(MRI->getNumVirtRegs());
|
||||
|
||||
typedef DenseMap<unsigned, SmallVector<std::pair<unsigned, unsigned>, 4> >
|
||||
TiedOperandMap;
|
||||
@ -1146,7 +1145,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
||||
DEBUG(dbgs() << "2addr: REMATTING : " << *DefMI << "\n");
|
||||
unsigned regASubIdx = mi->getOperand(DstIdx).getSubReg();
|
||||
TII->reMaterialize(*mbbi, mi, regA, regASubIdx, DefMI, *TRI);
|
||||
ReMatRegs.set(regB);
|
||||
ReMatRegs.set(TargetRegisterInfo::virtReg2Index(regB));
|
||||
++NumReMats;
|
||||
} else {
|
||||
BuildMI(*mbbi, mi, mi->getDebugLoc(), TII->get(TargetOpcode::COPY),
|
||||
@ -1232,13 +1231,12 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
||||
}
|
||||
|
||||
// Some remat'ed instructions are dead.
|
||||
int VReg = ReMatRegs.find_first();
|
||||
while (VReg != -1) {
|
||||
for (int i = ReMatRegs.find_first(); i != -1; i = ReMatRegs.find_next(i)) {
|
||||
unsigned VReg = TargetRegisterInfo::index2VirtReg(i);
|
||||
if (MRI->use_nodbg_empty(VReg)) {
|
||||
MachineInstr *DefMI = MRI->getVRegDef(VReg);
|
||||
DefMI->eraseFromParent();
|
||||
}
|
||||
VReg = ReMatRegs.find_next(VReg);
|
||||
}
|
||||
|
||||
// Eliminate REG_SEQUENCE instructions. Their whole purpose was to preseve
|
||||
|
Loading…
x
Reference in New Issue
Block a user