|  | 
|  | 1 | +;; When reference types is disabled, we reuse the existing i64 table | 
|  | 2 | +;; RUN: wasm-split %s -g -o1 %t.1.wasm -o2 %t.2.wasm --export-prefix='%' --keep-funcs=foo --enable-memory64 -v 2>&1 | filecheck %s --check-prefix CHECK | 
|  | 3 | +;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY-NOREF | 
|  | 4 | +;; RUN: wasm-dis %t.2.wasm | filecheck %s --check-prefix SECONDARY-NOREF | 
|  | 5 | +;; Check whether the split files conform to memory64 | 
|  | 6 | +;; RUN: wasm-opt --enable-memory64 %t.1.wasm | 
|  | 7 | +;; RUN: wasm-opt --enable-memory64 %t.2.wasm | 
|  | 8 | + | 
|  | 9 | +;; When reference types is enabled, we create a new table | 
|  | 10 | +;; RUN: wasm-split %s -g -o1 %t.1.wasm -o2 %t.2.wasm --export-prefix='%' --keep-funcs=foo --enable-memory64 --enable-reference-types -v 2>&1 | filecheck %s --check-prefix CHECK | 
|  | 11 | +;; RUN: wasm-dis %t.1.wasm | filecheck %s --check-prefix PRIMARY-REF | 
|  | 12 | +;; RUN: wasm-dis %t.2.wasm | filecheck %s --check-prefix SECONDARY-REF | 
|  | 13 | +;; Check whether the split files conform to memory64 | 
|  | 14 | +;; RUN: wasm-opt --enable-memory64 --enable-reference-types %t.1.wasm | 
|  | 15 | +;; RUN: wasm-opt --enable-memory64 --enable-reference-types %t.2.wasm | 
|  | 16 | + | 
|  | 17 | +;; CHECK: Keeping functions: foo{{$}} | 
|  | 18 | +;; CHECK: Splitting out functions: bar{{$}} | 
|  | 19 | + | 
|  | 20 | +;; PRIMARY-NOREF:      (module | 
|  | 21 | +;; PRIMARY-NOREF-NEXT:  (type $0 (func (param i32) (result i32))) | 
|  | 22 | +;; PRIMARY-NOREF-NEXT:  (import "env" "g" (global $g i64)) | 
|  | 23 | +;; PRIMARY-NOREF-NEXT:  (import "placeholder" "1" (func $placeholder_1 (param i32) (result i32))) | 
|  | 24 | +;; PRIMARY-NOREF-NEXT:  (table $table i64 2 2 funcref) | 
|  | 25 | +;; PRIMARY-NOREF-NEXT:  (elem $0 (global.get $g) $foo $placeholder_1) | 
|  | 26 | +;; PRIMARY-NOREF-NEXT:  (export "%foo" (func $foo)) | 
|  | 27 | +;; PRIMARY-NOREF-NEXT:  (export "%table" (table $table)) | 
|  | 28 | +;; PRIMARY-NOREF-NEXT:  (export "%global" (global $g)) | 
|  | 29 | +;; PRIMARY-NOREF-NEXT:  (func $foo (param $0 i32) (result i32) | 
|  | 30 | +;; PRIMARY-NOREF-NEXT:   (call_indirect (type $0) | 
|  | 31 | +;; PRIMARY-NOREF-NEXT:    (i32.const 0) | 
|  | 32 | +;; PRIMARY-NOREF-NEXT:    (i64.add | 
|  | 33 | +;; PRIMARY-NOREF-NEXT:     (global.get $g) | 
|  | 34 | +;; PRIMARY-NOREF-NEXT:     (i64.const 1) | 
|  | 35 | +;; PRIMARY-NOREF-NEXT:    ) | 
|  | 36 | +;; PRIMARY-NOREF-NEXT:   ) | 
|  | 37 | +;; PRIMARY-NOREF-NEXT:  ) | 
|  | 38 | +;; PRIMARY-NOREF-NEXT: ) | 
|  | 39 | + | 
|  | 40 | +;; SECONDARY-NOREF:      (module | 
|  | 41 | +;; SECONDARY-NOREF-NEXT:  (type $0 (func (param i32) (result i32))) | 
|  | 42 | +;; SECONDARY-NOREF-NEXT:  (import "primary" "%table" (table $table i64 2 2 funcref)) | 
|  | 43 | +;; SECONDARY-NOREF-NEXT:  (import "primary" "%global" (global $g i64)) | 
|  | 44 | +;; SECONDARY-NOREF-NEXT:  (import "primary" "%foo" (func $foo (param i32) (result i32))) | 
|  | 45 | +;; SECONDARY-NOREF-NEXT:  (elem $0 (global.get $g) $foo $bar) | 
|  | 46 | +;; SECONDARY-NOREF-NEXT:  (func $bar (param $0 i32) (result i32) | 
|  | 47 | +;; SECONDARY-NOREF-NEXT:   (call $foo | 
|  | 48 | +;; SECONDARY-NOREF-NEXT:    (i32.const 1) | 
|  | 49 | +;; SECONDARY-NOREF-NEXT:   ) | 
|  | 50 | +;; SECONDARY-NOREF-NEXT:  ) | 
|  | 51 | +;; SECONDARY-NOREF-NEXT: ) | 
|  | 52 | + | 
|  | 53 | +;; PRIMARY-REF:      (module | 
|  | 54 | +;; PRIMARY-REF-NEXT:  (type $0 (func (param i32) (result i32))) | 
|  | 55 | +;; PRIMARY-REF-NEXT:  (import "env" "g" (global $g i64)) | 
|  | 56 | +;; PRIMARY-REF-NEXT:  (import "placeholder" "0" (func $placeholder_0 (param i32) (result i32))) | 
|  | 57 | +;; PRIMARY-REF-NEXT:  (table $table i64 1 1 funcref) | 
|  | 58 | +;; PRIMARY-REF-NEXT:  (table $1 1 funcref) | 
|  | 59 | +;; PRIMARY-REF-NEXT:  (elem $0 (table $table) (global.get $g) func $foo) | 
|  | 60 | +;; PRIMARY-REF-NEXT:  (elem $1 (table $1) (i32.const 0) func $placeholder_0) | 
|  | 61 | +;; PRIMARY-REF-NEXT:  (export "%foo" (func $foo)) | 
|  | 62 | +;; PRIMARY-REF-NEXT:  (export "%table" (table $table)) | 
|  | 63 | +;; PRIMARY-REF-NEXT:  (export "%table_2" (table $1)) | 
|  | 64 | +;; PRIMARY-REF-NEXT:  (export "%global" (global $g)) | 
|  | 65 | +;; PRIMARY-REF-NEXT:  (func $foo (param $0 i32) (result i32) | 
|  | 66 | +;; PRIMARY-REF-NEXT:   (call_indirect $1 (type $0) | 
|  | 67 | +;; PRIMARY-REF-NEXT:    (i32.const 0) | 
|  | 68 | +;; PRIMARY-REF-NEXT:    (i32.const 0) | 
|  | 69 | +;; PRIMARY-REF-NEXT:   ) | 
|  | 70 | +;; PRIMARY-REF-NEXT:  ) | 
|  | 71 | +;; PRIMARY-REF-NEXT: ) | 
|  | 72 | + | 
|  | 73 | +;; SECONDARY-REF:      (module | 
|  | 74 | +;; SECONDARY-REF-NEXT:  (type $0 (func (param i32) (result i32))) | 
|  | 75 | +;; SECONDARY-REF-NEXT:  (import "primary" "%table_2" (table $timport$0 1 funcref)) | 
|  | 76 | +;; SECONDARY-REF-NEXT:  (import "primary" "%foo" (func $foo (param i32) (result i32))) | 
|  | 77 | +;; SECONDARY-REF-NEXT:  (elem $0 (i32.const 0) $bar) | 
|  | 78 | +;; SECONDARY-REF-NEXT:  (func $bar (param $0 i32) (result i32) | 
|  | 79 | +;; SECONDARY-REF-NEXT:   (call $foo | 
|  | 80 | +;; SECONDARY-REF-NEXT:    (i32.const 1) | 
|  | 81 | +;; SECONDARY-REF-NEXT:   ) | 
|  | 82 | +;; SECONDARY-REF-NEXT:  ) | 
|  | 83 | +;; SECONDARY-REF-NEXT: ) | 
|  | 84 | + | 
|  | 85 | +(module | 
|  | 86 | + (global $g (import "env" "g") i64) | 
|  | 87 | + (table $table i64 1 1 funcref) | 
|  | 88 | + (elem (global.get $g) $foo) | 
|  | 89 | + (func $foo (param i32) (result i32) | 
|  | 90 | +  (call $bar (i32.const 0)) | 
|  | 91 | + ) | 
|  | 92 | + (func $bar (param i32) (result i32) | 
|  | 93 | +  (call $foo (i32.const 1)) | 
|  | 94 | + ) | 
|  | 95 | +) | 
0 commit comments