diff options
author | Dan Gohman <dan433584@gmail.com> | 2016-05-17 21:14:26 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2016-05-17 21:14:26 +0000 |
commit | d08cd15f33aeaf771ca3db53ea4a94894d4b0e3f (patch) | |
tree | d9ae7edaeff53b837198ee771e9f2dc9501ca66a /llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp | |
parent | 096ccdd389cb5f4c0fd37702e3f2fa8fa71f914a (diff) | |
download | llvm-d08cd15f33aeaf771ca3db53ea4a94894d4b0e3f.zip llvm-d08cd15f33aeaf771ca3db53ea4a94894d4b0e3f.tar.gz llvm-d08cd15f33aeaf771ca3db53ea4a94894d4b0e3f.tar.bz2 |
[WebAssembly] Don't stackify calls past stack pointer modifications.
llvm-svn: 269843
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp index 7e2f416..4fcae94 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp @@ -82,7 +82,8 @@ static void writeSPToMemory(unsigned SrcReg, MachineFunction &MF, MachineBasicBlock::iterator &InsertAddr, MachineBasicBlock::iterator &InsertStore, DebugLoc DL) { - auto *SPSymbol = MF.createExternalSymbolName("__stack_pointer"); + const char *ES = "__stack_pointer"; + auto *SPSymbol = MF.createExternalSymbolName(ES); MachineRegisterInfo &MRI = MF.getRegInfo(); const TargetRegisterClass *PtrRC = MRI.getTargetRegisterInfo()->getPointerRegClass(MF); @@ -92,7 +93,8 @@ static void writeSPToMemory(unsigned SrcReg, MachineFunction &MF, BuildMI(MBB, InsertAddr, DL, TII->get(WebAssembly::CONST_I32), SPAddr) .addExternalSymbol(SPSymbol); - auto *MMO = new MachineMemOperand(MachinePointerInfo(), + auto *MMO = new MachineMemOperand(MachinePointerInfo(MF.getPSVManager() + .getExternalSymbolCallEntry(ES)), MachineMemOperand::MOStore, 4, 4); BuildMI(MBB, InsertStore, DL, TII->get(WebAssembly::STORE_I32), Discard) @@ -138,14 +140,12 @@ void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF, MRI.getTargetRegisterInfo()->getPointerRegClass(MF); unsigned SPAddr = MRI.createVirtualRegister(PtrRC); unsigned SPReg = MRI.createVirtualRegister(PtrRC); - auto *SPSymbol = MF.createExternalSymbolName("__stack_pointer"); + const char *ES = "__stack_pointer"; + auto *SPSymbol = MF.createExternalSymbolName(ES); BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::CONST_I32), SPAddr) .addExternalSymbol(SPSymbol); - // This MachinePointerInfo should reference __stack_pointer as well but - // doesn't because MachinePointerInfo() takes a GV which we don't have for - // __stack_pointer. TODO: check if PseudoSourceValue::ExternalSymbolCallEntry - // is appropriate instead. (likewise for EmitEpologue below) - auto *LoadMMO = new MachineMemOperand(MachinePointerInfo(), + auto *LoadMMO = new MachineMemOperand(MachinePointerInfo(MF.getPSVManager() + .getExternalSymbolCallEntry(ES)), MachineMemOperand::MOLoad, 4, 4); // Load the SP value. BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::LOAD_I32), |