mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
[WebAssebmly][MC] Support .import_name/.import_field asm directives
Convert the MC test to use asm rather than bitcode. This is a precursor to https://reviews.llvm.org/D70520. Differential Revision: https://reviews.llvm.org/D70877
This commit is contained in:
parent
e3b8614158
commit
7d2c6fd3c7
@ -78,6 +78,7 @@ public:
|
|||||||
}
|
}
|
||||||
void setImportModule(StringRef Name) { ImportModule = Name; }
|
void setImportModule(StringRef Name) { ImportModule = Name; }
|
||||||
|
|
||||||
|
bool hasImportName() const { return ImportName.hasValue(); }
|
||||||
const StringRef getImportName() const {
|
const StringRef getImportName() const {
|
||||||
if (ImportName.hasValue()) {
|
if (ImportName.hasValue()) {
|
||||||
return ImportName.getValue();
|
return ImportName.getValue();
|
||||||
|
@ -1452,7 +1452,7 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm,
|
|||||||
Flags |= wasm::WASM_SYMBOL_EXPORTED;
|
Flags |= wasm::WASM_SYMBOL_EXPORTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (WS.getName() != WS.getImportName())
|
if (WS.hasImportName())
|
||||||
Flags |= wasm::WASM_SYMBOL_EXPLICIT_NAME;
|
Flags |= wasm::WASM_SYMBOL_EXPLICIT_NAME;
|
||||||
|
|
||||||
wasm::WasmSymbolInfo Info;
|
wasm::WasmSymbolInfo Info;
|
||||||
|
@ -712,6 +712,30 @@ public:
|
|||||||
return expect(AsmToken::EndOfStatement, "EOL");
|
return expect(AsmToken::EndOfStatement, "EOL");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DirectiveID.getString() == ".import_module") {
|
||||||
|
auto SymName = expectIdent();
|
||||||
|
if (SymName.empty())
|
||||||
|
return true;
|
||||||
|
if (expect(AsmToken::Comma, ","))
|
||||||
|
return true;
|
||||||
|
auto ImportModule = expectIdent();
|
||||||
|
auto WasmSym = cast<MCSymbolWasm>(Ctx.getOrCreateSymbol(SymName));
|
||||||
|
WasmSym->setImportModule(ImportModule);
|
||||||
|
TOut.emitImportModule(WasmSym, ImportModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DirectiveID.getString() == ".import_name") {
|
||||||
|
auto SymName = expectIdent();
|
||||||
|
if (SymName.empty())
|
||||||
|
return true;
|
||||||
|
if (expect(AsmToken::Comma, ","))
|
||||||
|
return true;
|
||||||
|
auto ImportName = expectIdent();
|
||||||
|
auto WasmSym = cast<MCSymbolWasm>(Ctx.getOrCreateSymbol(SymName));
|
||||||
|
WasmSym->setImportName(ImportName);
|
||||||
|
TOut.emitImportName(WasmSym, ImportName);
|
||||||
|
}
|
||||||
|
|
||||||
if (DirectiveID.getString() == ".eventtype") {
|
if (DirectiveID.getString() == ".eventtype") {
|
||||||
auto SymName = expectIdent();
|
auto SymName = expectIdent();
|
||||||
if (SymName.empty())
|
if (SymName.empty())
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s
|
|
||||||
|
|
||||||
target triple = "wasm32-unknown-unknown"
|
|
||||||
|
|
||||||
define void @test() {
|
|
||||||
call void @foo()
|
|
||||||
call void @plain()
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
declare void @foo() #0
|
|
||||||
declare void @plain()
|
|
||||||
|
|
||||||
attributes #0 = { "wasm-import-module"="bar" "wasm-import-name"="qux" }
|
|
||||||
|
|
||||||
; CHECK: - Type: IMPORT
|
|
||||||
; CHECK-NEXT: Imports:
|
|
||||||
; CHECK: - Module: bar
|
|
||||||
; CHECK-NEXT: Field: qux
|
|
||||||
; CHECK-NEXT: Kind: FUNCTION
|
|
||||||
|
|
||||||
; CHECK: - Module: env
|
|
||||||
; CHECK-NEXT: Field: plain
|
|
||||||
; CHECK-NEXT: Kind: FUNCTION
|
|
||||||
|
|
||||||
; CHECK: - Type: CUSTOM
|
|
||||||
; CHECK: Name: foo
|
|
||||||
; CHECK-NEXT: Flags: [ UNDEFINED, EXPLICIT_NAME ]
|
|
||||||
|
|
||||||
; CHECK: Name: plain
|
|
||||||
; CHECK-NEXT: Flags: [ UNDEFINED ]
|
|
33
test/MC/WebAssembly/import-module.s
Normal file
33
test/MC/WebAssembly/import-module.s
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# RUN: llvm-mc -triple=wasm32 < %s | FileCheck %s -check-prefix=CHECK-ASM
|
||||||
|
# RUN: llvm-mc -triple=wasm32 -filetype=obj -o - < %s | obj2yaml | FileCheck %s
|
||||||
|
|
||||||
|
test:
|
||||||
|
.functype test () -> ()
|
||||||
|
call foo
|
||||||
|
call plain
|
||||||
|
end_function
|
||||||
|
|
||||||
|
.functype foo () -> ()
|
||||||
|
.functype plain () -> ()
|
||||||
|
.import_module foo, bar
|
||||||
|
.import_name foo, qux
|
||||||
|
|
||||||
|
# CHECK-ASM: .import_module foo, bar
|
||||||
|
# CHECK-ASM: .import_name foo, qux
|
||||||
|
|
||||||
|
# CHECK: - Type: IMPORT
|
||||||
|
# CHECK-NEXT: Imports:
|
||||||
|
# CHECK: - Module: bar
|
||||||
|
# CHECK-NEXT: Field: qux
|
||||||
|
# CHECK-NEXT: Kind: FUNCTION
|
||||||
|
|
||||||
|
# CHECK: - Module: env
|
||||||
|
# CHECK-NEXT: Field: plain
|
||||||
|
# CHECK-NEXT: Kind: FUNCTION
|
||||||
|
|
||||||
|
# CHECK: - Type: CUSTOM
|
||||||
|
# CHECK: Name: foo
|
||||||
|
# CHECK-NEXT: Flags: [ UNDEFINED, EXPLICIT_NAME ]
|
||||||
|
|
||||||
|
# CHECK: Name: plain
|
||||||
|
# CHECK-NEXT: Flags: [ UNDEFINED ]
|
Loading…
Reference in New Issue
Block a user