llvm/lld/test/wasm/data-segment-merging.ll

@a = hidden global [6 x i8] c"hello\00", align 1
@b = hidden global [8 x i8] c"goodbye\00", align 1
@c = hidden global [9 x i8] c"whatever\00", align 1
@d = hidden global i32 42, align 4

@e = private constant [9 x i8] c"constant\00", align 1
@f = private constant i8 43, align 4

; RUN: llc --mtriple=wasm32-unknown-unknown -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.passive.o
; RUN: llc --mtriple=wasm64-unknown-unknown -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.passive64.o
; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.o

; RUN: wasm-ld -no-gc-sections --no-entry -o %t.merged.wasm %t.o
; RUN: obj2yaml %t.merged.wasm | FileCheck %s --check-prefix=MERGE

; MERGE-LABEL: - Type:            DATA
; MERGE-NEXT:    Segments:
; MERGE-NEXT:      - SectionOffset:   7
; MERGE-NEXT:        InitFlags:       0
; MERGE-NEXT:        Offset:
; MERGE:             Content:         636F6E7374616E74000000002B
; MERGE-NEXT:      - SectionOffset:   26
; MERGE-NEXT:        InitFlags:       0
; MERGE-NEXT:        Offset:
; MERGE:             Content:         68656C6C6F00676F6F6462796500776861746576657200002A000000
; MERGE-NEXT:  - Type:            CUSTOM
; MERGE-NEXT:    Name:            name
; MERGE-NEXT:    FunctionNames:
; MERGE-NEXT:      - Index:           0
; MERGE-NEXT:        Name:            __wasm_call_ctors
; MERGE-NEXT:    GlobalNames:
; MERGE-NEXT:      - Index:           0
; MERGE-NEXT:        Name:            __stack_pointer
; MERGE-NEXT:    DataSegmentNames:
; MERGE-NEXT:      - Index:           0
; MERGE-NEXT:        Name:            .rodata

; RUN: wasm-ld -no-gc-sections --no-entry --no-merge-data-segments -o %t.separate.wasm %t.o
; RUN: obj2yaml %t.separate.wasm | FileCheck %s --check-prefix=SEPARATE

; SEPARATE-NOT:                  DATACOUNT
; SEPARATE-LABEL: - Type:            DATA
; SEPARATE-NEXT:    Segments:
; SEPARATE-NEXT:      - SectionOffset:   7
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         636F6E7374616E7400
; SEPARATE-NEXT:      - SectionOffset:   22
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         2B
; SEPARATE-NEXT:      - SectionOffset:   29
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         68656C6C6F00
; SEPARATE-NEXT:      - SectionOffset:   41
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         676F6F6462796500
; SEPARATE-NEXT:      - SectionOffset:   55
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         '776861746576657200'
; SEPARATE-NEXT:      - SectionOffset:   70
; SEPARATE-NEXT:        InitFlags:       0
; SEPARATE-NEXT:        Offset:
; SEPARATE:             Content:         2A000000
; SEPARATE-NEXT:  - Type:            CUSTOM
; SEPARATE-NEXT:    Name:            name
; SEPARATE-NEXT:    FunctionNames:
; SEPARATE-NEXT:      - Index:           0
; SEPARATE-NEXT:        Name:            __wasm_call_ctors
; SEPARATE-NEXT:    GlobalNames:
; SEPARATE-NEXT:      - Index:           0
; SEPARATE-NEXT:        Name:            __stack_pointer
; SEPARATE-NEXT:    DataSegmentNames:
; SEPARATE-NEXT:      - Index:           0
; SEPARATE-NEXT:        Name:            .rodata

; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 -o %t.merged.passive.wasm %t.passive.o
; RUN: obj2yaml %t.merged.passive.wasm | FileCheck %s --check-prefix=PASSIVE-MERGE
; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory --max-memory=131072 -o %t.merged.passive64.wasm %t.passive64.o
; RUN: obj2yaml %t.merged.passive64.wasm | FileCheck %s --check-prefix=PASSIVE-MERGE

; PASSIVE-MERGE-LABEL: - Type:            DATACOUNT
; PASSIVE-MERGE-NEXT:    Count:           2
; PASSIVE-MERGE-LABEL: - Type:            DATA
; PASSIVE-MERGE-NEXT:    Segments:
; PASSIVE-MERGE-NEXT:      - SectionOffset:   3
; PASSIVE-MERGE-NEXT:        InitFlags:       1
; PASSIVE-MERGE-NEXT:        Content:         636F6E7374616E74000000002B
; PASSIVE-MERGE-NEXT:      - SectionOffset:   18
; PASSIVE-MERGE-NEXT:        InitFlags:       1
; PASSIVE-MERGE-NEXT:        Content:         68656C6C6F00676F6F6462796500776861746576657200002A000000
; PASSIVE-MERGE-NEXT:  - Type:            CUSTOM
; PASSIVE-MERGE-NEXT:    Name:            name
; PASSIVE-MERGE-NEXT:    FunctionNames:
; PASSIVE-MERGE-NEXT:      - Index:           0
; PASSIVE-MERGE-NEXT:        Name:            __wasm_call_ctors
; PASSIVE-MERGE-NEXT:      - Index:           1
; PASSIVE-MERGE-NEXT:        Name:            __wasm_init_tls
; PASSIVE-MERGE-NEXT:      - Index:           2
; PASSIVE-MERGE-NEXT:        Name:            __wasm_init_memory

; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 --no-merge-data-segments -o %t.separate.passive.wasm %t.passive.o
; RUN: obj2yaml %t.separate.passive.wasm | FileCheck %s --check-prefix=PASSIVE-SEPARATE
; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory --max-memory=131072 --no-merge-data-segments -o %t.separate.passive64.wasm %t.passive64.o
; RUN: obj2yaml %t.separate.passive64.wasm | FileCheck %s --check-prefix=PASSIVE-SEPARATE

; PASSIVE-SEPARATE-LABEL: - Type:            DATACOUNT
; PASSIVE-SEPARATE-NEXT:    Count:           6
; PASSIVE-SEPARATE-LABEL: - Type:            DATA
; PASSIVE-SEPARATE-NEXT:    Segments:
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   3
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         636F6E7374616E7400
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   14
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         2B
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   17
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         68656C6C6F00
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   25
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         676F6F6462796500
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   35
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         '776861746576657200'
; PASSIVE-SEPARATE-NEXT:      - SectionOffset:   46
; PASSIVE-SEPARATE-NEXT:        InitFlags:       1
; PASSIVE-SEPARATE-NEXT:        Content:         2A000000
; PASSIVE-SEPARATE-NEXT:    - Type:            CUSTOM
; PASSIVE-SEPARATE-NEXT:      Name:            name
; PASSIVE-SEPARATE-NEXT:      FunctionNames:
; PASSIVE-SEPARATE-NEXT:        - Index:           0
; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_call_ctors
; PASSIVE-SEPARATE-NEXT:        - Index:           1
; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_init_tls
; PASSIVE-SEPARATE-NEXT:        - Index:           2
; PASSIVE-SEPARATE-NEXT:          Name:            __wasm_init_memory