Reland of 00bf4755. This patches fixes the visibility and linkage information of symbols referring to IR globals. Emission of external declarations is now done in the first execution of emitConstantPool rather than in emitLinkage (and a few other places). This is the point where we have already gathered information about used symbols (by running the MC Lower PrePass) and not yet started emitting any functions so that any declarations that need to be emitted are done so at the top of the file before any functions. This changes the order of a few directives in the final asm file which required an update to a few tests. Reviewed By: sbc100 Differential Revision: https://reviews.llvm.org/D118995
83 lines
2.9 KiB
LLVM
83 lines
2.9 KiB
LLVM
; RUN: llc -filetype=asm -asm-verbose=false %s -o %t.s
|
|
; RUN: FileCheck -check-prefix=ASM -input-file %t.s %s
|
|
; RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=asm %t.s -o - | FileCheck -check-prefix=ASM %s
|
|
; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s
|
|
; RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj %t.s -o - | obj2yaml | FileCheck %s
|
|
|
|
; This specifically tests that we can generate a binary from the assembler
|
|
; that produces the same binary as the backend would.
|
|
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
declare void @bar()
|
|
|
|
define void @foo(i32 %n) {
|
|
entry:
|
|
call void @bar()
|
|
ret void
|
|
}
|
|
|
|
; Checking assembly is not the point of this test, but if something breaks
|
|
; it is easier to spot it here than in the yaml output.
|
|
|
|
; ASM: .text
|
|
; ASM: .file "assembler-binary.ll"
|
|
; ASM: .functype bar () -> ()
|
|
; ASM: .globl foo
|
|
; ASM: foo:
|
|
; ASM-NEXT: .functype foo (i32) -> ()
|
|
; ASM-NEXT: call bar
|
|
; ASM-NEXT: end_function
|
|
|
|
|
|
; CHECK: --- !WASM
|
|
; CHECK-NEXT: FileHeader:
|
|
; CHECK-NEXT: Version: 0x1
|
|
; CHECK-NEXT: Sections:
|
|
; CHECK-NEXT: - Type: TYPE
|
|
; CHECK-NEXT: Signatures:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: ParamTypes:
|
|
; CHECK-NEXT: - I32
|
|
; CHECK-NEXT: ReturnTypes: []
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: ParamTypes: []
|
|
; CHECK-NEXT: ReturnTypes: []
|
|
; CHECK-NEXT: - Type: IMPORT
|
|
; CHECK-NEXT: Imports:
|
|
; CHECK-NEXT: - Module: env
|
|
; CHECK-NEXT: Field: __linear_memory
|
|
; CHECK-NEXT: Kind: MEMORY
|
|
; CHECK-NEXT: Memory:
|
|
; CHECK-NEXT: Minimum: 0x0
|
|
; CHECK-NEXT: - Module: env
|
|
; CHECK-NEXT: Field: bar
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: SigIndex: 1
|
|
; CHECK-NEXT: - Type: FUNCTION
|
|
; CHECK-NEXT: FunctionTypes: [ 0 ]
|
|
; CHECK-NEXT: - Type: CODE
|
|
; CHECK-NEXT: Relocations:
|
|
; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB
|
|
; CHECK-NEXT: Index: 1
|
|
; CHECK-NEXT: Offset: 0x4
|
|
; CHECK-NEXT: Functions:
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: Locals: []
|
|
; CHECK-NEXT: Body: 1080808080000B
|
|
; CHECK-NEXT: - Type: CUSTOM
|
|
; CHECK-NEXT: Name: linking
|
|
; CHECK-NEXT: Version: 2
|
|
; CHECK-NEXT: SymbolTable:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: foo
|
|
; CHECK-NEXT: Flags: [ ]
|
|
; CHECK-NEXT: Function: 1
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: bar
|
|
; CHECK-NEXT: Flags: [ UNDEFINED ]
|
|
; CHECK-NEXT: Function: 0
|
|
; CHECK-NEXT: ...
|