mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-17 00:57:54 +00:00
Add prolog/epilog spills/reloads to counters
Move X86 specific alignment gunk to X86 files llvm-svn: 5096
This commit is contained in:
parent
dbca3de031
commit
e66a7e80c3
@ -547,6 +547,7 @@ void RA::AllocateBasicBlock(MachineBasicBlock &MBB) {
|
|||||||
assert(PhysRegsUseOrder.empty() && "Physical regs still allocated?");
|
assert(PhysRegsUseOrder.empty() && "Physical regs still allocated?");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// EmitPrologue - Use the register info object to add a prologue to the
|
/// EmitPrologue - Use the register info object to add a prologue to the
|
||||||
/// function and save any callee saved registers we are responsible for.
|
/// function and save any callee saved registers we are responsible for.
|
||||||
///
|
///
|
||||||
@ -564,18 +565,19 @@ void RA::EmitPrologue() {
|
|||||||
unsigned Offset = getStackSpaceFor(CSRegs[i], RegClass);
|
unsigned Offset = getStackSpaceFor(CSRegs[i], RegClass);
|
||||||
|
|
||||||
// Insert the spill to the stack frame...
|
// Insert the spill to the stack frame...
|
||||||
|
++NumSpilled;
|
||||||
I = RegInfo.storeReg2RegOffset(MBB, I, CSRegs[i], RegInfo.getFramePointer(),
|
I = RegInfo.storeReg2RegOffset(MBB, I, CSRegs[i], RegInfo.getFramePointer(),
|
||||||
-Offset, RegClass->getDataSize());
|
-Offset, RegClass->getDataSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Round stack allocation up to a nice alignment to keep the stack aligned
|
|
||||||
// FIXME: This is X86 specific! Move to RegInfo.emitPrologue()!
|
|
||||||
NumBytesAllocated = (NumBytesAllocated + 3) & ~3;
|
|
||||||
|
|
||||||
// Add prologue to the function...
|
// Add prologue to the function...
|
||||||
RegInfo.emitPrologue(*MF, NumBytesAllocated);
|
RegInfo.emitPrologue(*MF, NumBytesAllocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// EmitEpilogue - Use the register info object to add a epilogue to the
|
||||||
|
/// function and restore any callee saved registers we are responsible for.
|
||||||
|
///
|
||||||
void RA::EmitEpilogue(MachineBasicBlock &MBB) {
|
void RA::EmitEpilogue(MachineBasicBlock &MBB) {
|
||||||
// Insert instructions before the return.
|
// Insert instructions before the return.
|
||||||
MachineBasicBlock::iterator I = --MBB.end();
|
MachineBasicBlock::iterator I = --MBB.end();
|
||||||
@ -584,6 +586,7 @@ void RA::EmitEpilogue(MachineBasicBlock &MBB) {
|
|||||||
for (unsigned i = 0; CSRegs[i]; ++i) {
|
for (unsigned i = 0; CSRegs[i]; ++i) {
|
||||||
const TargetRegisterClass *RegClass = PhysRegClasses[CSRegs[i]];
|
const TargetRegisterClass *RegClass = PhysRegClasses[CSRegs[i]];
|
||||||
unsigned Offset = getStackSpaceFor(CSRegs[i], RegClass);
|
unsigned Offset = getStackSpaceFor(CSRegs[i], RegClass);
|
||||||
|
++NumReloaded;
|
||||||
I = RegInfo.loadRegOffset2Reg(MBB, I, CSRegs[i], RegInfo.getFramePointer(),
|
I = RegInfo.loadRegOffset2Reg(MBB, I, CSRegs[i], RegInfo.getFramePointer(),
|
||||||
-Offset, RegClass->getDataSize());
|
-Offset, RegClass->getDataSize());
|
||||||
--I; // Insert in reverse order
|
--I; // Insert in reverse order
|
||||||
|
Loading…
x
Reference in New Issue
Block a user