forked from OSchip/llvm-project
[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:
parent
7a391ff918
commit
e0f8b9bfc6
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue