Chromium Code Reviews| Index: src/IceTargetLoweringX86Base.h |
| diff --git a/src/IceTargetLoweringX86Base.h b/src/IceTargetLoweringX86Base.h |
| index d23e35b7f3d41bdedd50c4bbbfe7c418569b6a9d..016cbd71a2f9722b5f0113179c8f220476626e68 100644 |
| --- a/src/IceTargetLoweringX86Base.h |
| +++ b/src/IceTargetLoweringX86Base.h |
| @@ -89,9 +89,9 @@ public: |
| bool hasFramePointer() const override { return IsEbpBasedFrame; } |
| void setHasFramePointer() override { IsEbpBasedFrame = true; } |
| SizeT getStackReg() const override { return Traits::RegisterSet::Reg_esp; } |
| + SizeT getFrameReg() const override { return Traits::RegisterSet::Reg_ebp; } |
| SizeT getFrameOrStackReg() const override { |
| - return IsEbpBasedFrame ? Traits::RegisterSet::Reg_ebp |
| - : Traits::RegisterSet::Reg_esp; |
| + return IsEbpBasedFrame ? getFrameReg() : getStackReg(); |
| } |
| size_t typeWidthInBytesOnStack(Type Ty) const override { |
| // Round up to the next multiple of WordType bytes. |
| @@ -101,6 +101,16 @@ public: |
| uint32_t getStackAlignment() const override { |
| return Traits::X86_STACK_ALIGNMENT_BYTES; |
| } |
| + void reserveFixedAllocaArea(size_t Size, size_t Align) override { |
| + FixedAllocaSizeBytes = Size; |
| + assert(llvm::isPowerOf2_32(Align)); |
| + FixedAllocaAlignBytes = Align; |
| + PrologEmitsFixedAllocas = true; |
| + } |
| + /// Returns the (negative) offset from ebp where the fixed Allocas start. |
|
Jim Stichnoth
2015/11/16 14:47:58
Should probably start getting used to calling it e
sehr
2015/11/16 18:42:25
Done.
|
| + int32_t getFrameFixedAllocaOffset() const override { |
| + return FixedAllocaSizeBytes - SpillAreaSizeBytes; |
| + } |
| bool shouldSplitToVariable64On32(Type Ty) const override { |
| return Traits::Is64Bit ? false : Ty == IceType_i64; |
| @@ -691,6 +701,8 @@ protected: |
| bool NeedsStackAlignment = false; |
| size_t SpillAreaSizeBytes = 0; |
| size_t FixedAllocaSizeBytes = 0; |
| + size_t FixedAllocaAlignBytes = 0; |
| + bool PrologEmitsFixedAllocas = false; |
| static std::array<llvm::SmallBitVector, RCX86_NUM> TypeToRegisterSet; |
| static std::array<llvm::SmallBitVector, Traits::RegisterSet::Reg_NUM> |
| RegisterAliases; |