summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-02-23 18:13:07 +0000
committerDerek Schuff <dschuff@google.com>2016-02-23 18:13:07 +0000
commit4b3bb213b2d21d862542cfe1965fbd4cab28f1a8 (patch)
treed52642210677862f16aa2797f371911c258dbc71 /llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h
parent1b9fae5a40a92e2bb6c35286b2b9f2a58809423b (diff)
downloadbcm5719-llvm-4b3bb213b2d21d862542cfe1965fbd4cab28f1a8.tar.gz
bcm5719-llvm-4b3bb213b2d21d862542cfe1965fbd4cab28f1a8.zip
[WebAssembly] Implement red zone for user stack
Implements a mostly-conventional redzone for the userspace stack. Because we have unsigned load/store offsets we continue to use a local SP subtracted from the incoming SP but do not write it back to memory. Differential Revision: http://reviews.llvm.org/D17525 llvm-svn: 261662
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h b/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h
index 39f3f04e68d..cb3b011aeb8 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h
@@ -19,9 +19,12 @@
#include "llvm/Target/TargetFrameLowering.h"
namespace llvm {
+class MachineFrameInfo;
class WebAssemblyFrameLowering final : public TargetFrameLowering {
public:
+ static const size_t RedZoneSize = 128;
+
WebAssemblyFrameLowering()
: TargetFrameLowering(StackGrowsDown, /*StackAlignment=*/16,
/*LocalAreaOffset=*/0,
@@ -38,6 +41,11 @@ class WebAssemblyFrameLowering final : public TargetFrameLowering {
bool hasFP(const MachineFunction &MF) const override;
bool hasReservedCallFrame(const MachineFunction &MF) const override;
+
+ private:
+ bool needsSP(const MachineFunction &MF, const MachineFrameInfo &MFI) const;
+ bool needsSPWriteback(const MachineFunction &MF,
+ const MachineFrameInfo &MFI) const;
};
} // end namespace llvm
OpenPOWER on IntegriCloud