diff options
Diffstat (limited to 'lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp')
| -rw-r--r-- | lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp | 29 | 
1 files changed, 7 insertions, 22 deletions
diff --git a/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp b/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp index 4209bc333f23..a37d6136e44e 100644 --- a/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp +++ b/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp @@ -104,10 +104,10 @@ static void writeSPToMemory(unsigned SrcReg, MachineFunction &MF,                              const DebugLoc &DL) {    const auto *TII = MF.getSubtarget<WebAssemblySubtarget>().getInstrInfo(); +  const char *ES = "__stack_pointer"; +  auto *SPSymbol = MF.createExternalSymbolName(ES);    if (MF.getSubtarget<WebAssemblySubtarget>()          .getTargetTriple().isOSBinFormatELF()) { -    const char *ES = "__stack_pointer"; -    auto *SPSymbol = MF.createExternalSymbolName(ES);      MachineRegisterInfo &MRI = MF.getRegInfo();      const TargetRegisterClass *PtrRC =          MRI.getTargetRegisterInfo()->getPointerRegClass(MF); @@ -125,10 +125,8 @@ static void writeSPToMemory(unsigned SrcReg, MachineFunction &MF,          .addReg(SrcReg)          .addMemOperand(MMO);    } else { -    MachineModuleInfoWasm &MMIW = -        MF.getMMI().getObjFileInfo<MachineModuleInfoWasm>();      BuildMI(MBB, InsertStore, DL, TII->get(WebAssembly::SET_GLOBAL_I32)) -        .addImm(MMIW.getStackPointerGlobal()) +        .addExternalSymbol(SPSymbol)          .addReg(SrcReg);    }  } @@ -171,10 +169,11 @@ void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF,    unsigned SPReg = WebAssembly::SP32;    if (StackSize)      SPReg = MRI.createVirtualRegister(PtrRC); + +  const char *ES = "__stack_pointer"; +  auto *SPSymbol = MF.createExternalSymbolName(ES);    if (MF.getSubtarget<WebAssemblySubtarget>()          .getTargetTriple().isOSBinFormatELF()) { -    const char *ES = "__stack_pointer"; -    auto *SPSymbol = MF.createExternalSymbolName(ES);      unsigned Zero = MRI.createVirtualRegister(PtrRC);      BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::CONST_I32), Zero) @@ -189,22 +188,8 @@ void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF,          .addReg(Zero)    // addr          .addMemOperand(LoadMMO);    } else { -    auto &MMIW = MF.getMMI().getObjFileInfo<MachineModuleInfoWasm>(); -    if (!MMIW.hasStackPointerGlobal()) { -      MMIW.setStackPointerGlobal(MMIW.getGlobals().size()); - -      // Create the stack-pointer global. For now, just use the -      // Emscripten/Binaryen ABI names. -      wasm::Global G; -      G.Type = wasm::ValType::I32; -      G.Mutable = true; -      G.InitialValue = 0; -      G.InitialModule = "env"; -      G.InitialName = "STACKTOP"; -      MMIW.addGlobal(G); -    }      BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::GET_GLOBAL_I32), SPReg) -        .addImm(MMIW.getStackPointerGlobal()); +        .addExternalSymbol(SPSymbol);    }    bool HasBP = hasBP(MF);  | 
