1*0807bc7eSDan Gohman; RUN: llc -mcpu=mvp -filetype=obj %s -o - | obj2yaml | FileCheck %s 2*0807bc7eSDan Gohman; RUN: llc -mcpu=mvp -filetype=asm %s -asm-verbose=false -o - | FileCheck --check-prefix=ASM %s 3*0807bc7eSDan Gohman; RUN: llc -mcpu=mvp -filetype=asm %s -o - | llvm-mc -triple=wasm32 -filetype=obj -o - | obj2yaml | FileCheck %s 48d396acaSDerek Schuff; These RUN lines verify the ll direct-to-object path, the ll->asm path, and the 58d396acaSDerek Schuff; object output via asm. 68cbfbd6dSSam Clegg 7a5908009SSam Cleggtarget triple = "wasm32-unknown-unknown" 8ea7caceeSSam Clegg 9ea7caceeSSam Clegg; Import a function just so we can check the index arithmetic for 10ea7caceeSSam Clegg; WASM_COMDAT_FUNCTION entries is performed correctly 11ea7caceeSSam Cleggdeclare i32 @funcImport() 12ea7caceeSSam Cleggdefine i32 @callImport() { 13ea7caceeSSam Cleggentry: 14ea7caceeSSam Clegg %call = call i32 @funcImport() 15ea7caceeSSam Clegg ret i32 %call 16ea7caceeSSam Clegg} 17ea7caceeSSam Clegg 18ea7caceeSSam Clegg; Function in its own COMDAT 19ea7caceeSSam Clegg$basicInlineFn = comdat any 20ea7caceeSSam Cleggdefine linkonce_odr i32 @basicInlineFn() #1 comdat { 21ea7caceeSSam Clegg ret i32 0 22ea7caceeSSam Clegg} 23ea7caceeSSam Clegg 24ea7caceeSSam Clegg; Global, data, and function in same COMDAT 25ea7caceeSSam Clegg$sharedComdat = comdat any 26ea7caceeSSam Clegg@constantData = weak_odr constant [3 x i8] c"abc", comdat($sharedComdat) 27ea7caceeSSam Cleggdefine linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) { 28ea7caceeSSam Clegg ret i32 0 29ea7caceeSSam Clegg} 30ea7caceeSSam Clegg 31d423f0d2SSam Clegg; CHECK: Sections: 32d423f0d2SSam Clegg; CHECK-NEXT: - Type: TYPE 33d423f0d2SSam Clegg; CHECK-NEXT: Signatures: 34d423f0d2SSam Clegg; CHECK-NEXT: - Index: 0 35393d0f79SThomas Lively; CHECK-NEXT: ParamTypes: [] 36393d0f79SThomas Lively; CHECK-NEXT: ReturnTypes: 37393d0f79SThomas Lively; CHECK-NEXT: - I32 38d423f0d2SSam Clegg; CHECK-NEXT: - Type: IMPORT 39d423f0d2SSam Clegg; CHECK-NEXT: Imports: 40d423f0d2SSam Clegg; CHECK-NEXT: - Module: env 41d423f0d2SSam Clegg; CHECK-NEXT: Field: __linear_memory 42d423f0d2SSam Clegg; CHECK-NEXT: Kind: MEMORY 43d423f0d2SSam Clegg; CHECK-NEXT: Memory: 449ac5620cSAndy Wingo; CHECK-NEXT: Minimum: 0x1 45d423f0d2SSam Clegg; CHECK-NEXT: - Module: env 46d423f0d2SSam Clegg; CHECK-NEXT: Field: funcImport 47d423f0d2SSam Clegg; CHECK-NEXT: Kind: FUNCTION 48d423f0d2SSam Clegg; CHECK-NEXT: SigIndex: 0 49d423f0d2SSam Clegg; CHECK-NEXT: - Type: FUNCTION 50d423f0d2SSam Clegg; CHECK-NEXT: FunctionTypes: [ 0, 0, 0 ] 51fef8de66SThomas Lively; CHECK-NEXT: - Type: DATACOUNT 52fef8de66SThomas Lively; CHECK-NEXT: Count: 1 53ea7caceeSSam Clegg; CHECK-NEXT: - Type: CODE 54ea7caceeSSam Clegg; CHECK-NEXT: Relocations: 55d1152a26SSam Clegg; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB 56586320c0SNicholas Wilson; CHECK-NEXT: Index: 1 579aa78982SGeorgii Rymar; CHECK-NEXT: Offset: 0x4 58ea7caceeSSam Clegg; CHECK-NEXT: Functions: 59ea7caceeSSam Clegg; CHECK-NEXT: - Index: 1 60ea7caceeSSam Clegg; CHECK-NEXT: Locals: 61ea7caceeSSam Clegg; CHECK-NEXT: Body: 1080808080000B 62ea7caceeSSam Clegg; CHECK-NEXT: - Index: 2 63ea7caceeSSam Clegg; CHECK-NEXT: Locals: 64ea7caceeSSam Clegg; CHECK-NEXT: Body: 41000B 65ea7caceeSSam Clegg; CHECK-NEXT: - Index: 3 66ea7caceeSSam Clegg; CHECK-NEXT: Locals: 67ea7caceeSSam Clegg; CHECK-NEXT: Body: 41000B 68ea7caceeSSam Clegg; CHECK-NEXT: - Type: DATA 69ea7caceeSSam Clegg; CHECK-NEXT: Segments: 70ea7caceeSSam Clegg; CHECK-NEXT: - SectionOffset: 6 712e150409SThomas Lively; CHECK-NEXT: InitFlags: 0 72ea7caceeSSam Clegg; CHECK-NEXT: Offset: 73ea7caceeSSam Clegg; CHECK-NEXT: Opcode: I32_CONST 74ea7caceeSSam Clegg; CHECK-NEXT: Value: 0 75ea7caceeSSam Clegg; CHECK-NEXT: Content: '616263' 76ea7caceeSSam Clegg; CHECK-NEXT: - Type: CUSTOM 77ea7caceeSSam Clegg; CHECK-NEXT: Name: linking 7856c587adSSam Clegg; CHECK-NEXT: Version: 2 796c899ba6SSam Clegg; CHECK-NEXT: SymbolTable: 806c899ba6SSam Clegg; CHECK-NEXT: - Index: 0 816c899ba6SSam Clegg; CHECK-NEXT: Kind: FUNCTION 826c899ba6SSam Clegg; CHECK-NEXT: Name: callImport 836c899ba6SSam Clegg; CHECK-NEXT: Flags: [ ] 846c899ba6SSam Clegg; CHECK-NEXT: Function: 1 85586320c0SNicholas Wilson; CHECK-NEXT: - Index: 1 86586320c0SNicholas Wilson; CHECK-NEXT: Kind: FUNCTION 87586320c0SNicholas Wilson; CHECK-NEXT: Name: funcImport 88586320c0SNicholas Wilson; CHECK-NEXT: Flags: [ UNDEFINED ] 89586320c0SNicholas Wilson; CHECK-NEXT: Function: 0 906c899ba6SSam Clegg; CHECK-NEXT: - Index: 2 916c899ba6SSam Clegg; CHECK-NEXT: Kind: FUNCTION 926c899ba6SSam Clegg; CHECK-NEXT: Name: basicInlineFn 93ea7caceeSSam Clegg; CHECK-NEXT: Flags: [ BINDING_WEAK ] 946c899ba6SSam Clegg; CHECK-NEXT: Function: 2 956c899ba6SSam Clegg; CHECK-NEXT: - Index: 3 966c899ba6SSam Clegg; CHECK-NEXT: Kind: FUNCTION 976c899ba6SSam Clegg; CHECK-NEXT: Name: sharedFn 98ea7caceeSSam Clegg; CHECK-NEXT: Flags: [ BINDING_WEAK ] 996c899ba6SSam Clegg; CHECK-NEXT: Function: 3 1006c899ba6SSam Clegg; CHECK-NEXT: - Index: 4 1016c899ba6SSam Clegg; CHECK-NEXT: Kind: DATA 1026c899ba6SSam Clegg; CHECK-NEXT: Name: constantData 103ea7caceeSSam Clegg; CHECK-NEXT: Flags: [ BINDING_WEAK ] 1046c899ba6SSam Clegg; CHECK-NEXT: Segment: 0 1056c899ba6SSam Clegg; CHECK-NEXT: Size: 3 106ea7caceeSSam Clegg; CHECK-NEXT: SegmentInfo: 107ea7caceeSSam Clegg; CHECK-NEXT: - Index: 0 108ea7caceeSSam Clegg; CHECK-NEXT: Name: .rodata.constantData 10956c587adSSam Clegg; CHECK-NEXT: Alignment: 0 110ea7caceeSSam Clegg; CHECK-NEXT: Flags: [ ] 111ea7caceeSSam Clegg; CHECK-NEXT: Comdats: 1126c899ba6SSam Clegg; CHECK-NEXT: Name: basicInlineFn 113ea7caceeSSam Clegg; CHECK-NEXT: Entries: 114ea7caceeSSam Clegg; CHECK-NEXT: - Kind: FUNCTION 115ea7caceeSSam Clegg; CHECK-NEXT: Index: 2 1166c899ba6SSam Clegg; CHECK-NEXT: Name: sharedComdat 117ea7caceeSSam Clegg; CHECK-NEXT: Entries: 118ea7caceeSSam Clegg; CHECK-NEXT: - Kind: FUNCTION 119ea7caceeSSam Clegg; CHECK-NEXT: Index: 3 120ea7caceeSSam Clegg; CHECK-NEXT: - Kind: DATA 121ea7caceeSSam Clegg; CHECK-NEXT: Index: 0 122ea7caceeSSam Clegg; CHECK-NEXT: ... 1238d396acaSDerek Schuff 1248d396acaSDerek Schuff 1258d396acaSDerek Schuff; ASM: .section .text.basicInlineFn,"G",@,basicInlineFn,comdat 1268d396acaSDerek Schuff; ASM-NEXT: .weak basicInlineFn 1278d396acaSDerek Schuff; ASM-NEXT: .type basicInlineFn,@function 1288d396acaSDerek Schuff; ASM-NEXT: basicInlineFn: 1298d396acaSDerek Schuff 1308d396acaSDerek Schuff; ASM: .section .text.sharedFn,"G",@,sharedComdat,comdat 1318d396acaSDerek Schuff; ASM-NEXT: .weak sharedFn 1328d396acaSDerek Schuff; ASM-NEXT: .type sharedFn,@function 1338d396acaSDerek Schuff; ASM-NEXT: sharedFn: 1348d396acaSDerek Schuff 1358d396acaSDerek Schuff; ASM: .type constantData,@object 1368d396acaSDerek Schuff; ASM-NEXT: .section .rodata.constantData,"G",@,sharedComdat,comdat 1378d396acaSDerek Schuff; ASM-NEXT: .weak constantData 1388d396acaSDerek Schuff; ASM-NEXT: constantData: 139