[WebAssembly] Add null streamer support

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
This commit is contained in:
Heejin Ahn 2018-11-18 11:58:47 +00:00
parent 7a391ff918
commit e0f8b9bfc6
3 changed files with 42 additions and 0 deletions

View File

@ -90,6 +90,10 @@ static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S,
return new WebAssemblyTargetAsmStreamer(S, OS); return new WebAssemblyTargetAsmStreamer(S, OS);
} }
static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) {
return new WebAssemblyTargetNullStreamer(S);
}
// Force static initialization. // Force static initialization.
extern "C" void LLVMInitializeWebAssemblyTargetMC() { extern "C" void LLVMInitializeWebAssemblyTargetMC() {
for (Target *T : for (Target *T :
@ -120,6 +124,8 @@ extern "C" void LLVMInitializeWebAssemblyTargetMC() {
createObjectTargetStreamer); createObjectTargetStreamer);
// Register the asm target streamer. // Register the asm target streamer.
TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer); TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer);
// Register the null target streamer.
TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer);
} }
} }

View File

@ -88,6 +88,23 @@ public:
void emitImportModule(MCSymbolWasm *Sym, StringRef ModuleName) override; 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 } // end namespace llvm
#endif #endif

View File

@ -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