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; }
|
||||
|
||||
bool hasImportName() const { return ImportName.hasValue(); }
|
||||
const StringRef getImportName() const {
|
||||
if (ImportName.hasValue()) {
|
||||
return ImportName.getValue();
|
||||
|
@ -1452,7 +1452,7 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm,
|
||||
Flags |= wasm::WASM_SYMBOL_EXPORTED;
|
||||
}
|
||||
}
|
||||
if (WS.getName() != WS.getImportName())
|
||||
if (WS.hasImportName())
|
||||
Flags |= wasm::WASM_SYMBOL_EXPLICIT_NAME;
|
||||
|
||||
wasm::WasmSymbolInfo Info;
|
||||
|
@ -712,6 +712,30 @@ public:
|
||||
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") {
|
||||
auto SymName = expectIdent();
|
||||
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