aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-01-29 18:37:49 +0000
committerDerek Schuff <dschuff@google.com>2016-01-29 18:37:49 +0000
commit6ea637af35c992cb3bece3e3e9e8de9cc42b8cd1 (patch)
tree611323b1eb845f348b851842c19d6ed0f16f709c /llvm/lib/Target/WebAssembly/WebAssemblyRegNumbering.cpp
parent0df98ff9132a250aaf4b96accd1173ebe2f30ee5 (diff)
downloadllvm-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.cpp7
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;
}