diff options
author | Derek Schuff <dschuff@google.com> | 2016-01-29 18:37:49 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-01-29 18:37:49 +0000 |
commit | 6ea637af35c992cb3bece3e3e9e8de9cc42b8cd1 (patch) | |
tree | 611323b1eb845f348b851842c19d6ed0f16f709c /llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp | |
parent | 0df98ff9132a250aaf4b96accd1173ebe2f30ee5 (diff) | |
download | llvm-6ea637af35c992cb3bece3e3e9e8de9cc42b8cd1.zip llvm-6ea637af35c992cb3bece3e3e9e8de9cc42b8cd1.tar.gz llvm-6ea637af35c992cb3bece3e3e9e8de9cc42b8cd1.tar.bz2 |
[WebAssembly] Support frame pointer
Add support for frame pointer use in prolog/epilog.
Supports dynamic allocas but not yet over-aligned locals.
Target-independend CG generates SP updates, but we still need to write
back the SP value to memory when necessary.
llvm-svn: 259220
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp index a76cb81..f38f635 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp @@ -108,10 +108,15 @@ bool WebAssemblyRegNumbering::runOnMachineFunction(MachineFunction &MF) { } } // Allocate locals for used physical registers - if (FrameInfo.getStackSize() > 0) { + if (FrameInfo.getStackSize() > 0 || FrameInfo.adjustsStack()) { DEBUG(dbgs() << "PReg SP " << CurReg << "\n"); MFI.addPReg(WebAssembly::SP32, CurReg++); } + bool HasFP = MF.getSubtarget().getFrameLowering()->hasFP(MF); + if (HasFP) { + DEBUG(dbgs() << "PReg FP " << CurReg << "\n"); + MFI.addPReg(WebAssembly::FP32, CurReg++); + } return true; } |