diff options
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/userstack.ll | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index 079c864c7bc..e853b76d0dd 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/Analysis.h" #include "llvm/CodeGen/AsmPrinter.h" #include "llvm/CodeGen/MachineConstantPool.h" +#include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/IR/DataLayout.h" #include "llvm/MC/MCContext.h" @@ -181,6 +182,11 @@ void WebAssemblyAsmPrinter::EmitFunctionBodyStart() { Local.addOperand(MCOperand::createImm(getRegType(VReg).SimpleTy)); AnyWARegs = true; } + if (MF->getFrameInfo()->getStackSize() > 0) { + // TODO: wasm64 + Local.addOperand(MCOperand::createImm(MVT::i32)); + AnyWARegs = true; + } if (AnyWARegs) EmitToStreamer(*OutStreamer, Local); diff --git a/llvm/test/CodeGen/WebAssembly/userstack.ll b/llvm/test/CodeGen/WebAssembly/userstack.ll index 27ff1e192e6..855eaa00a4a 100644 --- a/llvm/test/CodeGen/WebAssembly/userstack.ll +++ b/llvm/test/CodeGen/WebAssembly/userstack.ll @@ -6,6 +6,8 @@ target datalayout = "e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" ; CHECK-LABEL: alloca32: +; Check that there is an extra local for the stack pointer. +; CHECK: .local i32, i32, i32, i32{{$}} define void @alloca32() { ; CHECK: i32.const [[L1:.+]]=, __stack_pointer ; CHECK-NEXT: i32.load [[L1]]=, 0([[L1]]) @@ -23,6 +25,7 @@ define void @alloca32() { } ; CHECK-LABEL: alloca3264: +; CHECK: .local i32, i32, i32, i32{{$}} define void @alloca3264() { ; CHECK: i32.const [[L1:.+]]=, __stack_pointer ; CHECK-NEXT: i32.load [[L1]]=, 0([[L1]]) @@ -43,6 +46,8 @@ define void @alloca3264() { ret void } +; CHECK-LABEL: allocarray: +; CHECK: .local i32, i32, i32, i32, i32, i32{{$}} define void @allocarray() { ; CHECK: i32.const [[L1:.+]]=, __stack_pointer ; CHECK-NEXT: i32.load [[L1]]=, 0([[L1]]) |