summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86RegisterInfo.h
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-07-10 17:45:53 +0000
committerChad Rosier <mcrosier@apple.com>2012-07-10 17:45:53 +0000
commit3f0dbab963197cadb32f70e1ee1a106fe35f5c8e (patch)
treed193668b79f9732c443c51f2080eab246abbf925 /lib/Target/X86/X86RegisterInfo.h
parent1b8da1d8f14f91b88ff99d3bd5ec4d904cdf21b7 (diff)
downloadllvm-3f0dbab963197cadb32f70e1ee1a106fe35f5c8e.tar.gz
llvm-3f0dbab963197cadb32f70e1ee1a106fe35f5c8e.tar.bz2
llvm-3f0dbab963197cadb32f70e1ee1a106fe35f5c8e.tar.xz
Add support for dynamic stack realignment in the presence of dynamic allocas on
X86. Basically, this is a reapplication of r158087 with a few fixes. Specifically, (1) the stack pointer is restored from the base pointer before popping callee-saved registers and (2) in obscure cases (see comments in patch) we must cache the value of the original stack adjustment in the prologue and apply it in the epilogue. rdar://11496434 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160002 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86RegisterInfo.h')
-rw-r--r--lib/Target/X86/X86RegisterInfo.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Target/X86/X86RegisterInfo.h b/lib/Target/X86/X86RegisterInfo.h
index ee69842b10..1bc32cbb78 100644
--- a/lib/Target/X86/X86RegisterInfo.h
+++ b/lib/Target/X86/X86RegisterInfo.h
@@ -50,6 +50,11 @@ private:
///
unsigned FramePtr;
+ /// BasePtr - X86 physical register used as a base ptr in complex stack
+ /// frames. I.e., when we need a 3rd base, not just SP and FP, due to
+ /// variable size stack objects.
+ unsigned BasePtr;
+
public:
X86RegisterInfo(X86TargetMachine &tm, const TargetInstrInfo &tii);
@@ -106,6 +111,8 @@ public:
/// register scavenger to determine what registers are free.
BitVector getReservedRegs(const MachineFunction &MF) const;
+ bool hasBasePointer(const MachineFunction &MF) const;
+
bool canRealignStack(const MachineFunction &MF) const;
bool needsStackRealignment(const MachineFunction &MF) const;
@@ -123,6 +130,7 @@ public:
// Debug information queries.
unsigned getFrameRegister(const MachineFunction &MF) const;
unsigned getStackRegister() const { return StackPtr; }
+ unsigned getBaseRegister() const { return BasePtr; }
// FIXME: Move to FrameInfok
unsigned getSlotSize() const { return SlotSize; }