This is combination of two patches by Nicholas Wilson: 1. https://reviews.llvm.org/D41954 2. https://reviews.llvm.org/D42495 Along with a few local modifications: - One change I made was to add the UNDEFINED bit to the binary format to avoid the extra byte used when writing data symbols. Although this bit is redundant for other symbols types (i.e. undefined can be implied if a function or global is a wasm import) - I prefer to be explicit and consistent and not have derived flags. - Some field renaming. - Some reverting of unrelated minor changes. - No test output differences. Differential Revision: https://reviews.llvm.org/D43147 llvm-svn: 325860
123 lines
4.7 KiB
LLVM
123 lines
4.7 KiB
LLVM
; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s
|
|
|
|
target triple = "wasm32-unknown-unknown-wasm"
|
|
|
|
; Import a function just so we can check the index arithmetic for
|
|
; WASM_COMDAT_FUNCTION entries is performed correctly
|
|
declare i32 @funcImport()
|
|
define i32 @callImport() {
|
|
entry:
|
|
%call = call i32 @funcImport()
|
|
ret i32 %call
|
|
}
|
|
|
|
; Function in its own COMDAT
|
|
$basicInlineFn = comdat any
|
|
define linkonce_odr i32 @basicInlineFn() #1 comdat {
|
|
ret i32 0
|
|
}
|
|
|
|
; Global, data, and function in same COMDAT
|
|
$sharedComdat = comdat any
|
|
@constantData = weak_odr constant [3 x i8] c"abc", comdat($sharedComdat)
|
|
define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) {
|
|
ret i32 0
|
|
}
|
|
|
|
; CHECK: Sections:
|
|
; CHECK-NEXT: - Type: TYPE
|
|
; CHECK-NEXT: Signatures:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: ReturnType: I32
|
|
; CHECK-NEXT: ParamTypes:
|
|
; 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: Initial: 0x00000001
|
|
; CHECK-NEXT: - Module: env
|
|
; CHECK-NEXT: Field: __indirect_function_table
|
|
; CHECK-NEXT: Kind: TABLE
|
|
; CHECK-NEXT: Table:
|
|
; CHECK-NEXT: ElemType: ANYFUNC
|
|
; CHECK-NEXT: Limits:
|
|
; CHECK-NEXT: Initial: 0x00000000
|
|
; CHECK-NEXT: - Module: env
|
|
; CHECK-NEXT: Field: funcImport
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: SigIndex: 0
|
|
; CHECK-NEXT: - Type: FUNCTION
|
|
; CHECK-NEXT: FunctionTypes: [ 0, 0, 0 ]
|
|
; CHECK-NEXT: - Type: CODE
|
|
; CHECK-NEXT: Relocations:
|
|
; CHECK-NEXT: - Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB
|
|
; CHECK-NEXT: Index: 0
|
|
; CHECK-NEXT: Offset: 0x00000004
|
|
; CHECK-NEXT: Functions:
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: Locals:
|
|
; CHECK-NEXT: Body: 1080808080000B
|
|
; CHECK-NEXT: - Index: 2
|
|
; CHECK-NEXT: Locals:
|
|
; CHECK-NEXT: Body: 41000B
|
|
; CHECK-NEXT: - Index: 3
|
|
; CHECK-NEXT: Locals:
|
|
; CHECK-NEXT: Body: 41000B
|
|
; CHECK-NEXT: - Type: DATA
|
|
; CHECK-NEXT: Segments:
|
|
; CHECK-NEXT: - SectionOffset: 6
|
|
; CHECK-NEXT: MemoryIndex: 0
|
|
; CHECK-NEXT: Offset:
|
|
; CHECK-NEXT: Opcode: I32_CONST
|
|
; CHECK-NEXT: Value: 0
|
|
; CHECK-NEXT: Content: '616263'
|
|
; CHECK-NEXT: - Type: CUSTOM
|
|
; CHECK-NEXT: Name: linking
|
|
; CHECK-NEXT: DataSize: 3
|
|
; CHECK-NEXT: SymbolTable:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: funcImport
|
|
; CHECK-NEXT: Flags: [ UNDEFINED ]
|
|
; CHECK-NEXT: Function: 0
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: callImport
|
|
; CHECK-NEXT: Flags: [ ]
|
|
; CHECK-NEXT: Function: 1
|
|
; CHECK-NEXT: - Index: 2
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: basicInlineFn
|
|
; CHECK-NEXT: Flags: [ BINDING_WEAK ]
|
|
; CHECK-NEXT: Function: 2
|
|
; CHECK-NEXT: - Index: 3
|
|
; CHECK-NEXT: Kind: FUNCTION
|
|
; CHECK-NEXT: Name: sharedFn
|
|
; CHECK-NEXT: Flags: [ BINDING_WEAK ]
|
|
; CHECK-NEXT: Function: 3
|
|
; CHECK-NEXT: - Index: 4
|
|
; CHECK-NEXT: Kind: DATA
|
|
; CHECK-NEXT: Name: constantData
|
|
; CHECK-NEXT: Flags: [ BINDING_WEAK ]
|
|
; CHECK-NEXT: Segment: 0
|
|
; CHECK-NEXT: Size: 3
|
|
; CHECK-NEXT: SegmentInfo:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: Name: .rodata.constantData
|
|
; CHECK-NEXT: Alignment: 1
|
|
; CHECK-NEXT: Flags: [ ]
|
|
; CHECK-NEXT: Comdats:
|
|
; CHECK-NEXT: Name: basicInlineFn
|
|
; CHECK-NEXT: Entries:
|
|
; CHECK-NEXT: - Kind: FUNCTION
|
|
; CHECK-NEXT: Index: 2
|
|
; CHECK-NEXT: Name: sharedComdat
|
|
; CHECK-NEXT: Entries:
|
|
; CHECK-NEXT: - Kind: FUNCTION
|
|
; CHECK-NEXT: Index: 3
|
|
; CHECK-NEXT: - Kind: DATA
|
|
; CHECK-NEXT: Index: 0
|
|
; CHECK-NEXT: ...
|