Index: llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ llvm/trunk/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: llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h =================================================================== --- llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h +++ llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h @@ -88,6 +88,23 @@ 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) {} + + void emitParam(MCSymbol *Symbol, ArrayRef Types) override {} + void emitResult(MCSymbol *Symbol, ArrayRef Types) override {} + void emitLocal(ArrayRef Types) override {} + void emitEndFunc() override {} + void emitIndirectFunctionType(MCSymbolWasm *Symbol) override {} + void emitIndIdx(const MCExpr *Value) override {} + void emitGlobalType(MCSymbolWasm *Sym) override {} + void emitEventType(MCSymbolWasm *Sym) override {} + void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override {} +}; + } // end namespace llvm #endif Index: llvm/trunk/test/CodeGen/WebAssembly/null-streamer.ll =================================================================== --- llvm/trunk/test/CodeGen/WebAssembly/null-streamer.ll +++ llvm/trunk/test/CodeGen/WebAssembly/null-streamer.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -O0 -filetype=null -exception-model=wasm -mattr=+exception-handling +; RUN: llc < %s -O0 -filetype=asm -asm-verbose=false -exception-model=wasm -mattr=+exception-handling | FileCheck %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 @test(i8* %p) { + %n = alloca i32 + call void @llvm.wasm.throw(i32 0, i8* %p) + call void @g() + ret i32 0 +} + +; CHECK-DAG: .globaltype +; CHECK-DAG: .eventtype +; CHECK-DAG: .functype