From ad19047d833f0e7179580c0f9f20f88edfdc9045 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 6 Dec 2017 20:56:40 +0000 Subject: [PATCH] [WebAssembly] Remove WASM_STACK_POINTER. WASM_STACK_POINTER and the .stack_pointer directive are no longer needed now that the stack pointer global is an import. llvm-svn: 319956 --- llvm/include/llvm/BinaryFormat/Wasm.h | 1 - llvm/lib/MC/WasmObjectWriter.cpp | 39 ++----------------- .../WebAssemblyTargetStreamer.cpp | 17 -------- .../MCTargetDesc/WebAssemblyTargetStreamer.h | 5 --- .../WebAssembly/WebAssemblyAsmPrinter.cpp | 6 --- .../CodeGen/WebAssembly/stack-alignment.ll | 2 - 6 files changed, 4 insertions(+), 66 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h index fe47b8f63d7e..c1ea9a4f4516 100644 --- a/llvm/include/llvm/BinaryFormat/Wasm.h +++ b/llvm/include/llvm/BinaryFormat/Wasm.h @@ -182,7 +182,6 @@ enum class ValType { // Linking metadata kinds. enum : unsigned { - WASM_STACK_POINTER = 0x1, WASM_SYMBOL_INFO = 0x2, WASM_DATA_SIZE = 0x3, WASM_DATA_ALIGNMENT = 0x4, diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index 0e93eb835c02..351927d628a2 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -287,8 +287,7 @@ private: void writeDataRelocSection(); void writeLinkingMetaDataSection( ArrayRef Segments, uint32_t DataSize, - SmallVector, 4> SymbolFlags, - Optional StackPointerGlobal); + SmallVector, 4> SymbolFlags); uint32_t getProvisionalValue(const WasmRelocationEntry &RelEntry); void applyRelocations(ArrayRef Relocations, @@ -929,18 +928,11 @@ void WasmObjectWriter::writeDataRelocSection() { void WasmObjectWriter::writeLinkingMetaDataSection( ArrayRef Segments, uint32_t DataSize, - SmallVector, 4> SymbolFlags, - Optional StackPointerGlobal) { + SmallVector, 4> SymbolFlags) { SectionBookkeeping Section; startSection(Section, wasm::WASM_SEC_CUSTOM, "linking"); SectionBookkeeping SubSection; - if (StackPointerGlobal.hasValue()) { - startSection(SubSection, wasm::WASM_STACK_POINTER); - encodeULEB128(StackPointerGlobal.getValue(), getStream()); // id - endSection(SubSection); - } - if (SymbolFlags.size() != 0) { startSection(SubSection, wasm::WASM_SYMBOL_INFO); encodeULEB128(SymbolFlags.size(), getStream()); @@ -1011,8 +1003,6 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, SmallPtrSet IsAddressTaken; unsigned NumFuncImports = 0; SmallVector DataSegments; - Optional StackPointerGlobalName; - Optional StackPointerGlobal; uint32_t DataSize = 0; // Populate the IsAddressTaken set. @@ -1095,23 +1085,6 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, } } - // In the special .stack_pointer section, we've encoded the stack pointer - // index. - MCSectionWasm *StackPtr = - Ctx.getWasmSection(".stack_pointer", SectionKind::getMetadata()); - if (!StackPtr->getFragmentList().empty()) { - if (StackPtr->getFragmentList().size() != 1) - report_fatal_error("only one .stack_pointer fragment supported"); - const MCFragment &Frag = *StackPtr->begin(); - if (Frag.hasInstructions() || Frag.getKind() != MCFragment::FT_Data) - report_fatal_error("only data supported in .stack_pointer"); - const auto &DataFrag = cast(Frag); - if (!DataFrag.getFixups().empty()) - report_fatal_error("fixups not supported in .stack_pointer"); - const SmallVectorImpl &Contents = DataFrag.getContents(); - StackPointerGlobalName = StringRef(Contents.data(), Contents.size()); - } - // Populate FunctionTypeIndices and Imports. for (const MCSymbol &S : Asm.symbols()) { const auto &WS = static_cast(S); @@ -1144,11 +1117,8 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, // If this global is the stack pointer, make it mutable and remember it // so that we can emit metadata for it. - if (StackPointerGlobalName.hasValue() && - WS.getName() == StackPointerGlobalName.getValue()) { + if (WS.getName() == "__stack_pointer") Import.IsMutable = true; - StackPointerGlobal = NumGlobalImports; - } ++NumGlobalImports; } @@ -1338,8 +1308,7 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, writeNameSection(Functions, Imports, NumFuncImports); writeCodeRelocSection(); writeDataRelocSection(); - writeLinkingMetaDataSection(DataSegments, DataSize, SymbolFlags, - StackPointerGlobal); + writeLinkingMetaDataSection(DataSegments, DataSize, SymbolFlags); // TODO: Translate the .comment section to the output. // TODO: Translate debug sections to the output. diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp index 2437b0176881..0ca52ad651b5 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp @@ -108,10 +108,6 @@ void WebAssemblyTargetAsmStreamer::emitGlobal( } } -void WebAssemblyTargetAsmStreamer::emitStackPointer(MCSymbol *Symbol) { - OS << "\t.stack_pointer\t" << Symbol->getName() << '\n'; -} - void WebAssemblyTargetAsmStreamer::emitEndFunc() { OS << "\t.endfunc\n"; } void WebAssemblyTargetAsmStreamer::emitIndirectFunctionType( @@ -157,11 +153,6 @@ void WebAssemblyTargetELFStreamer::emitGlobal( llvm_unreachable(".globalvar encoding not yet implemented"); } -void WebAssemblyTargetELFStreamer::emitStackPointer( - MCSymbol *Symbol) { - llvm_unreachable(".stack_pointer encoding not yet implemented"); -} - void WebAssemblyTargetELFStreamer::emitEndFunc() { Streamer.EmitIntValue(WebAssembly::End, 1); } @@ -238,14 +229,6 @@ void WebAssemblyTargetWasmStreamer::emitGlobal( Streamer.PopSection(); } -void WebAssemblyTargetWasmStreamer::emitStackPointer(MCSymbol *Symbol) { - Streamer.PushSection(); - Streamer.SwitchSection(Streamer.getContext().getWasmSection( - ".stack_pointer", SectionKind::getMetadata())); - Streamer.EmitBytes(Symbol->getName()); - Streamer.PopSection(); -} - void WebAssemblyTargetWasmStreamer::emitEndFunc() { llvm_unreachable(".end_func is not needed for direct wasm output"); } diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h index db908572a58d..2cb21a20580b 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h @@ -39,8 +39,6 @@ public: virtual void emitLocal(ArrayRef Types) = 0; /// .globalvar virtual void emitGlobal(ArrayRef Globals) = 0; - /// .stack_pointer - virtual void emitStackPointer(MCSymbol *Symbol) = 0; /// .endfunc virtual void emitEndFunc() = 0; /// .functype @@ -67,7 +65,6 @@ public: void emitResult(MCSymbol *Symbol, ArrayRef Types) override; void emitLocal(ArrayRef Types) override; void emitGlobal(ArrayRef Globals) override; - void emitStackPointer(MCSymbol *Symbol) override; void emitEndFunc() override; void emitIndirectFunctionType(MCSymbol *Symbol, SmallVectorImpl &Params, @@ -85,7 +82,6 @@ public: void emitResult(MCSymbol *Symbol, ArrayRef Types) override; void emitLocal(ArrayRef Types) override; void emitGlobal(ArrayRef Globals) override; - void emitStackPointer(MCSymbol *Symbol) override; void emitEndFunc() override; void emitIndirectFunctionType(MCSymbol *Symbol, SmallVectorImpl &Params, @@ -103,7 +99,6 @@ public: void emitResult(MCSymbol *Symbol, ArrayRef Types) override; void emitLocal(ArrayRef Types) override; void emitGlobal(ArrayRef Globals) override; - void emitStackPointer(MCSymbol *Symbol) override; void emitEndFunc() override; void emitIndirectFunctionType(MCSymbol *Symbol, SmallVectorImpl &Params, diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp index 3ea677d48561..5f7f3d694cd4 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp @@ -78,12 +78,6 @@ WebAssemblyTargetStreamer *WebAssemblyAsmPrinter::getTargetStreamer() { //===----------------------------------------------------------------------===// void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) { - // Declare the stack pointer. - if (TM.getTargetTriple().isOSBinFormatWasm()) { - getTargetStreamer()->emitStackPointer( - GetExternalSymbolSymbol("__stack_pointer")); - } - for (const auto &F : M) { // Emit function type info for all undefined functions if (F.isDeclarationForLinker() && !F.isIntrinsic()) { diff --git a/llvm/test/CodeGen/WebAssembly/stack-alignment.ll b/llvm/test/CodeGen/WebAssembly/stack-alignment.ll index 6128c8a4d235..25e9d06db411 100644 --- a/llvm/test/CodeGen/WebAssembly/stack-alignment.ll +++ b/llvm/test/CodeGen/WebAssembly/stack-alignment.ll @@ -147,5 +147,3 @@ entry: call void @somefunc(i32* %static) ret void } - -; CHECK: .stack_pointer __stack_pointer -- 2.34.1