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:
parent
4750d08150
commit
24418123e0
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user