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 | |
| 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')
| -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;  | 

