mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Make sure to notice that explicit physregs are used in the function
llvm-svn: 21084
This commit is contained in:
parent
bde3612ce3
commit
f81edb57b6
@ -157,31 +157,34 @@ bool SimpleSpiller::runOnMachineFunction(MachineFunction &MF,
|
||||
MachineInstr &MI = *MII;
|
||||
for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
|
||||
MachineOperand &MO = MI.getOperand(i);
|
||||
if (MO.isRegister() && MO.getReg() &&
|
||||
MRegisterInfo::isVirtualRegister(MO.getReg())) {
|
||||
unsigned VirtReg = MO.getReg();
|
||||
unsigned PhysReg = VRM.getPhys(VirtReg);
|
||||
if (VRM.hasStackSlot(VirtReg)) {
|
||||
int StackSlot = VRM.getStackSlot(VirtReg);
|
||||
|
||||
if (MO.isUse() &&
|
||||
std::find(LoadedRegs.begin(), LoadedRegs.end(), VirtReg)
|
||||
== LoadedRegs.end()) {
|
||||
MRI.loadRegFromStackSlot(MBB, &MI, PhysReg, StackSlot);
|
||||
LoadedRegs.push_back(VirtReg);
|
||||
++NumLoads;
|
||||
DEBUG(std::cerr << '\t' << *prior(MII));
|
||||
}
|
||||
|
||||
if (MO.isDef()) {
|
||||
MRI.storeRegToStackSlot(MBB, next(MII), PhysReg, StackSlot);
|
||||
++NumStores;
|
||||
if (MO.isRegister() && MO.getReg())
|
||||
if (MRegisterInfo::isVirtualRegister(MO.getReg())) {
|
||||
unsigned VirtReg = MO.getReg();
|
||||
unsigned PhysReg = VRM.getPhys(VirtReg);
|
||||
if (VRM.hasStackSlot(VirtReg)) {
|
||||
int StackSlot = VRM.getStackSlot(VirtReg);
|
||||
|
||||
if (MO.isUse() &&
|
||||
std::find(LoadedRegs.begin(), LoadedRegs.end(), VirtReg)
|
||||
== LoadedRegs.end()) {
|
||||
MRI.loadRegFromStackSlot(MBB, &MI, PhysReg, StackSlot);
|
||||
LoadedRegs.push_back(VirtReg);
|
||||
++NumLoads;
|
||||
DEBUG(std::cerr << '\t' << *prior(MII));
|
||||
}
|
||||
|
||||
if (MO.isDef()) {
|
||||
MRI.storeRegToStackSlot(MBB, next(MII), PhysReg, StackSlot);
|
||||
++NumStores;
|
||||
}
|
||||
}
|
||||
PhysRegsUsed[PhysReg] = true;
|
||||
MI.SetMachineOperandReg(i, PhysReg);
|
||||
} else {
|
||||
PhysRegsUsed[MO.getReg()] = true;
|
||||
}
|
||||
PhysRegsUsed[PhysReg] = true;
|
||||
MI.SetMachineOperandReg(i, PhysReg);
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG(std::cerr << '\t' << MI);
|
||||
LoadedRegs.clear();
|
||||
}
|
||||
@ -312,7 +315,10 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, const VirtRegMap &VRM) {
|
||||
for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
|
||||
MachineOperand &MO = MI.getOperand(i);
|
||||
if (MO.isRegister() && MO.getReg() &&
|
||||
MRegisterInfo::isVirtualRegister(MO.getReg())) {
|
||||
MRegisterInfo::isPhysicalRegister(MO.getReg()))
|
||||
PhysRegsUsed[MO.getReg()] = true;
|
||||
else if (MO.isRegister() && MO.getReg() &&
|
||||
MRegisterInfo::isVirtualRegister(MO.getReg())) {
|
||||
unsigned VirtReg = MO.getReg();
|
||||
|
||||
if (!VRM.hasStackSlot(VirtReg)) {
|
||||
|
Loading…
Reference in New Issue
Block a user