diff options
author | Daniel Wirtz <dcode@dcode.io> | 2020-01-17 18:43:45 +0100 |
---|---|---|
committer | Alon Zakai <azakai@google.com> | 2020-01-17 09:43:44 -0800 |
commit | 98f5507c508d6fde326347df3fcad70740b634ea (patch) | |
tree | 3b8a7f1420ba81ca8e8df5b10a9e744a3602e6b4 /test | |
parent | e873e2a84db3fda3c8df5ed8e0b39578a1fb2f2d (diff) | |
download | binaryen-98f5507c508d6fde326347df3fcad70740b634ea.tar.gz binaryen-98f5507c508d6fde326347df3fcad70740b634ea.tar.bz2 binaryen-98f5507c508d6fde326347df3fcad70740b634ea.zip |
Expose ExpressionAnalyzer in C-/JS-API (#2585)
Instead of reinventing the wheel on our side, this adds ExpressionAnalyzer
bindings to the C- and JS-APIs, which can be useful for generators. For
example, a generator may decide to simplify a compilation step if a
subexpression doesn't have any side effects, or simply skip emitting
something that is likely to compile to a drop or an empty block right away.
Diffstat (limited to 'test')
-rw-r--r-- | test/binaryen.js/sideffects.js | 94 | ||||
-rw-r--r-- | test/binaryen.js/sideffects.js.txt | 12 |
2 files changed, 106 insertions, 0 deletions
diff --git a/test/binaryen.js/sideffects.js b/test/binaryen.js/sideffects.js new file mode 100644 index 000000000..a486099dc --- /dev/null +++ b/test/binaryen.js/sideffects.js @@ -0,0 +1,94 @@ +console.log("SideEffects.None=" + binaryen.SideEffects.None); +console.log("SideEffects.Branches=" + binaryen.SideEffects.Branches); +console.log("SideEffects.Calls=" + binaryen.SideEffects.Calls); +console.log("SideEffects.ReadsLocal=" + binaryen.SideEffects.ReadsLocal); +console.log("SideEffects.WritesLocal=" + binaryen.SideEffects.WritesLocal); +console.log("SideEffects.ReadsGlobal=" + binaryen.SideEffects.ReadsGlobal); +console.log("SideEffects.WritesGlobal=" + binaryen.SideEffects.WritesGlobal); +console.log("SideEffects.ReadsMemory=" + binaryen.SideEffects.ReadsMemory); +console.log("SideEffects.WritesMemory=" + binaryen.SideEffects.WritesMemory); +console.log("SideEffects.ImplicitTrap=" + binaryen.SideEffects.ImplicitTrap); +console.log("SideEffects.IsAtomic=" + binaryen.SideEffects.IsAtomic); +console.log("SideEffects.Any=" + binaryen.SideEffects.Any); + +var module = new binaryen.Module(); +assert( + binaryen.getSideEffects( + module.i32.const(1) + ) + == + binaryen.SideEffects.None +); +assert( + binaryen.getSideEffects( + module.br("test") + ) + == + binaryen.SideEffects.Branches +); +assert( + binaryen.getSideEffects( + module.call("test", [], binaryen.i32) + ) + == + binaryen.SideEffects.Calls +); +assert( + binaryen.getSideEffects( + module.local.get("test", binaryen.i32) + ) + == + binaryen.SideEffects.ReadsLocal +); +assert( + binaryen.getSideEffects( + module.local.set("test", + module.i32.const(1) + ) + ) + == + binaryen.SideEffects.WritesLocal +); +assert( + binaryen.getSideEffects( + module.global.get("test", binaryen.i32) + ) + == + binaryen.SideEffects.ReadsGlobal +); +assert( + binaryen.getSideEffects( + module.global.set("test", module.i32.const(1)) + ) + == + binaryen.SideEffects.WritesGlobal +); +assert( + binaryen.getSideEffects( + module.i32.load(0, 0, + module.i32.const(0) + ) + ) + == + binaryen.SideEffects.ReadsMemory | binaryen.SideEffects.ImplicitTrap +); +assert( + binaryen.getSideEffects( + module.i32.store(0, 0, + module.i32.const(0), + module.i32.const(1) + ) + ) + == + binaryen.SideEffects.WritesMemory | binaryen.SideEffects.ImplicitTrap +); +assert( + binaryen.getSideEffects( + module.i32.div_s( + module.i32.const(1), + module.i32.const(0) + ) + ) + == + binaryen.SideEffects.ImplicitTrap +); diff --git a/test/binaryen.js/sideffects.js.txt b/test/binaryen.js/sideffects.js.txt new file mode 100644 index 000000000..54a1e14bc --- /dev/null +++ b/test/binaryen.js/sideffects.js.txt @@ -0,0 +1,12 @@ +SideEffects.None=0 +SideEffects.Branches=1 +SideEffects.Calls=2 +SideEffects.ReadsLocal=4 +SideEffects.WritesLocal=8 +SideEffects.ReadsGlobal=16 +SideEffects.WritesGlobal=32 +SideEffects.ReadsMemory=64 +SideEffects.WritesMemory=128 +SideEffects.ImplicitTrap=256 +SideEffects.IsAtomic=512 +SideEffects.Any=1023 |