1
0
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:
Sam Clegg 2019-12-01 10:49:03 -08:00
parent e3b8614158
commit 7d2c6fd3c7
5 changed files with 59 additions and 32 deletions

View File

@ -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();

View File

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

View File

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

View File

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

View 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 ]