brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.7 KiB · 237f428 Raw
278 lines · plain
1; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.atomics.o -mattr=+atomics,-bulk-memory2; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.bulk-mem.o -mattr=+bulk-memory3; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o %t.bulk-mem64.o -mattr=+bulk-memory4; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.atomics.bulk-mem.o -mattr=+atomics,+bulk-memory5; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o %t.atomics.bulk-mem64.o -mattr=+atomics,+bulk-memory6; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.atomics.bulk-mem.pic.o -relocation-model=pic -mattr=+atomics,+bulk-memory,+mutable-globals7; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o %t.atomics.bulk-mem.pic-mem64.o -relocation-model=pic -mattr=+atomics,+bulk-memory,+mutable-globals8 9;; atomics, shared memory => error10; RUN: not wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.o -o %t.atomics.wasm 2>&1 | FileCheck %s --check-prefix ERROR11 12;; bulk memory, unshared memory => active segments13; RUN: wasm-ld -no-gc-sections --no-entry %t.bulk-mem.o -o %t.bulk-mem.wasm14; RUN: obj2yaml %t.bulk-mem.wasm | FileCheck %s --check-prefixes ACTIVE,ACTIVE3215 16;; bulk memory, unshared memory, wasm64 => active segments17; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry %t.bulk-mem64.o -o %t.bulk-mem64.wasm18; RUN: obj2yaml %t.bulk-mem64.wasm | FileCheck %s --check-prefixes ACTIVE,ACTIVE6419 20;; In -pie mode segments are combined into one active segment.21; RUN: wasm-ld --experimental-pic --import-memory -pie -no-gc-sections --no-entry %t.atomics.bulk-mem.pic.o -o %t.pic.wasm22; RUN: obj2yaml %t.pic.wasm | FileCheck %s --check-prefixes ACTIVE-PIC23; RUN: llvm-objdump --disassemble-symbols=__wasm_call_ctors,__wasm_init_memory --no-show-raw-insn --no-leading-addr %t.pic.wasm | FileCheck %s --check-prefixes PIC-NON-SHARED-DIS24 25;; atomics, bulk memory, shared memory => passive segments26; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.bulk-mem.o -o %t.atomics.bulk-mem.wasm27; RUN: obj2yaml %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefix PASSIVE28; RUN: llvm-objdump --disassemble-symbols=__wasm_call_ctors,__wasm_init_memory --no-show-raw-insn --no-leading-addr %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefixes DIS,NOPIC-DIS -DPTR=i3229 30;; atomics, bulk memory, shared memory, wasm64 => passive segments31; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.bulk-mem64.o -o %t.atomics.bulk-mem64.wasm32; RUN: obj2yaml %t.atomics.bulk-mem64.wasm | FileCheck %s --check-prefix PASSIVE33; RUN: llvm-objdump --disassemble-symbols=__wasm_call_ctors,__wasm_init_memory --no-show-raw-insn --no-leading-addr %t.atomics.bulk-mem64.wasm | FileCheck %s --check-prefixes DIS,NOPIC-DIS -DPTR=i6434 35;; Also test in combination with PIC/pie36; RUN: wasm-ld --experimental-pic -pie -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.bulk-mem.pic.o -o %t.shared.pic.wasm37; RUN: obj2yaml %t.shared.pic.wasm | FileCheck %s --check-prefixes PASSIVE-PIC,PASSIVE32-PIC38; RUN: llvm-objdump --disassemble-symbols=__wasm_call_ctors,__wasm_init_memory --no-show-raw-insn --no-leading-addr %t.shared.pic.wasm | FileCheck %s --check-prefixes DIS,PIC-DIS -DPTR=i3239 40;; Also test in combination with PIC/pie + wasm6441; RUN: wasm-ld -mwasm64 --experimental-pic -pie -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.bulk-mem.pic-mem64.o -o %t.pic-mem64.wasm42; RUN: obj2yaml %t.pic-mem64.wasm | FileCheck %s --check-prefixes PASSIVE-PIC,PASSIVE64-PIC43; RUN: llvm-objdump --disassemble-symbols=__wasm_call_ctors,__wasm_init_memory --no-show-raw-insn --no-leading-addr %t.pic-mem64.wasm | FileCheck %s --check-prefixes DIS,PIC-DIS -DPTR=i6444 45@a = hidden global [6 x i8] c"hello\00", align 146@b = hidden global [8 x i8] c"goodbye\00", align 147@c = hidden global [10000 x i8] zeroinitializer, align 148@d = hidden global i32 42, align 449 50@e = private constant [9 x i8] c"constant\00", align 151@f = private constant i8 43, align 452 53@g = thread_local global i32 99, align 454 55; ERROR: 'bulk-memory' feature must be used in order to use shared memory56 57; ACTIVE-LABEL: - Type:            CODE58; ACTIVE-NEXT:    Functions:59; ACTIVE-NEXT:      - Index:           060; ACTIVE-NEXT:        Locals:          []61; ACTIVE-NEXT:        Body:            0B62; ACTIVE-NEXT:  - Type:            DATA63; ACTIVE-NEXT:    Segments:64; ACTIVE-NEXT:      - SectionOffset:   865; ACTIVE-NEXT:        InitFlags:       066; ACTIVE-NEXT:        Offset:67; ACTIVE32-NEXT:        Opcode:          I32_CONST68; ACTIVE64-NEXT:        Opcode:          I64_CONST69; ACTIVE-NEXT:          Value:           6553670; ACTIVE-NEXT:        Content:         636F6E7374616E74000000002B71; ACTIVE-NEXT:      - SectionOffset:   2872; ACTIVE-NEXT:        InitFlags:       073; ACTIVE-NEXT:        Offset:74; ACTIVE32-NEXT:        Opcode:          I32_CONST75; ACTIVE64-NEXT:        Opcode:          I64_CONST76; ACTIVE-NEXT:          Value:           6555277; ACTIVE-NEXT:        Content:         68656C6C6F00676F6F646279650000002A0000006300000078; ACTIVE-NEXT:  - Type:            CUSTOM79; ACTIVE-NEXT:    Name:            name80; ACTIVE-NEXT:    FunctionNames:81; ACTIVE-NEXT:      - Index:           082; ACTIVE-NEXT:        Name:            __wasm_call_ctors83 84;; In ACTIVE-PIC mode the memory is imported which means all data segments85;; (except BSS) are combined in the single one.86;; BSS is not included here, and instead initialized using `memory.init` in87;; `__wasm_init_memory`88 89; ACTIVE-PIC:  - Type:            DATA90; ACTIVE-PIC-NEXT:    Segments:91; ACTIVE-PIC-NEXT:      - SectionOffset:   692; ACTIVE-PIC-NEXT:        InitFlags:       093; ACTIVE-PIC-NEXT:        Offset:94; ACTIVE-PIC-NEXT:          Opcode:          GLOBAL_GET95; ACTIVE-PIC-NEXT:          Index:           196; ACTIVE-PIC-NEXT:        Content:         63000000636F6E7374616E74000000002B00000068656C6C6F00676F6F646279650000002A00000097 98; PASSIVE-LABEL: - Type:            START99; PASSIVE-NEXT:    StartFunction:   2100; PASSIVE-LABEL: - Type:            DATACOUNT101; PASSIVE-NEXT:    Count:           3102; PASSIVE-LABEL: - Type:            CODE103; PASSIVE-NEXT:    Functions:104; PASSIVE-NEXT:      - Index:           0105; PASSIVE-NEXT:        Locals:          []106; PASSIVE-NEXT:        Body:            0B107; PASSIVE-NEXT:      - Index:           1108; PASSIVE-NEXT:        Locals:          []109; PASSIVE-NEXT:        Body:            {{.*}}110; PASSIVE-NEXT:      - Index:           2111; PASSIVE-NEXT:        Locals:          []112; PASSIVE-NEXT:        Body:            {{.*}}113; PASSIVE-NEXT:  - Type:            DATA114; PASSIVE-NEXT:    Segments:115; PASSIVE-NEXT:      - SectionOffset:   3116; PASSIVE-NEXT:        InitFlags:       1117; PASSIVE-NEXT:        Content:         '63000000'118; PASSIVE-NEXT:      - SectionOffset:   9119; PASSIVE-NEXT:        InitFlags:       1120; PASSIVE-NEXT:        Content:         636F6E7374616E74000000002B121; PASSIVE-NEXT:      - SectionOffset:   24122; PASSIVE-NEXT:        InitFlags:       1123; PASSIVE-NEXT:        Content:         68656C6C6F00676F6F646279650000002A000000124; PASSIVE-NEXT:  - Type:            CUSTOM125; PASSIVE-NEXT:    Name:            name126; PASSIVE-NEXT:    FunctionNames:127; PASSIVE-NEXT:      - Index:           0128; PASSIVE-NEXT:        Name:            __wasm_call_ctors129; PASSIVE-NEXT:      - Index:           1130; PASSIVE-NEXT:        Name:            __wasm_init_tls131; PASSIVE-NEXT:      - Index:           2132; PASSIVE-NEXT:        Name:            __wasm_init_memory133 134;      PASSIVE-PIC:  - Type:            START135; PASSIVE-PIC-NEXT:    StartFunction:   2136; PASSIVE-PIC-NEXT:  - Type:            DATACOUNT137; PASSIVE-PIC-NEXT:    Count:           3138; PASSIVE-PIC-NEXT:  - Type:            CODE139; PASSIVE-PIC-NEXT:    Functions:140; PASSIVE-PIC-NEXT:      - Index:           0141; PASSIVE-PIC-NEXT:        Locals:          []142; PASSIVE-PIC-NEXT:        Body:            0B143; PASSIVE-PIC-NEXT:      - Index:           1144; PASSIVE-PIC-NEXT:        Locals:          []145; PASSIVE-PIC-NEXT:        Body:            {{.*}}146; PASSIVE-PIC-NEXT:      - Index:           2147; PASSIVE-PIC-NEXT:        Locals:148; PASSIVE32-PIC-NEXT:          - Type:            I32149; PASSIVE64-PIC-NEXT:          - Type:            I64150; PASSIVE-PIC-NEXT:              Count:           2151; PASSIVE-PIC-NEXT:        Body:            {{.*}}152; PASSIVE-PIC-NEXT:  - Type:            DATA153; PASSIVE-PIC-NEXT:    Segments:154; PASSIVE-PIC-NEXT:      - SectionOffset:   3155; PASSIVE-PIC-NEXT:        InitFlags:       1156; PASSIVE-PIC-NEXT:        Content:         '63000000'157; PASSIVE-PIC-NEXT:      - SectionOffset:   9158; PASSIVE-PIC-NEXT:        InitFlags:       1159; PASSIVE-PIC-NEXT:        Content:         636F6E7374616E74000000002B160; PASSIVE-PIC-NEXT:      - SectionOffset:   24161; PASSIVE-PIC-NEXT:        InitFlags:       1162; PASSIVE-PIC-NEXT:        Content:         68656C6C6F00676F6F646279650000002A000000163; PASSIVE-PIC-NEXT:  - Type:            CUSTOM164; PASSIVE-PIC-NEXT:    Name:            name165; PASSIVE-PIC-NEXT:    FunctionNames:166; PASSIVE-PIC-NEXT:      - Index:           0167; PASSIVE-PIC-NEXT:        Name:            __wasm_call_ctors168; PASSIVE-PIC-NEXT:      - Index:           1169; PASSIVE-PIC-NEXT:        Name:            __wasm_init_tls170; PASSIVE-PIC-NEXT:      - Index:           2171; PASSIVE-PIC-NEXT:        Name:            __wasm_init_memory172 173;; For the non-shared PIC case the __wasm_init_memory only deals with BSS since174;; all other segments are active175; PIC-NON-SHARED-DIS:       <__wasm_init_memory>:176; PIC-NON-SHARED-DIS-EMPTY:177; PIC-NON-SHARED-DIS-NEXT:  i32.const	40178; PIC-NON-SHARED-DIS-NEXT:  global.get	1179; PIC-NON-SHARED-DIS-NEXT:  i32.add 180; PIC-NON-SHARED-DIS-NEXT:  i32.const	0181; PIC-NON-SHARED-DIS-NEXT:  i32.const	10000182; PIC-NON-SHARED-DIS-NEXT:  memory.fill	0183; PIC-NON-SHARED-DIS-NEXT:  end184 185;; no data relocations.186; DIS-LABEL:       <__wasm_call_ctors>:187; DIS-EMPTY:188; DIS-NEXT:        end189 190; PIC-DIS-EMPTY:191 192; DIS-LABEL:       <__wasm_init_memory>:193 194; PIC-DIS:           .local [[PTR]]195; PIC-DIS-NEXT:      global.get      1196; PIC-DIS-NEXT:      [[PTR]].const   10040197; PIC-DIS-NEXT:      [[PTR]].add198; PIC-DIS-NEXT:      local.set       0199 200; DIS:               block201; DIS-NEXT:           block202; DIS-NEXT:            block203 204; NOPIC-DIS-NEXT:       [[PTR]].const   75576205; PIC-DIS-NEXT:         local.get       0206 207; DIS-NEXT:             i32.const       0208; DIS-NEXT:             i32.const       1209; DIS-NEXT:             i32.atomic.rmw.cmpxchg  0210; DIS-NEXT:             br_table        {0, 1, 2}      # 1:     down to label1211; DIS-NEXT:                                            # 2:     down to label0212; DIS-NEXT:            end213 214; NOPIC-DIS-NEXT:      [[PTR]].const   65536215; NOPIC-DIS-NEXT:      [[PTR]].const   65536216; NOPIC-DIS-NEXT:      global.set      1217; PIC-DIS-NEXT:        [[PTR]].const   0218; PIC-DIS-NEXT:        global.get      1219; PIC-DIS-NEXT:        [[PTR]].add220; PIC-DIS-NEXT:        local.tee       1221; PIC-DIS-NEXT:        global.set      {{\d*}}222; PIC-DIS-NEXT:        local.get       1223; DIS-NEXT:            i32.const       0224; DIS-NEXT:            i32.const       4225; DIS-NEXT:            memory.init  0, 0226 227; NOPIC-DIS-NEXT:      [[PTR]].const   65540228; PIC-DIS-NEXT:        [[PTR]].const   4229; PIC-DIS-NEXT:        global.get      1230; PIC-DIS-NEXT:        [[PTR]].add231 232; DIS-NEXT:            i32.const       0233; DIS-NEXT:            i32.const       13234; DIS-NEXT:            memory.init     1, 0235 236; NOPIC-DIS-NEXT:      [[PTR]].const   65556237; PIC-DIS-NEXT:        [[PTR]].const   20238; PIC-DIS-NEXT:        global.get      1239; PIC-DIS-NEXT:        [[PTR]].add240 241; DIS-NEXT:            i32.const       0242; DIS-NEXT:            i32.const       20243; DIS-NEXT:            memory.init     2, 0244; NOPIC-DIS-NEXT:      [[PTR]].const   65576245; PIC-DIS-NEXT:        [[PTR]].const   40246; PIC-DIS-NEXT:        global.get      1247; PIC-DIS-NEXT:        [[PTR]].add248; DIS-NEXT:            i32.const       0249; DIS-NEXT:            [[PTR]].const   10000250; DIS-NEXT:            memory.fill     0251 252; NOPIC-DIS-NEXT:      [[PTR]].const   75576253; PIC-DIS-NEXT:        local.get       0254 255; DIS-NEXT:            i32.const       2256; DIS-NEXT:            i32.atomic.store        0257 258; NOPIC-DIS-NEXT:      [[PTR]].const   75576259; PIC-DIS-NEXT:        local.get       0260 261; DIS-NEXT:            i32.const       -1262; DIS-NEXT:            memory.atomic.notify    0263; DIS-NEXT:            drop264; DIS-NEXT:            br              1               # 1:     down to label1265; DIS-NEXT:           end266 267; NOPIC-DIS-NEXT:     [[PTR]].const   75576268; PIC-DIS-NEXT:       local.get       0269 270; DIS-NEXT:           i32.const       1271; DIS-NEXT:           i64.const       -1272; DIS-NEXT:           memory.atomic.wait32    0273; DIS-NEXT:           drop274; DIS-NEXT:          end275; DIS-NEXT:          data.drop       1276; DIS-NEXT:          data.drop       2277; DIS-NEXT:         end278