1; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s 2 3target triple = "wasm32-unknown-unknown" 4 5; Import a function just so we can check the index arithmetic for 6; WASM_COMDAT_FUNCTION entries is performed correctly 7declare i32 @funcImport() 8define i32 @callImport() { 9entry: 10 %call = call i32 @funcImport() 11 ret i32 %call 12} 13 14; Function in its own COMDAT 15$basicInlineFn = comdat any 16define linkonce_odr i32 @basicInlineFn() #1 comdat { 17 ret i32 0 18} 19 20; Global, data, and function in same COMDAT 21$sharedComdat = comdat any 22@constantData = weak_odr constant [3 x i8] c"abc", comdat($sharedComdat) 23define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) { 24 ret i32 0 25} 26 27; CHECK: Sections: 28; CHECK-NEXT: - Type: TYPE 29; CHECK-NEXT: Signatures: 30; CHECK-NEXT: - Index: 0 31; CHECK-NEXT: ParamTypes: [] 32; CHECK-NEXT: ReturnTypes: 33; CHECK-NEXT: - I32 34; CHECK-NEXT: - Type: IMPORT 35; CHECK-NEXT: Imports: 36; CHECK-NEXT: - Module: env 37; CHECK-NEXT: Field: __linear_memory 38; CHECK-NEXT: Kind: MEMORY 39; CHECK-NEXT: Memory: 40; CHECK-NEXT: Initial: 0x00000001 41; CHECK-NEXT: - Module: env 42; CHECK-NEXT: Field: __indirect_function_table 43; CHECK-NEXT: Kind: TABLE 44; CHECK-NEXT: Table: 45; CHECK-NEXT: Index: 0 46; CHECK-NEXT: ElemType: FUNCREF 47; CHECK-NEXT: Limits: 48; CHECK-NEXT: Initial: 0x00000000 49; CHECK-NEXT: - Module: env 50; CHECK-NEXT: Field: funcImport 51; CHECK-NEXT: Kind: FUNCTION 52; CHECK-NEXT: SigIndex: 0 53; CHECK-NEXT: - Type: FUNCTION 54; CHECK-NEXT: FunctionTypes: [ 0, 0, 0 ] 55; CHECK-NEXT: - Type: DATACOUNT 56; CHECK-NEXT: Count: 1 57; CHECK-NEXT: - Type: CODE 58; CHECK-NEXT: Relocations: 59; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 60; CHECK-NEXT: Index: 1 61; CHECK-NEXT: Offset: 0x00000004 62; CHECK-NEXT: Functions: 63; CHECK-NEXT: - Index: 1 64; CHECK-NEXT: Locals: 65; CHECK-NEXT: Body: 1080808080000B 66; CHECK-NEXT: - Index: 2 67; CHECK-NEXT: Locals: 68; CHECK-NEXT: Body: 41000B 69; CHECK-NEXT: - Index: 3 70; CHECK-NEXT: Locals: 71; CHECK-NEXT: Body: 41000B 72; CHECK-NEXT: - Type: DATA 73; CHECK-NEXT: Segments: 74; CHECK-NEXT: - SectionOffset: 6 75; CHECK-NEXT: InitFlags: 0 76; CHECK-NEXT: Offset: 77; CHECK-NEXT: Opcode: I32_CONST 78; CHECK-NEXT: Value: 0 79; CHECK-NEXT: Content: '616263' 80; CHECK-NEXT: - Type: CUSTOM 81; CHECK-NEXT: Name: linking 82; CHECK-NEXT: Version: 2 83; CHECK-NEXT: SymbolTable: 84; CHECK-NEXT: - Index: 0 85; CHECK-NEXT: Kind: FUNCTION 86; CHECK-NEXT: Name: callImport 87; CHECK-NEXT: Flags: [ ] 88; CHECK-NEXT: Function: 1 89; CHECK-NEXT: - Index: 1 90; CHECK-NEXT: Kind: FUNCTION 91; CHECK-NEXT: Name: funcImport 92; CHECK-NEXT: Flags: [ UNDEFINED ] 93; CHECK-NEXT: Function: 0 94; CHECK-NEXT: - Index: 2 95; CHECK-NEXT: Kind: FUNCTION 96; CHECK-NEXT: Name: basicInlineFn 97; CHECK-NEXT: Flags: [ BINDING_WEAK ] 98; CHECK-NEXT: Function: 2 99; CHECK-NEXT: - Index: 3 100; CHECK-NEXT: Kind: FUNCTION 101; CHECK-NEXT: Name: sharedFn 102; CHECK-NEXT: Flags: [ BINDING_WEAK ] 103; CHECK-NEXT: Function: 3 104; CHECK-NEXT: - Index: 4 105; CHECK-NEXT: Kind: DATA 106; CHECK-NEXT: Name: constantData 107; CHECK-NEXT: Flags: [ BINDING_WEAK ] 108; CHECK-NEXT: Segment: 0 109; CHECK-NEXT: Size: 3 110; CHECK-NEXT: SegmentInfo: 111; CHECK-NEXT: - Index: 0 112; CHECK-NEXT: Name: .rodata.constantData 113; CHECK-NEXT: Alignment: 0 114; CHECK-NEXT: Flags: [ ] 115; CHECK-NEXT: Comdats: 116; CHECK-NEXT: Name: basicInlineFn 117; CHECK-NEXT: Entries: 118; CHECK-NEXT: - Kind: FUNCTION 119; CHECK-NEXT: Index: 2 120; CHECK-NEXT: Name: sharedComdat 121; CHECK-NEXT: Entries: 122; CHECK-NEXT: - Kind: FUNCTION 123; CHECK-NEXT: Index: 3 124; CHECK-NEXT: - Kind: DATA 125; CHECK-NEXT: Index: 0 126; CHECK-NEXT: ... 127