summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@gmail.com>2017-04-29 13:17:31 -0700
committerAlon Zakai <alonzakai@gmail.com>2017-04-29 13:17:31 -0700
commit5bd7b2869f9ec664fd3e8746c1d469a04566a548 (patch)
tree23b99e4e6b0677f1dec004a24b07996d09ad9e06 /test
parenta88d9b83a4629f4bf4c3b210b07d11d2396c594d (diff)
downloadbinaryen-5bd7b2869f9ec664fd3e8746c1d469a04566a548.tar.gz
binaryen-5bd7b2869f9ec664fd3e8746c1d469a04566a548.tar.bz2
binaryen-5bd7b2869f9ec664fd3e8746c1d469a04566a548.zip
Add pass to instrument loads / stores. (#959)
* Add pass to instrument loads / stores * Simplify instrumentation. * Document.
Diffstat (limited to 'test')
-rw-r--r--test/passes/instrument-memory.txt453
-rw-r--r--test/passes/instrument-memory.wast58
2 files changed, 511 insertions, 0 deletions
diff --git a/test/passes/instrument-memory.txt b/test/passes/instrument-memory.txt
new file mode 100644
index 000000000..dd2e876d0
--- /dev/null
+++ b/test/passes/instrument-memory.txt
@@ -0,0 +1,453 @@
+(module
+ (type $1 (func))
+ (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
+ (import "instrument" "load" (func $load (param i32 i32 i32 i32) (result i32)))
+ (import "instrument" "store" (func $store (param i32 i32 i32 i32) (result i32)))
+ (memory $0 256 256)
+ (func $A (type $1)
+ (drop
+ (i32.load8_s
+ (call $load
+ (i32.const 0)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load8_u
+ (call $load
+ (i32.const 1)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load16_s
+ (call $load
+ (i32.const 2)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load16_u
+ (call $load
+ (i32.const 3)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load
+ (call $load
+ (i32.const 4)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load8_s
+ (call $load
+ (i32.const 5)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load8_u
+ (call $load
+ (i32.const 6)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load16_s
+ (call $load
+ (i32.const 7)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load16_u
+ (call $load
+ (i32.const 8)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load32_s
+ (call $load
+ (i32.const 9)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load32_u
+ (call $load
+ (i32.const 10)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load
+ (call $load
+ (i32.const 11)
+ (i32.const 8)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (f32.load
+ (call $load
+ (i32.const 12)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (f64.load
+ (call $load
+ (i32.const 13)
+ (i32.const 8)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load8_s offset=1
+ (call $load
+ (i32.const 14)
+ (i32.const 1)
+ (i32.const 1)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load8_u offset=2
+ (call $load
+ (i32.const 15)
+ (i32.const 1)
+ (i32.const 2)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load16_s offset=3 align=1
+ (call $load
+ (i32.const 16)
+ (i32.const 2)
+ (i32.const 3)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load16_u offset=4 align=1
+ (call $load
+ (i32.const 17)
+ (i32.const 2)
+ (i32.const 4)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.load offset=5 align=2
+ (call $load
+ (i32.const 18)
+ (i32.const 4)
+ (i32.const 5)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load8_s offset=6
+ (call $load
+ (i32.const 19)
+ (i32.const 1)
+ (i32.const 6)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load8_u offset=7
+ (call $load
+ (i32.const 20)
+ (i32.const 1)
+ (i32.const 7)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load16_s offset=8 align=1
+ (call $load
+ (i32.const 21)
+ (i32.const 2)
+ (i32.const 8)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load16_u offset=9 align=1
+ (call $load
+ (i32.const 22)
+ (i32.const 2)
+ (i32.const 9)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load32_s offset=10 align=2
+ (call $load
+ (i32.const 23)
+ (i32.const 4)
+ (i32.const 10)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load32_u offset=11 align=2
+ (call $load
+ (i32.const 24)
+ (i32.const 4)
+ (i32.const 11)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i64.load offset=12 align=2
+ (call $load
+ (i32.const 25)
+ (i32.const 8)
+ (i32.const 12)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (f32.load offset=13 align=2
+ (call $load
+ (i32.const 26)
+ (i32.const 4)
+ (i32.const 13)
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (f64.load offset=14 align=2
+ (call $load
+ (i32.const 27)
+ (i32.const 8)
+ (i32.const 14)
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (func $B (type $1)
+ (i32.store8
+ (call $store
+ (i32.const 28)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i32.const 1)
+ )
+ (i32.store16
+ (call $store
+ (i32.const 29)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i32.const 2)
+ )
+ (i32.store
+ (call $store
+ (i32.const 30)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i32.const 3)
+ )
+ (i64.store8
+ (call $store
+ (i32.const 31)
+ (i32.const 1)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i64.const 4)
+ )
+ (i64.store16
+ (call $store
+ (i32.const 32)
+ (i32.const 2)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i64.const 5)
+ )
+ (i64.store32
+ (call $store
+ (i32.const 33)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i64.const 6)
+ )
+ (i64.store
+ (call $store
+ (i32.const 34)
+ (i32.const 8)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i64.const 7)
+ )
+ (f32.store
+ (call $store
+ (i32.const 35)
+ (i32.const 4)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (f32.const 8)
+ )
+ (f64.store
+ (call $store
+ (i32.const 36)
+ (i32.const 8)
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (f64.const 9)
+ )
+ (i32.store8 offset=1
+ (call $store
+ (i32.const 37)
+ (i32.const 1)
+ (i32.const 1)
+ (i32.const 0)
+ )
+ (i32.const 1)
+ )
+ (i32.store16 offset=2 align=1
+ (call $store
+ (i32.const 38)
+ (i32.const 2)
+ (i32.const 2)
+ (i32.const 0)
+ )
+ (i32.const 2)
+ )
+ (i32.store offset=3 align=2
+ (call $store
+ (i32.const 39)
+ (i32.const 4)
+ (i32.const 3)
+ (i32.const 0)
+ )
+ (i32.const 3)
+ )
+ (i64.store8 offset=4
+ (call $store
+ (i32.const 40)
+ (i32.const 1)
+ (i32.const 4)
+ (i32.const 0)
+ )
+ (i64.const 4)
+ )
+ (i64.store16 offset=5
+ (call $store
+ (i32.const 41)
+ (i32.const 2)
+ (i32.const 5)
+ (i32.const 0)
+ )
+ (i64.const 5)
+ )
+ (i64.store32 offset=6 align=2
+ (call $store
+ (i32.const 42)
+ (i32.const 4)
+ (i32.const 6)
+ (i32.const 0)
+ )
+ (i64.const 6)
+ )
+ (i64.store offset=7 align=2
+ (call $store
+ (i32.const 43)
+ (i32.const 8)
+ (i32.const 7)
+ (i32.const 0)
+ )
+ (i64.const 7)
+ )
+ (f32.store offset=8 align=2
+ (call $store
+ (i32.const 44)
+ (i32.const 4)
+ (i32.const 8)
+ (i32.const 0)
+ )
+ (f32.const 8)
+ )
+ (f64.store offset=9 align=2
+ (call $store
+ (i32.const 45)
+ (i32.const 8)
+ (i32.const 9)
+ (i32.const 0)
+ )
+ (f64.const 9)
+ )
+ )
+)
diff --git a/test/passes/instrument-memory.wast b/test/passes/instrument-memory.wast
new file mode 100644
index 000000000..7f92de9cd
--- /dev/null
+++ b/test/passes/instrument-memory.wast
@@ -0,0 +1,58 @@
+(module
+ (memory 256 256)
+ (type $1 (func))
+ (func $A (type $1)
+ (drop (i32.load8_s (i32.const 0)))
+ (drop (i32.load8_u (i32.const 0)))
+ (drop (i32.load16_s (i32.const 0)))
+ (drop (i32.load16_u (i32.const 0)))
+ (drop (i32.load (i32.const 0)))
+ (drop (i64.load8_s (i32.const 0)))
+ (drop (i64.load8_u (i32.const 0)))
+ (drop (i64.load16_s (i32.const 0)))
+ (drop (i64.load16_u (i32.const 0)))
+ (drop (i64.load32_s (i32.const 0)))
+ (drop (i64.load32_u (i32.const 0)))
+ (drop (i64.load (i32.const 0)))
+ (drop (f32.load (i32.const 0)))
+ (drop (f64.load (i32.const 0)))
+
+ (drop (i32.load8_s align=1 offset=1 (i32.const 0)))
+ (drop (i32.load8_u align=1 offset=2 (i32.const 0)))
+ (drop (i32.load16_s align=1 offset=3 (i32.const 0)))
+ (drop (i32.load16_u align=1 offset=4 (i32.const 0)))
+ (drop (i32.load align=2 offset=5 (i32.const 0)))
+ (drop (i64.load8_s align=1 offset=6 (i32.const 0)))
+ (drop (i64.load8_u align=1 offset=7 (i32.const 0)))
+ (drop (i64.load16_s align=1 offset=8 (i32.const 0)))
+ (drop (i64.load16_u align=1 offset=9 (i32.const 0)))
+ (drop (i64.load32_s align=2 offset=10 (i32.const 0)))
+ (drop (i64.load32_u align=2 offset=11 (i32.const 0)))
+ (drop (i64.load align=2 offset=12 (i32.const 0)))
+ (drop (f32.load align=2 offset=13 (i32.const 0)))
+ (drop (f64.load align=2 offset=14 (i32.const 0)))
+ )
+
+ (func $B (type $1)
+ (i32.store8 (i32.const 0) (i32.const 1))
+ (i32.store16 (i32.const 0) (i32.const 2))
+ (i32.store (i32.const 0) (i32.const 3))
+ (i64.store8 (i32.const 0) (i64.const 4))
+ (i64.store16 (i32.const 0) (i64.const 5))
+ (i64.store326 (i32.const 0) (i64.const 6))
+ (i64.store (i32.const 0) (i64.const 7))
+ (f32.store (i32.const 0) (f32.const 8))
+ (f64.store (i32.const 0) (f64.const 9))
+
+ (i32.store8 align=1 offset=1 (i32.const 0) (i32.const 1))
+ (i32.store16 align=1 offset=2 (i32.const 0) (i32.const 2))
+ (i32.store align=2 offset=3 (i32.const 0) (i32.const 3))
+ (i64.store8 align=1 offset=4 (i32.const 0) (i64.const 4))
+ (i64.store16 align=2 offset=5 (i32.const 0) (i64.const 5))
+ (i64.store32 align=2 offset=6 (i32.const 0) (i64.const 6))
+ (i64.store align=2 offset=7 (i32.const 0) (i64.const 7))
+ (f32.store align=2 offset=8 (i32.const 0) (f32.const 8))
+ (f64.store align=2 offset=9 (i32.const 0) (f64.const 9))
+ )
+)
+