Skip to content

Commit

Permalink
[WebAssembly] TargetStreamer cleanup (NFC)
Browse files Browse the repository at this point in the history
Summary:
- Unify mixed argument names (`Symbol` and `Sym`) to `Sym`
- Changed `MCSymbolWasm*` argument of `emit***` functions to `const
  MCSymbolWasm*`. It seems not very intuitive that emit function in the
  streamer modifies symbol contents.
- Moved empty function bodies to the header
- clang-format

Reviewers: aardappel, dschuff, sbc100

Subscribers: jgravelle-google, sunfish, llvm-commits

Differential Revision: https://reviews.llvm.org/D55347

llvm-svn: 348816
  • Loading branch information
aheejin committed Dec 11, 2018
1 parent cef44a2 commit 21d45a2
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 42 deletions.
Expand Up @@ -39,7 +39,8 @@ WebAssemblyTargetAsmStreamer::WebAssemblyTargetAsmStreamer(
WebAssemblyTargetWasmStreamer::WebAssemblyTargetWasmStreamer(MCStreamer &S)
: WebAssemblyTargetStreamer(S) {}

static void PrintTypes(formatted_raw_ostream &OS, ArrayRef<wasm::ValType> Types) {
static void printTypes(formatted_raw_ostream &OS,
ArrayRef<wasm::ValType> Types) {
bool First = true;
for (auto Type : Types) {
if (First)
Expand All @@ -54,37 +55,38 @@ static void PrintTypes(formatted_raw_ostream &OS, ArrayRef<wasm::ValType> Types)
void WebAssemblyTargetAsmStreamer::emitLocal(ArrayRef<wasm::ValType> Types) {
if (!Types.empty()) {
OS << "\t.local \t";
PrintTypes(OS, Types);
printTypes(OS, Types);
}
}

void WebAssemblyTargetAsmStreamer::emitEndFunc() { OS << "\t.endfunc\n"; }

void WebAssemblyTargetAsmStreamer::emitFunctionType(MCSymbolWasm *Symbol) {
OS << "\t.functype\t" << Symbol->getName() << " (";
auto &Params = Symbol->getSignature()->Params;
void WebAssemblyTargetAsmStreamer::emitFunctionType(const MCSymbolWasm *Sym) {
assert(Sym->isFunction());
OS << "\t.functype\t" << Sym->getName() << " (";
auto &Params = Sym->getSignature()->Params;
for (auto &Ty : Params) {
if (&Ty != &Params[0]) OS << ", ";
OS << WebAssembly::TypeToString(Ty);
}
OS << ") -> (";
auto &Returns = Symbol->getSignature()->Returns;
auto &Returns = Sym->getSignature()->Returns;
for (auto &Ty : Returns) {
if (&Ty != &Returns[0]) OS << ", ";
OS << WebAssembly::TypeToString(Ty);
}
OS << ")\n";
}

void WebAssemblyTargetAsmStreamer::emitGlobalType(MCSymbolWasm *Sym) {
void WebAssemblyTargetAsmStreamer::emitGlobalType(const MCSymbolWasm *Sym) {
assert(Sym->isGlobal());
OS << "\t.globaltype\t" << Sym->getName() << ", " <<
WebAssembly::TypeToString(
static_cast<wasm::ValType>(Sym->getGlobalType().Type)) <<
'\n';
}

void WebAssemblyTargetAsmStreamer::emitEventType(MCSymbolWasm *Sym) {
void WebAssemblyTargetAsmStreamer::emitEventType(const MCSymbolWasm *Sym) {
assert(Sym->isEvent());
OS << "\t.eventtype\t" << Sym->getName();
if (Sym->getSignature()->Returns.empty())
Expand All @@ -99,7 +101,7 @@ void WebAssemblyTargetAsmStreamer::emitEventType(MCSymbolWasm *Sym) {
OS << '\n';
}

void WebAssemblyTargetAsmStreamer::emitImportModule(MCSymbolWasm *Sym,
void WebAssemblyTargetAsmStreamer::emitImportModule(const MCSymbolWasm *Sym,
StringRef ModuleName) {
OS << "\t.import_module\t" << Sym->getName() << ", " << ModuleName << '\n';
}
Expand Down Expand Up @@ -131,20 +133,3 @@ void WebAssemblyTargetWasmStreamer::emitEndFunc() {
void WebAssemblyTargetWasmStreamer::emitIndIdx(const MCExpr *Value) {
llvm_unreachable(".indidx encoding not yet implemented");
}

void WebAssemblyTargetWasmStreamer::emitFunctionType(MCSymbolWasm *Symbol) {
// Symbol already has its arguments and result set.
Symbol->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION);
}

void WebAssemblyTargetWasmStreamer::emitGlobalType(MCSymbolWasm *Sym) {
// Not needed.
}

void WebAssemblyTargetWasmStreamer::emitEventType(MCSymbolWasm *Sym) {
// Not needed.
}
void WebAssemblyTargetWasmStreamer::emitImportModule(MCSymbolWasm *Sym,
StringRef ModuleName) {
Sym->setModuleName(ModuleName);
}
Expand Up @@ -36,15 +36,16 @@ class WebAssemblyTargetStreamer : public MCTargetStreamer {
/// .endfunc
virtual void emitEndFunc() = 0;
/// .functype
virtual void emitFunctionType(MCSymbolWasm *Symbol) = 0;
virtual void emitFunctionType(const MCSymbolWasm *Sym) = 0;
/// .indidx
virtual void emitIndIdx(const MCExpr *Value) = 0;
/// .globaltype
virtual void emitGlobalType(MCSymbolWasm *Sym) = 0;
virtual void emitGlobalType(const MCSymbolWasm *Sym) = 0;
/// .eventtype
virtual void emitEventType(MCSymbolWasm *Sym) = 0;
virtual void emitEventType(const MCSymbolWasm *Sym) = 0;
/// .import_module
virtual void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) = 0;
virtual void emitImportModule(const MCSymbolWasm *Sym,
StringRef ModuleName) = 0;

protected:
void emitValueType(wasm::ValType Type);
Expand All @@ -59,11 +60,11 @@ class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {

void emitLocal(ArrayRef<wasm::ValType> Types) override;
void emitEndFunc() override;
void emitFunctionType(MCSymbolWasm *Symbol) override;
void emitFunctionType(const MCSymbolWasm *Sym) override;
void emitIndIdx(const MCExpr *Value) override;
void emitGlobalType(MCSymbolWasm *Sym) override;
void emitEventType(MCSymbolWasm *Sym) override;
void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override;
void emitGlobalType(const MCSymbolWasm *Sym) override;
void emitEventType(const MCSymbolWasm *Sym) override;
void emitImportModule(const MCSymbolWasm *Sym, StringRef ModuleName) override;
};

/// This part is for Wasm object output
Expand All @@ -73,11 +74,12 @@ class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {

void emitLocal(ArrayRef<wasm::ValType> Types) override;
void emitEndFunc() override;
void emitFunctionType(MCSymbolWasm *Symbol) override;
void emitFunctionType(const MCSymbolWasm *Sym) override {}
void emitIndIdx(const MCExpr *Value) override;
void emitGlobalType(MCSymbolWasm *Sym) override;
void emitEventType(MCSymbolWasm *Sym) override;
void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override;
void emitGlobalType(const MCSymbolWasm *Sym) override {}
void emitEventType(const MCSymbolWasm *Sym) override {}
void emitImportModule(const MCSymbolWasm *Sym,
StringRef ModuleName) override {}
};

/// This part is for null output
Expand All @@ -88,11 +90,11 @@ class WebAssemblyTargetNullStreamer final : public WebAssemblyTargetStreamer {

void emitLocal(ArrayRef<wasm::ValType>) override {}
void emitEndFunc() override {}
void emitFunctionType(MCSymbolWasm *) override {}
void emitFunctionType(const MCSymbolWasm *) override {}
void emitIndIdx(const MCExpr *) override {}
void emitGlobalType(MCSymbolWasm *) override {}
void emitEventType(MCSymbolWasm *) override {}
void emitImportModule(MCSymbolWasm *, StringRef) override {}
void emitGlobalType(const MCSymbolWasm *) override {}
void emitEventType(const MCSymbolWasm *) override {}
void emitImportModule(const MCSymbolWasm *, StringRef) override {}
};

} // end namespace llvm
Expand Down
3 changes: 3 additions & 0 deletions llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
Expand Up @@ -94,6 +94,7 @@ void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) {
SmallVector<MVT, 4> Params;
ComputeSignatureVTs(F.getFunctionType(), F, TM, Params, Results);
auto *Sym = cast<MCSymbolWasm>(getSymbol(&F));
Sym->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION);
if (!Sym->getSignature()) {
auto Signature = SignatureFromMVTs(Results, Params);
Sym->setSignature(Signature.get());
Expand All @@ -110,6 +111,7 @@ void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) {
F.hasFnAttribute("wasm-import-module")) {
StringRef Name =
F.getFnAttribute("wasm-import-module").getValueAsString();
Sym->setModuleName(Name);
getTargetStreamer()->emitImportModule(Sym, Name);
}
}
Expand Down Expand Up @@ -164,6 +166,7 @@ void WebAssemblyAsmPrinter::EmitFunctionBodyStart() {
auto *WasmSym = cast<MCSymbolWasm>(CurrentFnSym);
WasmSym->setSignature(Signature.get());
addSignature(std::move(Signature));
WasmSym->setType(wasm::WASM_SYMBOL_TYPE_FUNCTION);

// FIXME: clean up how params and results are emitted (use signatures)
getTargetStreamer()->emitFunctionType(WasmSym);
Expand Down

0 comments on commit 21d45a2

Please sign in to comment.