Skip to content

Commit 783f102

Browse files
Add lit tests for MergeDataSegments
1 parent da149b3 commit 783f102

2 files changed

Lines changed: 971 additions & 0 deletions

File tree

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
2+
;; RUN: foreach %s %t wasm-opt -all --merge-data-segments -tnh -S -o - | filecheck %s
3+
4+
;; Guaranteed traps remain guaranteed under TNH.
5+
(module
6+
;; CHECK: (memory $0 0 0)
7+
(memory $0 0 0)
8+
;; CHECK: (memory $1 1 1)
9+
(memory $1 1 1)
10+
(data $0 (i32.const 0) "")
11+
;; CHECK: (data $1 (i32.const 1) "")
12+
(data $1 (i32.const 1) "")
13+
(data $2 (memory $1) (i32.const 0) "dead")
14+
)
15+
16+
(module
17+
;; CHECK: (memory $0 0)
18+
(memory $0 0)
19+
;; CHECK: (memory $1 1 1)
20+
(memory $1 1 1)
21+
(data $0 (i32.const 0) "")
22+
;; CHECK: (data $1 (i32.const 1) "")
23+
(data $1 (i32.const 1) "")
24+
(data $2 (memory $1) (i32.const 0) "dead")
25+
)
26+
27+
(module
28+
;; CHECK: (import "" "" (memory $0 0 0))
29+
(import "" "" (memory $0 0 0))
30+
;; CHECK: (memory $1 1 1)
31+
(memory $1 1 1)
32+
(data $0 (i32.const 0) "")
33+
;; CHECK: (data $1 (i32.const 1) "")
34+
(data $1 (i32.const 1) "")
35+
(data $2 (memory $1) (i32.const 0) "dead")
36+
)
37+
38+
;; Empty non-constant-offset segments are dropped under TNH.
39+
(module
40+
;; CHECK: (global $0 i32 (i32.const 0))
41+
(global $0 i32 (i32.const 0))
42+
;; CHECK: (memory $0 1 1)
43+
(memory $0 1 1)
44+
;; CHECK: (data $0 (i32.const 0) "foobar")
45+
(data $0 (i32.const 0) "foo")
46+
(data $1 (global.get $0) "")
47+
(data $2 (i32.const 3) "bar")
48+
)
49+
50+
;; Nonempty non-constant-offset segments trigger no bounds checks under TNH.
51+
(module
52+
;; CHECK: (global $0 i32 (i32.const 0))
53+
(global $0 i32 (i32.const 0))
54+
;; CHECK: (memory $0 1 1)
55+
(memory $0 1 1)
56+
;; CHECK: (memory $1 1 1)
57+
(memory $1 1 1)
58+
;; CHECK: (data $1 (memory $1) (global.get $0) "bar")
59+
60+
;; CHECK: (data $0 (i32.const 0) "foopez")
61+
(data $0 (i32.const 0) "foo")
62+
(data $1 (memory $1) (global.get $0) "bar")
63+
(data $2 (i32.const 3) "pez")
64+
)
65+
66+
;; Nonempty non-constant-offset segments still flush their own memory.
67+
(module
68+
;; CHECK: (global $0 i32 (i32.const 0))
69+
(global $0 i32 (i32.const 0))
70+
;; CHECK: (memory $0 1 1)
71+
(memory $0 1 1)
72+
;; CHECK: (data $0 (i32.const 0) "foo")
73+
(data $0 (i32.const 0) "foo")
74+
;; CHECK: (data $1 (global.get $0) "bar")
75+
(data $1 (global.get $0) "bar")
76+
;; CHECK: (data $2 (i32.const 3) "pez")
77+
(data $2 (i32.const 3) "pez")
78+
)
79+
80+
;; Nonempty non-constant-offset segments still invalidate flushed data.
81+
(module
82+
;; CHECK: (global $0 i32 (i32.const 0))
83+
(global $0 i32 (i32.const 0))
84+
;; CHECK: (memory $0 1 1)
85+
(memory $0 1 1)
86+
;; CHECK: (data $0 (i32.const 3) "bar")
87+
(data $0 (i32.const 3) "bar")
88+
;; CHECK: (data $1 (global.get $0) "\00")
89+
(data $1 (global.get $0) "\00")
90+
;; CHECK: (data $2 (i32.const 0) "foo")
91+
(data $2 (i32.const 0) "foo")
92+
;; CHECK: (data $3 (i32.const 6) "pez")
93+
(data $3 (i32.const 6) "pez")
94+
)
95+
96+
;; Bounds checks within memory limits are assumed to succeed under TNH.
97+
(module
98+
;; CHECK: (import "" "" (memory $0 0))
99+
(import "" "" (memory $0 0))
100+
;; CHECK: (memory $1 1 1)
101+
(memory $1 1 1)
102+
;; CHECK: (data $1 (i32.const 0) "fooQUX")
103+
104+
;; CHECK: (data $3 (i32.const 65536) "bar")
105+
106+
;; CHECK: (data $5 (i32.const 131072) "pez")
107+
108+
;; CHECK: (data $7 (i32.const 196608) "qux")
109+
110+
;; CHECK: (data $0 (memory $1) (i32.const 0) "post")
111+
(data $0 (memory $1) (i32.const 0) "pre")
112+
(data $1 (i32.const 0) "foo")
113+
(data $2 (i32.const 3) "FOO")
114+
(data $3 (i32.const 65536) "bar")
115+
(data $4 (i32.const 3) "BAR")
116+
(data $5 (i32.const 131072) "pez")
117+
(data $6 (i32.const 3) "PEZ")
118+
(data $7 (i32.const 196608) "qux")
119+
(data $8 (i32.const 3) "QUX")
120+
(data $9 (memory $1) (i32.const 0) "post")
121+
)
122+
123+
(module
124+
;; CHECK: (import "" "" (memory $0 0))
125+
(import "" "" (memory $0 0))
126+
;; CHECK: (memory $1 1 1)
127+
(memory $1 1 1)
128+
;; CHECK: (data $7 (i32.const 0) "fooFOO")
129+
130+
;; CHECK: (data $5 (i32.const 65536) "bar")
131+
132+
;; CHECK: (data $3 (i32.const 131072) "pez")
133+
134+
;; CHECK: (data $1 (i32.const 196608) "qux")
135+
136+
;; CHECK: (data $0 (memory $1) (i32.const 0) "post")
137+
(data $0 (memory $1) (i32.const 0) "pre")
138+
(data $1 (i32.const 196608) "qux")
139+
(data $2 (i32.const 3) "QUX")
140+
(data $3 (i32.const 131072) "pez")
141+
(data $4 (i32.const 3) "PEZ")
142+
(data $5 (i32.const 65536) "bar")
143+
(data $6 (i32.const 3) "BAR")
144+
(data $7 (i32.const 0) "foo")
145+
(data $8 (i32.const 3) "FOO")
146+
(data $9 (memory $1) (i32.const 0) "post")
147+
)

0 commit comments

Comments
 (0)