diff options
| author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-04-23 18:20:17 +0000 |
|---|---|---|
| committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-04-23 18:20:17 +0000 |
| commit | ba5129073ca595871b34bfeb289dcedf8016db8a (patch) | |
| tree | 2a2b282c2b43ad690f4bf0d73351fedd7cdc02b6 /llvm/lib/Target | |
| parent | f49bc9f8edb9641b7c9d4814f87371f229614f39 (diff) | |
| download | bcm5719-llvm-ba5129073ca595871b34bfeb289dcedf8016db8a.tar.gz bcm5719-llvm-ba5129073ca595871b34bfeb289dcedf8016db8a.zip | |
Eastimate required stack alignment early, so we can decide, whether we will need frame pointer or not
llvm-svn: 50161
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.cpp | 19 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index 46bf76f7578..2baf3601f01 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -372,6 +372,25 @@ void X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, } void +X86RegisterInfo::processFunctionBeforeCalleeSavedScan(MachineFunction &MF, + RegScavenger *RS) const { + MachineFrameInfo *FFI = MF.getFrameInfo(); + + // Calculate and set max stack object alignment early, so we can decide + // whether we will need stack realignment (and thus FP). + unsigned MaxAlign = 0; + for (int i = FFI->getObjectIndexBegin(), + e = FFI->getObjectIndexEnd(); i != e; ++i) { + if (FFI->isDeadObjectIndex(i)) + continue; + unsigned Align = FFI->getObjectAlignment(i); + MaxAlign = std::max(MaxAlign, Align); + } + + FFI->setMaxAlignment(MaxAlign); +} + +void X86RegisterInfo::processFunctionBeforeFrameFinalized(MachineFunction &MF) const{ X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); int32_t TailCallReturnAddrDelta = X86FI->getTCReturnAddrDelta(); diff --git a/llvm/lib/Target/X86/X86RegisterInfo.h b/llvm/lib/Target/X86/X86RegisterInfo.h index fdf74b11f56..40fdfb00e3e 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.h +++ b/llvm/lib/Target/X86/X86RegisterInfo.h @@ -127,6 +127,8 @@ public: int SPAdj, RegScavenger *RS = NULL) const; void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; + void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, + RegScavenger *RS = NULL) const; void emitPrologue(MachineFunction &MF) const; void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; |

