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