Index: lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp =================================================================== --- lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp @@ -90,6 +90,10 @@ return new WebAssemblyTargetAsmStreamer(S, OS); } +static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) { + return new WebAssemblyTargetNullStreamer(S); +} + // Force static initialization. extern "C" void LLVMInitializeWebAssemblyTargetMC() { for (Target *T : @@ -120,6 +124,8 @@ createObjectTargetStreamer); // Register the asm target streamer. TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer); + // Register the null target streamer. + TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer); } } Index: lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h =================================================================== --- lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h +++ lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h @@ -88,6 +88,24 @@ void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override; }; +/// This part is for null output +class WebAssemblyTargetNullStreamer final : public WebAssemblyTargetStreamer { +public: + explicit WebAssemblyTargetNullStreamer(MCStreamer &S) + : WebAssemblyTargetStreamer(S) {} + + virtual void emitParam(MCSymbol *Symbol, ArrayRef Types) override {} + virtual void emitResult(MCSymbol *Symbol, ArrayRef Types) override {} + virtual void emitLocal(ArrayRef Types) override {} + virtual void emitEndFunc() override {} + virtual void emitIndirectFunctionType(MCSymbolWasm *Symbol) override {} + virtual void emitIndIdx(const MCExpr *Value) override {} + virtual void emitGlobalType(MCSymbolWasm *Sym) override {} + virtual void emitEventType(MCSymbolWasm *Sym) override {} + virtual void emitImportModule(MCSymbolWasm *Sym, + StringRef ModuleName) override {} +}; + } // end namespace llvm #endif Index: test/CodeGen/WebAssembly/null-streamer.ll =================================================================== --- /dev/null +++ test/CodeGen/WebAssembly/null-streamer.ll @@ -0,0 +1,14 @@ +; RUN: llc -O0 -filetype=null -exception-model=wasm -mattr=+exception-handling < %s + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +declare void @llvm.wasm.throw(i32, i8*) + +declare void @g() + +define i32 @f(i8* %p) { + call void @llvm.wasm.throw(i32 0, i8* %p) + call void @g() + ret i32 0 +}