1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

[WebAssembly] TargetStreamer cleanup (NFC)

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
This commit is contained in:
Heejin Ahn 2018-12-11 00:53:59 +00:00
parent 4750d08150
commit 24418123e0
3 changed files with 32 additions and 42 deletions

View File

@ -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)
@ -54,21 +55,22 @@ 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);
@ -76,7 +78,7 @@ void WebAssemblyTargetAsmStreamer::emitFunctionType(MCSymbolWasm *Symbol) {
OS << ")\n";
}
void WebAssemblyTargetAsmStreamer::emitGlobalType(MCSymbolWasm *Sym) {
void WebAssemblyTargetAsmStreamer::emitGlobalType(const MCSymbolWasm *Sym) {
assert(Sym->isGlobal());
OS << "\t.globaltype\t" << Sym->getName() << ", " <<
WebAssembly::TypeToString(
@ -84,7 +86,7 @@ void WebAssemblyTargetAsmStreamer::emitGlobalType(MCSymbolWasm *Sym) {
'\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())
@ -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';
}
@ -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);
}

View File

@ -36,15 +36,16 @@ public:
/// .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);
@ -59,11 +60,11 @@ public:
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
@ -73,11 +74,12 @@ public:
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
@ -88,11 +90,11 @@ public:
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

View File

@ -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());
@ -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);
}
}
@ -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);