summaryrefslogtreecommitdiff
path: root/test/passes/simplify-locals.wast
diff options
context:
space:
mode:
Diffstat (limited to 'test/passes/simplify-locals.wast')
-rw-r--r--test/passes/simplify-locals.wast58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/passes/simplify-locals.wast b/test/passes/simplify-locals.wast
index 534bd8883..344e0934e 100644
--- a/test/passes/simplify-locals.wast
+++ b/test/passes/simplify-locals.wast
@@ -872,3 +872,61 @@
)
)
)
+(module
+ (memory 256 256 shared)
+ (type $FUNCSIG$v (func))
+ (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
+ (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
+ (type $4 (func (param i32)))
+ (type $5 (func (param i32) (result i32)))
+ (type $6 (func (param i32 i32 i32 i32 i32 i32)))
+ (func $nonatomics (result i32) ;; loads are reordered
+ (local $x i32)
+ (set_local $x (i32.load (i32.const 1024)))
+ (drop (i32.load (i32.const 1028)))
+ (get_local $x)
+ )
+ (func $nonatomic-growmem (result i32) ;; grow_memory is modeled as modifying memory
+ (local $x i32)
+ (set_local $x (i32.load (grow_memory (i32.const 1))))
+ (drop (i32.load (i32.const 1028)))
+ (get_local $x)
+ )
+ (func $atomics ;; atomic loads don't pass each other
+ (local $x i32)
+ (set_local $x (i32.atomic.load (i32.const 1024)))
+ (drop (i32.atomic.load (i32.const 1028)))
+ (drop (get_local $x))
+ )
+ (func $one-atomic ;; atomic loads don't pass other loads
+ (local $x i32)
+ (set_local $x (i32.load (i32.const 1024)))
+ (drop (i32.atomic.load (i32.const 1028)))
+ (drop (get_local $x))
+ )
+ (func $other-atomic ;; atomic loads don't pass other loads
+ (local $x i32)
+ (set_local $x (i32.atomic.load (i32.const 1024)))
+ (drop (i32.load (i32.const 1028)))
+ (drop (get_local $x))
+ )
+ (func $atomic-growmem (result i32) ;; grow_memory is modeled as modifying memory
+ (local $x i32)
+ (set_local $x (i32.load (grow_memory (i32.const 1))))
+ (drop (i32.atomic.load (i32.const 1028)))
+ (get_local $x)
+ )
+ (func $atomicrmw ;; atomic rmw don't pass loads
+ (local $x i32)
+ (set_local $x (i32.atomic.rmw.add (i32.const 1024) (i32.const 1)))
+ (drop (i32.atomic.load (i32.const 1028)))
+ (drop (get_local $x))
+ )
+ (func $atomic-cmpxchg ;; cmpxchg don't pass loads
+ (local $x i32)
+ (set_local $x (i32.atomic.rmw.cmpxchg (i32.const 1024) (i32.const 1) (i32.const 2)))
+ (drop (i32.atomic.load (i32.const 1028)))
+ (drop (get_local $x))
+ )
+) \ No newline at end of file