summaryrefslogtreecommitdiff
path: root/test/binaryen.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/binaryen.js')
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt10
-rw-r--r--test/binaryen.js/sieve.js75
-rw-r--r--test/binaryen.js/sieve.js.txt107
3 files changed, 187 insertions, 5 deletions
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index ed411bb87..50193c64d 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -1316,7 +1316,7 @@ int main() {
expressions[190] = BinaryenBinary(the_module, 62, expressions[188], expressions[189]);
{
BinaryenExpressionRef children[] = { 0 };
- expressions[191] = BinaryenBlock(the_module, NULL, children, 0, BinaryenUndefined());
+ expressions[191] = BinaryenBlock(the_module, NULL, children, 0, 0);
}
expressions[192] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]);
expressions[193] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]);
@@ -1412,17 +1412,17 @@ getExpressionType=3
9.5
{
BinaryenExpressionRef children[] = { expressions[24], expressions[26], expressions[28], expressions[30], expressions[32], expressions[34], expressions[36], expressions[38], expressions[40], expressions[42], expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54], expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66], expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92], expressions[94], expressions[97], expressions[100], expressions[103], expressions[106], expressions[109], expressions[112], expressions[115], expressions[118], expressions[121], expressions[124], expressions[127], expressions[130], expressions[133], expressions[136], expressions[139], expressions[142], expressions[145], expressions[148], expressions[151], expressions[154], expressions[157], expressions[160], expressions[163], expressions[166], expressions[169], expressions[172], expressions[175], expressions[178], expressions[181], expressions[184], expressions[187], expressions[190], expressions[191], expressions[192], expressions[193], expressions[195], expressions[197], expressions[198], expressions[200], expressions[202], expressions[203], expressions[204], expressions[206], expressions[212], expressions[217], expressions[224], expressions[226], expressions[228], expressions[231], expressions[233], expressions[235], expressions[237], expressions[239], expressions[240], expressions[241], expressions[242], expressions[244], expressions[245], expressions[246] };
- expressions[251] = BinaryenBlock(the_module, "the-value", children, 95, BinaryenUndefined());
+ expressions[251] = BinaryenBlock(the_module, "the-value", children, 95, 0);
}
expressions[252] = BinaryenDrop(the_module, expressions[251]);
{
BinaryenExpressionRef children[] = { expressions[252] };
- expressions[253] = BinaryenBlock(the_module, "the-nothing", children, 1, BinaryenUndefined());
+ expressions[253] = BinaryenBlock(the_module, "the-nothing", children, 1, 0);
}
expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
{
BinaryenExpressionRef children[] = { expressions[253], expressions[254] };
- expressions[255] = BinaryenBlock(the_module, "the-body", children, 2, BinaryenUndefined());
+ expressions[255] = BinaryenBlock(the_module, "the-body", children, 2, 0);
}
{
BinaryenType varTypes[] = { 1 };
@@ -2445,7 +2445,7 @@ getExpressionType=3
expressions[139] = BinaryenReturn(the_module, expressions[138]);
{
BinaryenExpressionRef children[] = { expressions[137], expressions[139] };
- expressions[140] = BinaryenBlock(the_module, "the-list", children, 2, BinaryenUndefined());
+ expressions[140] = BinaryenBlock(the_module, "the-list", children, 2, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[140]);
expressions[141] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
diff --git a/test/binaryen.js/sieve.js b/test/binaryen.js/sieve.js
new file mode 100644
index 000000000..a7f0c993b
--- /dev/null
+++ b/test/binaryen.js/sieve.js
@@ -0,0 +1,75 @@
+// Create a module to work on
+var module = new Binaryen.Module();
+
+// Set a memory of initially one page, maximum 100 pages
+module.setMemory(1, 100);
+
+// Create a function type for i32 (i32) (i.e., return i32, get an i32 param)
+var ii = module.addFunctionType('i', Binaryen.i32, [Binaryen.i32]);
+
+var body = module.block(
+ null,
+ [
+ // if the current memory size is too small, grow it
+ module.if(
+ module.i32.lt_u(
+ module.i32.mul(
+ module.current_memory(),
+ module.i32.const(65536)
+ ),
+ module.get_local(0, Binaryen.i32)
+ ),
+ module.grow_memory(
+ module.i32.sub(
+ module.i32.div_u(
+ module.i32.add(
+ module.get_local(0, Binaryen.i32),
+ module.i32.const(65535)
+ ),
+ module.i32.const(65536)
+ ),
+ module.current_memory()
+ )
+ )
+ ),
+ // first, clear memory
+ module.set_local(1, module.i32.const(0)),
+ module.loop('clear', module.block(null, [
+ module.i32.store8(0, 1,
+ module.get_local(1, Binaryen.i32),
+ module.i32.const(0)
+ ),
+ module.set_local(1, module.i32.add(
+ module.get_local(1, Binaryen.i32),
+ module.i32.const(1)
+ )),
+ module.br_if('clear', module.i32.eq(
+ module.get_local(1),
+ module.get_local(0)
+ ))
+ ])),
+ // perform the sieve TODO
+ // calculate how many primes there are
+ module.return(module.get_local(0, Binaryen.i32))
+ ],
+ Binaryen.none
+);
+
+// Create the add function
+// Note: no additional local variables (that's the [])
+module.addFunction('sieve', ii, [Binaryen.i32], body);
+
+// Export the function, so we can call it later (for simplicity we
+// export it as the same name as it has internally)
+module.addFunctionExport('sieve', 'sieve');
+
+// Print out the text
+console.log(module.emitText());
+
+// Optimize the module! This removes the 'return', since the
+// output of the add can just fall through
+module.optimize();
+
+// Print out the optimized module's text
+console.log('optimized:\n\n' + module.emitText());
+
diff --git a/test/binaryen.js/sieve.js.txt b/test/binaryen.js/sieve.js.txt
new file mode 100644
index 000000000..3400215e1
--- /dev/null
+++ b/test/binaryen.js/sieve.js.txt
@@ -0,0 +1,107 @@
+(module
+ (type $i (func (param i32) (result i32)))
+ (memory $0 1 100)
+ (export "sieve" (func $sieve))
+ (func $sieve (; 0 ;) (type $i) (param $0 i32) (result i32)
+ (local $1 i32)
+ (if
+ (i32.lt_u
+ (i32.mul
+ (current_memory)
+ (i32.const 65536)
+ )
+ (get_local $0)
+ )
+ (grow_memory
+ (i32.sub
+ (i32.div_u
+ (i32.add
+ (get_local $0)
+ (i32.const 65535)
+ )
+ (i32.const 65536)
+ )
+ (current_memory)
+ )
+ )
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ (loop $clear
+ (i32.store8
+ (get_local $1)
+ (i32.const 0)
+ )
+ (set_local $1
+ (i32.add
+ (get_local $1)
+ (i32.const 1)
+ )
+ )
+ (br_if $clear
+ (i32.eq
+ (get_local $1)
+ (get_local $0)
+ )
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+)
+
+optimized:
+
+(module
+ (type $i (func (param i32) (result i32)))
+ (memory $0 1 100)
+ (export "sieve" (func $sieve))
+ (func $sieve (; 0 ;) (type $i) (param $0 i32) (result i32)
+ (local $1 i32)
+ (if
+ (i32.lt_u
+ (i32.mul
+ (current_memory)
+ (i32.const 65536)
+ )
+ (get_local $0)
+ )
+ (grow_memory
+ (i32.sub
+ (i32.div_u
+ (i32.add
+ (get_local $0)
+ (i32.const 65535)
+ )
+ (i32.const 65536)
+ )
+ (current_memory)
+ )
+ )
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ (loop $clear
+ (i32.store8
+ (get_local $1)
+ (i32.const 0)
+ )
+ (br_if $clear
+ (i32.eq
+ (tee_local $1
+ (i32.add
+ (get_local $1)
+ (i32.const 1)
+ )
+ )
+ (get_local $0)
+ )
+ )
+ )
+ (get_local $0)
+ )
+)
+