Skip to content

Commit

Permalink
[WebAssembly] Add null streamer support
Browse files Browse the repository at this point in the history
Summary: Now `llc -filetype=null` works.

Reviewers: eush

Subscribers: dschuff, jgravelle-google, sbc100, sunfish, llvm-commits

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

llvm-svn: 347155
  • Loading branch information
aheejin committed Nov 18, 2018
1 parent 7a391ff commit e0f8b9b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
Expand Up @@ -90,6 +90,10 @@ static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
return new WebAssemblyTargetAsmStreamer(S, OS);
}

static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) {
return new WebAssemblyTargetNullStreamer(S);
}

// Force static initialization.
extern "C" void LLVMInitializeWebAssemblyTargetMC() {
for (Target *T :
Expand Down Expand Up @@ -120,6 +124,8 @@ extern "C" void LLVMInitializeWebAssemblyTargetMC() {
createObjectTargetStreamer);
// Register the asm target streamer.
TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer);
// Register the null target streamer.
TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer);
}
}

Expand Down
Expand Up @@ -88,6 +88,23 @@ class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {
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<MVT> Types) override {}
void emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) override {}
void emitLocal(ArrayRef<MVT> 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
19 changes: 19 additions & 0 deletions llvm/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

0 comments on commit e0f8b9b

Please sign in to comment.