diff options
Diffstat (limited to 'test/example')
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 43 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 2259 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt.txt | 879 | ||||
-rw-r--r-- | test/example/relooper-fuzz.c | 6 | ||||
-rw-r--r-- | test/example/relooper-fuzz.txt | 10 | ||||
-rw-r--r-- | test/example/relooper-fuzz1.c | 6 | ||||
-rw-r--r-- | test/example/relooper-fuzz1.txt | 10 |
7 files changed, 1919 insertions, 1294 deletions
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 0aaf5ab95..d22a30e9c 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -64,6 +64,10 @@ BinaryenExpressionRef makeSomething(BinaryenModuleRef module) { return makeInt32(module, 1337); } +BinaryenExpressionRef makeDroppedInt32(BinaryenModuleRef module, int x) { + return BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(x))); +} + // tests void test_types() { @@ -202,14 +206,15 @@ void test_core() { BinaryenUnary(module, BinaryenEqZInt32(), // check the output type of the call node BinaryenCallIndirect(module, makeInt32(module, 2449), callOperands4, 4, "iiIfF") ), - BinaryenGetLocal(module, 0, BinaryenInt32()), + BinaryenDrop(module, BinaryenGetLocal(module, 0, BinaryenInt32())), BinaryenSetLocal(module, 0, makeInt32(module, 101)), + BinaryenDrop(module, BinaryenTeeLocal(module, 0, makeInt32(module, 102))), BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), makeInt32(module, 1)), BinaryenLoad(module, 1, 1, 2, 4, BinaryenInt64(), makeInt32(module, 8)), BinaryenLoad(module, 4, 0, 0, 0, BinaryenFloat32(), makeInt32(module, 2)), BinaryenLoad(module, 8, 0, 2, 8, BinaryenFloat64(), makeInt32(module, 9)), - BinaryenStore(module, 4, 0, 0, temp13, temp14), - BinaryenStore(module, 8, 2, 4, temp15, temp16), + BinaryenStore(module, 4, 0, 0, temp13, temp14, BinaryenInt32()), + BinaryenStore(module, 8, 2, 4, temp15, temp16, BinaryenInt64()), BinaryenSelect(module, temp10, temp11, temp12), BinaryenReturn(module, makeInt32(module, 1337)), // TODO: Host @@ -221,7 +226,8 @@ void test_core() { // Make the main body of the function. and one block with a return value, one without BinaryenExpressionRef value = BinaryenBlock(module, "the-value", valueList, sizeof(valueList) / sizeof(BinaryenExpressionRef)); - BinaryenExpressionRef nothing = BinaryenBlock(module, "the-nothing", &value, 1); + BinaryenExpressionRef droppedValue = BinaryenDrop(module, value); + BinaryenExpressionRef nothing = BinaryenBlock(module, "the-nothing", &droppedValue, 1); BinaryenExpressionRef bodyList[] = { nothing, makeInt32(module, 42) }; BinaryenExpressionRef body = BinaryenBlock(module, "the-body", bodyList, 2); @@ -260,6 +266,9 @@ void test_core() { BinaryenFunctionTypeRef noname = BinaryenAddFunctionType(module, NULL, BinaryenNone(), NULL, 0); + // A bunch of our code needs drop(), auto-add it + BinaryenModuleAutoDrop(module); + // Verify it validates assert(BinaryenModuleValidate(module)); @@ -304,7 +313,7 @@ void test_relooper() { RelooperRef relooper = RelooperCreate(); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); - RelooperAddBranch(block0, block1, NULL, makeInt32(module, 77)); // code on branch + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 77)); // code on branch BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "two-blocks-plus-code", v, localTypes, 1, body); } @@ -321,8 +330,8 @@ void test_relooper() { RelooperRef relooper = RelooperCreate(); RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); - RelooperAddBranch(block0, block1, NULL, makeInt32(module, 33)); - RelooperAddBranch(block1, block0, NULL, makeInt32(module, -66)); + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 33)); + RelooperAddBranch(block1, block0, NULL, makeDroppedInt32(module, -66)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-plus-code", v, localTypes, 1, body); } @@ -341,9 +350,9 @@ void test_relooper() { RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); - BinaryenExpressionRef temp = makeInt32(module, 10); + BinaryenExpressionRef temp = makeDroppedInt32(module, 10); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); - RelooperAddBranch(block0, block2, NULL, makeInt32(module, 20)); + RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, 20)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "split-plus-code", v, localTypes, 1, body); } @@ -363,10 +372,10 @@ void test_relooper() { RelooperBlockRef block0 = RelooperAddBlock(relooper, makeCallCheck(module, 0)); RelooperBlockRef block1 = RelooperAddBlock(relooper, makeCallCheck(module, 1)); RelooperBlockRef block2 = RelooperAddBlock(relooper, makeCallCheck(module, 2)); - BinaryenExpressionRef temp = makeInt32(module, -1); + BinaryenExpressionRef temp = makeDroppedInt32(module, -1); RelooperAddBranch(block0, block1, makeInt32(module, 55), temp); - RelooperAddBranch(block0, block2, NULL, makeInt32(module, -2)); - RelooperAddBranch(block1, block2, NULL, makeInt32(module, -3)); + RelooperAddBranch(block0, block2, NULL, makeDroppedInt32(module, -2)); + RelooperAddBranch(block1, block2, NULL, makeDroppedInt32(module, -3)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "if-plus-code", v, localTypes, 1, body); } @@ -403,15 +412,15 @@ void test_relooper() { RelooperBlockRef block4 = RelooperAddBlock(relooper, makeCallCheck(module, 4)); RelooperBlockRef block5 = RelooperAddBlock(relooper, makeCallCheck(module, 5)); RelooperBlockRef block6 = RelooperAddBlock(relooper, makeCallCheck(module, 6)); - RelooperAddBranch(block0, block1, NULL, makeInt32(module, 10)); + RelooperAddBranch(block0, block1, NULL, makeDroppedInt32(module, 10)); RelooperAddBranch(block1, block2, makeInt32(module, -2), NULL); - RelooperAddBranch(block1, block6, NULL, makeInt32(module, 20)); + RelooperAddBranch(block1, block6, NULL, makeDroppedInt32(module, 20)); RelooperAddBranch(block2, block3, makeInt32(module, -6), NULL); - RelooperAddBranch(block2, block1, NULL, makeInt32(module, 30)); + RelooperAddBranch(block2, block1, NULL, makeDroppedInt32(module, 30)); RelooperAddBranch(block3, block4, makeInt32(module, -10), NULL); RelooperAddBranch(block3, block5, NULL, NULL); RelooperAddBranch(block4, block5, NULL, NULL); - RelooperAddBranch(block5, block6, NULL, makeInt32(module, 40)); + RelooperAddBranch(block5, block6, NULL, makeDroppedInt32(module, 40)); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "nontrivial-loop-plus-phi-to-head", v, localTypes, 1, body); } @@ -425,7 +434,7 @@ void test_relooper() { BinaryenIndex to_block1[] = { 2, 5 }; RelooperAddBranchForSwitch(block0, block1, to_block1, 2, NULL); BinaryenIndex to_block2[] = { 4 }; - RelooperAddBranchForSwitch(block0, block2, to_block2, 1, makeInt32(module, 55)); + RelooperAddBranchForSwitch(block0, block2, to_block2, 1, makeDroppedInt32(module, 55)); RelooperAddBranchForSwitch(block0, block3, NULL, 0, NULL); BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "switch", v, localTypes, 1, body); diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 42a5bfee1..c848f0f7c 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -23,340 +23,509 @@ BinaryenFloat64: 4 (local $4 i32) (block $the-body (block $the-nothing - (block $the-value - (i32.clz - (i32.const -10) - ) - (i64.ctz - (i64.const -22) - ) - (i32.popcnt - (i32.const -10) - ) - (f32.neg - (f32.const -33.61199951171875) - ) - (f64.abs - (f64.const -9005.841) - ) - (f32.ceil - (f32.const -33.61199951171875) - ) - (f64.floor - (f64.const -9005.841) - ) - (f32.trunc - (f32.const -33.61199951171875) - ) - (f32.nearest - (f32.const -33.61199951171875) - ) - (f64.sqrt - (f64.const -9005.841) - ) - (i32.eqz - (i32.const -10) - ) - (i64.extend_s/i32 - (i32.const -10) - ) - (i64.extend_u/i32 - (i32.const -10) - ) - (i32.wrap/i64 - (i64.const -22) - ) - (i32.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_s/f64 - (f64.const -9005.841) - ) - (i64.trunc_s/f64 - (f64.const -9005.841) - ) - (i32.trunc_u/f64 - (f64.const -9005.841) - ) - (i64.trunc_u/f64 - (f64.const -9005.841) - ) - (i32.reinterpret/f32 - (f32.const -33.61199951171875) - ) - (i64.reinterpret/f64 - (f64.const -9005.841) - ) - (f32.convert_s/i32 - (i32.const -10) - ) - (f64.convert_s/i32 - (i32.const -10) - ) - (f32.convert_u/i32 - (i32.const -10) - ) - (f64.convert_u/i32 - (i32.const -10) - ) - (f32.convert_s/i64 - (i64.const -22) - ) - (f64.convert_s/i64 - (i64.const -22) - ) - (f32.convert_u/i64 - (i64.const -22) - ) - (f64.convert_u/i64 - (i64.const -22) - ) - (f64.promote/f32 - (f32.const -33.61199951171875) - ) - (f32.demote/f64 - (f64.const -9005.841) - ) - (f32.reinterpret/i32 - (i32.const -10) - ) - (f64.reinterpret/i64 - (i64.const -22) - ) - (i32.add - (i32.const -10) - (i32.const -11) - ) - (f64.sub - (f64.const -9005.841) - (f64.const -9007.333) - ) - (i32.div_s - (i32.const -10) - (i32.const -11) - ) - (i64.div_u - (i64.const -22) - (i64.const -23) - ) - (i64.rem_s - (i64.const -22) - (i64.const -23) - ) - (i32.rem_u - (i32.const -10) - (i32.const -11) - ) - (i32.and - (i32.const -10) - (i32.const -11) - ) - (i64.or - (i64.const -22) - (i64.const -23) - ) - (i32.xor - (i32.const -10) - (i32.const -11) - ) - (i64.shl - (i64.const -22) - (i64.const -23) - ) - (i64.shr_u - (i64.const -22) - (i64.const -23) - ) - (i32.shr_s - (i32.const -10) - (i32.const -11) - ) - (i32.rotl - (i32.const -10) - (i32.const -11) - ) - (i64.rotr - (i64.const -22) - (i64.const -23) - ) - (f32.div - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.copysign - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f32.min - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.max - (f64.const -9005.841) - (f64.const -9007.333) - ) - (i32.eq - (i32.const -10) - (i32.const -11) - ) - (f32.ne - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (i32.lt_s - (i32.const -10) - (i32.const -11) - ) - (i64.lt_u - (i64.const -22) - (i64.const -23) - ) - (i64.le_s - (i64.const -22) - (i64.const -23) - ) - (i32.le_u - (i32.const -10) - (i32.const -11) - ) - (i64.gt_s - (i64.const -22) - (i64.const -23) - ) - (i32.gt_u - (i32.const -10) - (i32.const -11) - ) - (i32.ge_s - (i32.const -10) - (i32.const -11) - ) - (i64.ge_u - (i64.const -22) - (i64.const -23) - ) - (f32.lt - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.le - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f64.gt - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f32.ge - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (block - ) - (if - (i32.const 1) - (i32.const 2) - (i32.const 3) - ) - (if - (i32.const 4) - (i32.const 5) - ) - (loop $out $in - (i32.const 0) - ) - (loop $in2 - (i32.const 0) - ) - (loop - (i32.const 0) - ) - (br_if $the-value - (i32.const 1) - (i32.const 0) - ) - (br_if $the-nothing - (i32.const 2) - ) - (br $the-value - (i32.const 3) - ) - (br $the-nothing) - (br_table $the-value $the-value - (i32.const 1) - (i32.const 0) - ) - (br_table $the-nothing $the-nothing - (i32.const 2) - ) - (i32.eqz - (call "$kitchen()sinker" - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (block $the-value + (drop + (i32.clz + (i32.const -10) + ) ) - ) - (i32.eqz - (i32.trunc_s/f32 - (call_import $an-imported - (i32.const 13) - (f64.const 3.7) + (drop + (i64.ctz + (i64.const -22) ) ) - ) - (i32.eqz - (call_indirect $iiIfF - (i32.const 2449) - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (i32.popcnt + (i32.const -10) + ) ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (drop + (if + (i32.const 1) + (i32.const 2) + (i32.const 3) + ) + ) + (if + (i32.const 4) + (i32.const 5) + ) + (drop + (loop $out $in + (i32.const 0) + ) + ) + (drop + (loop $in2 + (i32.const 0) + ) + ) + (drop + (loop + (i32.const 0) + ) + ) + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call_import $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect $iiIfF + (i32.const 2449) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load8_s offset=2 align=4 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) ) - (get_local $0) - (set_local $0 - (i32.const 101) - ) - (i32.load - (i32.const 1) - ) - (i64.load8_s offset=2 align=4 - (i32.const 8) - ) - (f32.load - (i32.const 2) - ) - (f64.load offset=2 - (i32.const 9) - ) - (i32.store - (i32.const 10) - (i32.const 11) - ) - (i64.store offset=2 align=4 - (i32.const 110) - (i64.const 111) - ) - (select - (i32.const 3) - (i32.const 5) - (i32.const 1) - ) - (return - (i32.const 1337) - ) - (nop) - (unreachable) ) ) (i32.const 42) @@ -402,7 +571,9 @@ raw: (i32.const 0) ) (block - (i32.const 77) + (drop + (i32.const 77) + ) (br $block$2$break) ) ) @@ -441,7 +612,9 @@ raw: (i32.const 0) ) (block - (i32.const 33) + (drop + (i32.const 33) + ) (br $block$2$break) ) ) @@ -450,7 +623,9 @@ raw: (i32.const 1) ) (block - (i32.const -66) + (drop + (i32.const -66) + ) (br $shape$0$continue) ) ) @@ -483,7 +658,9 @@ raw: (if (i32.const 55) (block - (i32.const 10) + (drop + (i32.const 10) + ) (block (call_import $check (i32.const 1) @@ -491,7 +668,9 @@ raw: ) ) (block - (i32.const 20) + (drop + (i32.const 20) + ) (block (call_import $check (i32.const 2) @@ -534,19 +713,25 @@ raw: (if (i32.const 55) (block - (i32.const -1) + (drop + (i32.const -1) + ) (block (call_import $check (i32.const 1) ) (block - (i32.const -3) + (drop + (i32.const -3) + ) (br $block$3$break) ) ) ) (block - (i32.const -2) + (drop + (i32.const -2) + ) (br $block$3$break) ) ) @@ -626,7 +811,9 @@ raw: (i32.const 0) ) (block - (i32.const 10) + (drop + (i32.const 10) + ) (br $block$2$break) ) ) @@ -642,7 +829,9 @@ raw: (i32.const -2) (br $block$3$break) (block - (i32.const 20) + (drop + (i32.const 20) + ) (br $block$7$break) ) ) @@ -655,7 +844,9 @@ raw: (i32.const -6) (br $block$4$break) (block - (i32.const 30) + (drop + (i32.const 30) + ) (br $shape$1$continue) ) ) @@ -685,7 +876,9 @@ raw: (i32.const 5) ) (block - (i32.const 40) + (drop + (i32.const 40) + ) (br $block$7$break) ) ) @@ -721,7 +914,9 @@ raw: (br $switch$1$leave) ) (block - (i32.const 55) + (drop + (i32.const 55) + ) (block (call_import $check (i32.const 2) @@ -1327,43 +1522,48 @@ int main() { } expressions[222] = BinaryenUnary(the_module, 20, expressions[221]); expressions[223] = BinaryenGetLocal(the_module, 0, 1); - expressions[224] = BinaryenConst(the_module, BinaryenLiteralInt32(101)); - expressions[225] = BinaryenSetLocal(the_module, 0, expressions[224]); - expressions[226] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - expressions[227] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[226]); - expressions[228] = BinaryenConst(the_module, BinaryenLiteralInt32(8)); - expressions[229] = BinaryenLoad(the_module, 1, 1, 2, 4, 2, expressions[228]); - expressions[230] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - expressions[231] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[230]); - expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(9)); - expressions[233] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[232]); - expressions[234] = BinaryenStore(the_module, 4, 0, 0, expressions[25], expressions[26]); - expressions[235] = BinaryenStore(the_module, 8, 2, 4, expressions[27], expressions[28]); - expressions[236] = BinaryenSelect(the_module, expressions[22], expressions[23], expressions[24]); - expressions[237] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); - expressions[238] = BinaryenReturn(the_module, expressions[237]); - expressions[239] = BinaryenNop(the_module); - expressions[240] = BinaryenUnreachable(the_module); + expressions[224] = BinaryenDrop(the_module, expressions[223]); + expressions[225] = BinaryenConst(the_module, BinaryenLiteralInt32(101)); + expressions[226] = BinaryenSetLocal(the_module, 0, expressions[225]); + expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt32(102)); + expressions[228] = BinaryenTeeLocal(the_module, 0, expressions[227]); + expressions[229] = BinaryenDrop(the_module, expressions[228]); + expressions[230] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + expressions[231] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[230]); + expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(8)); + expressions[233] = BinaryenLoad(the_module, 1, 1, 2, 4, 2, expressions[232]); + expressions[234] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + expressions[235] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[234]); + expressions[236] = BinaryenConst(the_module, BinaryenLiteralInt32(9)); + expressions[237] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[236]); + expressions[238] = BinaryenStore(the_module, 4, 0, 0, expressions[25], expressions[26], 1); + expressions[239] = BinaryenStore(the_module, 8, 2, 4, expressions[27], expressions[28], 2); + expressions[240] = BinaryenSelect(the_module, expressions[22], expressions[23], expressions[24]); + expressions[241] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[242] = BinaryenReturn(the_module, expressions[241]); + expressions[243] = BinaryenNop(the_module); + expressions[244] = BinaryenUnreachable(the_module); BinaryenExpressionPrint(expressions[36]); (f32.neg (f32.const -33.61199951171875) ) { - BinaryenExpressionRef children[] = { 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[96], expressions[98], 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[193], expressions[196], expressions[197], expressions[198], expressions[199], expressions[201], expressions[203], expressions[205], expressions[206], expressions[208], expressions[210], expressions[211], expressions[212], expressions[214], expressions[216], expressions[219], expressions[222], expressions[223], expressions[225], expressions[227], expressions[229], expressions[231], expressions[233], expressions[234], expressions[235], expressions[236], expressions[238], expressions[239], expressions[240] }; - expressions[241] = BinaryenBlock(the_module, "the-value", children, 95); + BinaryenExpressionRef children[] = { 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[96], expressions[98], 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[193], expressions[196], expressions[197], expressions[198], expressions[199], expressions[201], expressions[203], expressions[205], expressions[206], expressions[208], expressions[210], expressions[211], expressions[212], expressions[214], expressions[216], expressions[219], expressions[222], expressions[224], expressions[226], expressions[229], expressions[231], expressions[233], expressions[235], expressions[237], expressions[238], expressions[239], expressions[240], expressions[242], expressions[243], expressions[244] }; + expressions[245] = BinaryenBlock(the_module, "the-value", children, 96); } + expressions[246] = BinaryenDrop(the_module, expressions[245]); { - BinaryenExpressionRef children[] = { expressions[241] }; - expressions[242] = BinaryenBlock(the_module, "the-nothing", children, 1); + BinaryenExpressionRef children[] = { expressions[246] }; + expressions[247] = BinaryenBlock(the_module, "the-nothing", children, 1); } - expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); { - BinaryenExpressionRef children[] = { expressions[242], expressions[243] }; - expressions[244] = BinaryenBlock(the_module, "the-body", children, 2); + BinaryenExpressionRef children[] = { expressions[247], expressions[248] }; + expressions[249] = BinaryenBlock(the_module, "the-body", children, 2); } { BinaryenType varTypes[] = { 1 }; - functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[244]); + functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[249]); } { BinaryenIndex paramTypes[] = { 1, 4 }; @@ -1397,6 +1597,7 @@ int main() { BinaryenIndex paramTypes[] = { 0 }; functionTypes[3] = BinaryenAddFunctionType(the_module, NULL, 0, paramTypes, 0); } + BinaryenModuleAutoDrop(the_module); BinaryenModuleValidate(the_module); BinaryenModulePrint(the_module); (module @@ -1416,340 +1617,509 @@ int main() { (local $4 i32) (block $the-body (block $the-nothing - (block $the-value - (i32.clz - (i32.const -10) - ) - (i64.ctz - (i64.const -22) - ) - (i32.popcnt - (i32.const -10) - ) - (f32.neg - (f32.const -33.61199951171875) - ) - (f64.abs - (f64.const -9005.841) - ) - (f32.ceil - (f32.const -33.61199951171875) - ) - (f64.floor - (f64.const -9005.841) - ) - (f32.trunc - (f32.const -33.61199951171875) - ) - (f32.nearest - (f32.const -33.61199951171875) - ) - (f64.sqrt - (f64.const -9005.841) - ) - (i32.eqz - (i32.const -10) - ) - (i64.extend_s/i32 - (i32.const -10) - ) - (i64.extend_u/i32 - (i32.const -10) - ) - (i32.wrap/i64 - (i64.const -22) - ) - (i32.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_s/f64 - (f64.const -9005.841) - ) - (i64.trunc_s/f64 - (f64.const -9005.841) - ) - (i32.trunc_u/f64 - (f64.const -9005.841) - ) - (i64.trunc_u/f64 - (f64.const -9005.841) - ) - (i32.reinterpret/f32 - (f32.const -33.61199951171875) - ) - (i64.reinterpret/f64 - (f64.const -9005.841) - ) - (f32.convert_s/i32 - (i32.const -10) - ) - (f64.convert_s/i32 - (i32.const -10) - ) - (f32.convert_u/i32 - (i32.const -10) - ) - (f64.convert_u/i32 - (i32.const -10) - ) - (f32.convert_s/i64 - (i64.const -22) - ) - (f64.convert_s/i64 - (i64.const -22) - ) - (f32.convert_u/i64 - (i64.const -22) - ) - (f64.convert_u/i64 - (i64.const -22) - ) - (f64.promote/f32 - (f32.const -33.61199951171875) - ) - (f32.demote/f64 - (f64.const -9005.841) - ) - (f32.reinterpret/i32 - (i32.const -10) - ) - (f64.reinterpret/i64 - (i64.const -22) - ) - (i32.add - (i32.const -10) - (i32.const -11) - ) - (f64.sub - (f64.const -9005.841) - (f64.const -9007.333) - ) - (i32.div_s - (i32.const -10) - (i32.const -11) - ) - (i64.div_u - (i64.const -22) - (i64.const -23) - ) - (i64.rem_s - (i64.const -22) - (i64.const -23) - ) - (i32.rem_u - (i32.const -10) - (i32.const -11) - ) - (i32.and - (i32.const -10) - (i32.const -11) - ) - (i64.or - (i64.const -22) - (i64.const -23) - ) - (i32.xor - (i32.const -10) - (i32.const -11) - ) - (i64.shl - (i64.const -22) - (i64.const -23) - ) - (i64.shr_u - (i64.const -22) - (i64.const -23) - ) - (i32.shr_s - (i32.const -10) - (i32.const -11) - ) - (i32.rotl - (i32.const -10) - (i32.const -11) - ) - (i64.rotr - (i64.const -22) - (i64.const -23) - ) - (f32.div - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.copysign - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f32.min - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.max - (f64.const -9005.841) - (f64.const -9007.333) - ) - (i32.eq - (i32.const -10) - (i32.const -11) - ) - (f32.ne - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (i32.lt_s - (i32.const -10) - (i32.const -11) - ) - (i64.lt_u - (i64.const -22) - (i64.const -23) - ) - (i64.le_s - (i64.const -22) - (i64.const -23) - ) - (i32.le_u - (i32.const -10) - (i32.const -11) - ) - (i64.gt_s - (i64.const -22) - (i64.const -23) - ) - (i32.gt_u - (i32.const -10) - (i32.const -11) - ) - (i32.ge_s - (i32.const -10) - (i32.const -11) - ) - (i64.ge_u - (i64.const -22) - (i64.const -23) - ) - (f32.lt - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.le - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f64.gt - (f64.const -9005.841) - (f64.const -9007.333) - ) - (f32.ge - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (block - ) - (if - (i32.const 1) - (i32.const 2) - (i32.const 3) - ) - (if - (i32.const 4) - (i32.const 5) - ) - (loop $out $in - (i32.const 0) - ) - (loop $in2 - (i32.const 0) - ) - (loop - (i32.const 0) - ) - (br_if $the-value - (i32.const 1) - (i32.const 0) - ) - (br_if $the-nothing - (i32.const 2) - ) - (br $the-value - (i32.const 3) - ) - (br $the-nothing) - (br_table $the-value $the-value - (i32.const 1) - (i32.const 0) - ) - (br_table $the-nothing $the-nothing - (i32.const 2) - ) - (i32.eqz - (call "$kitchen()sinker" - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (block $the-value + (drop + (i32.clz + (i32.const -10) + ) ) - ) - (i32.eqz - (i32.trunc_s/f32 - (call_import $an-imported - (i32.const 13) - (f64.const 3.7) + (drop + (i64.ctz + (i64.const -22) ) ) - ) - (i32.eqz - (call_indirect $iiIfF - (i32.const 2449) - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (i32.popcnt + (i32.const -10) + ) ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.841) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.841) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.841) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.841) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.841) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f64.gt + (f64.const -9005.841) + (f64.const -9007.333) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (drop + (if + (i32.const 1) + (i32.const 2) + (i32.const 3) + ) + ) + (if + (i32.const 4) + (i32.const 5) + ) + (drop + (loop $out $in + (i32.const 0) + ) + ) + (drop + (loop $in2 + (i32.const 0) + ) + ) + (drop + (loop + (i32.const 0) + ) + ) + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call_import $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect $iiIfF + (i32.const 2449) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load8_s offset=2 align=4 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) ) - (get_local $0) - (set_local $0 - (i32.const 101) - ) - (i32.load - (i32.const 1) - ) - (i64.load8_s offset=2 align=4 - (i32.const 8) - ) - (f32.load - (i32.const 2) - ) - (f64.load offset=2 - (i32.const 9) - ) - (i32.store - (i32.const 10) - (i32.const 11) - ) - (i64.store offset=2 align=4 - (i32.const 110) - (i64.const 111) - ) - (select - (i32.const 3) - (i32.const 5) - (i32.const 1) - ) - (return - (i32.const 1337) - ) - (nop) - (unreachable) ) ) (i32.const 42) @@ -1820,231 +2190,211 @@ int main() { } relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[12]); expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(77)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[13]); - expressions[14] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[14] = BinaryenDrop(the_module, expressions[13]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[14]); + expressions[15] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[14]); + functions[2] = BinaryenAddFunction(the_module, "two-blocks-plus-code", functionTypes[0], varTypes, 1, expressions[15]); } the_relooper = RelooperCreate(); - expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[15] }; - expressions[16] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[16] }; + expressions[17] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[16]); - expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[17]); + expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[17] }; - expressions[18] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[18] }; + expressions[19] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[18]); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[19]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[0]); - expressions[19] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[20] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[19]); + functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[20]); } the_relooper = RelooperCreate(); - expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[20] }; - expressions[21] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[21] }; + expressions[22] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[21]); - expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[22]); + expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[22] }; - expressions[23] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[23] }; + expressions[24] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[23]); - expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[24]); - expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[25]); - expressions[26] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[24]); + expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(33)); + expressions[26] = BinaryenDrop(the_module, expressions[25]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[26]); + expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(-66)); + expressions[28] = BinaryenDrop(the_module, expressions[27]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[0], expressions[28]); + expressions[29] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[26]); + functions[4] = BinaryenAddFunction(the_module, "loop-plus-code", functionTypes[0], varTypes, 1, expressions[29]); } the_relooper = RelooperCreate(); - expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[27] }; - expressions[28] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[30] }; + expressions[31] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[28]); - expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[31]); + expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[29] }; - expressions[30] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[32] }; + expressions[33] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[30]); - expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[33]); + expressions[34] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[31] }; - expressions[32] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[34] }; + expressions[35] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[32]); - expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[33], expressions[0]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[35]); + expressions[36] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[36], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); - expressions[34] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[37] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[34]); + functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[37]); } the_relooper = RelooperCreate(); - expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[35] }; - expressions[36] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[38] }; + expressions[39] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[36]); - expressions[37] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[39]); + expressions[40] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[37] }; - expressions[38] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[40] }; + expressions[41] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[38]); - expressions[39] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]); + expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[39] }; - expressions[40] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[42] }; + expressions[43] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[40]); - expressions[41] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[42], expressions[41]); - expressions[43] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[43]); - expressions[44] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[43]); + expressions[44] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[45] = BinaryenDrop(the_module, expressions[44]); + expressions[46] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[46], expressions[45]); + expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[48] = BinaryenDrop(the_module, expressions[47]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[48]); + expressions[49] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[44]); + functions[6] = BinaryenAddFunction(the_module, "split-plus-code", functionTypes[0], varTypes, 1, expressions[49]); } the_relooper = RelooperCreate(); - expressions[45] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[50] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[45] }; - expressions[46] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[50] }; + expressions[51] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[46]); - expressions[47] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[51]); + expressions[52] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[47] }; - expressions[48] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[52] }; + expressions[53] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[48]); - expressions[49] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[53]); + expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[49] }; - expressions[50] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[54] }; + expressions[55] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[50]); - expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[51], expressions[0]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[55]); + expressions[56] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[56], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); - expressions[52] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[57] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[52]); + functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[57]); } the_relooper = RelooperCreate(); - expressions[53] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[53] }; - expressions[54] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[58] }; + expressions[59] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[54]); - expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[59]); + expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[55] }; - expressions[56] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[60] }; + expressions[61] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[56]); - expressions[57] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[61]); + expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[57] }; - expressions[58] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[62] }; + expressions[63] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[58]); - expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); - expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[60], expressions[59]); - expressions[61] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[61]); - expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[62]); - expressions[63] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[63]); + expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(-1)); + expressions[65] = BinaryenDrop(the_module, expressions[64]); + expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[66], expressions[65]); + expressions[67] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + expressions[68] = BinaryenDrop(the_module, expressions[67]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[68]); + expressions[69] = BinaryenConst(the_module, BinaryenLiteralInt32(-3)); + expressions[70] = BinaryenDrop(the_module, expressions[69]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[70]); + expressions[71] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[63]); + functions[8] = BinaryenAddFunction(the_module, "if-plus-code", functionTypes[0], varTypes, 1, expressions[71]); } the_relooper = RelooperCreate(); - expressions[64] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); - { - BinaryenExpressionRef operands[] = { expressions[64] }; - expressions[65] = BinaryenCallImport(the_module, "check", operands, 1, 0); - } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[65]); - expressions[66] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); - { - BinaryenExpressionRef operands[] = { expressions[66] }; - expressions[67] = BinaryenCallImport(the_module, "check", operands, 1, 0); - } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[67]); - expressions[68] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); - { - BinaryenExpressionRef operands[] = { expressions[68] }; - expressions[69] = BinaryenCallImport(the_module, "check", operands, 1, 0); - } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[69]); - expressions[70] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[70] }; - expressions[71] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[72] }; + expressions[73] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[71]); - expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[72], expressions[0]); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[3], expressions[0], expressions[0]); - RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); - expressions[73] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); - { - BinaryenType varTypes[] = { 1 }; - functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[73]); - } - the_relooper = RelooperCreate(); - expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[73]); + expressions[74] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { BinaryenExpressionRef operands[] = { expressions[74] }; expressions[75] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[75]); - expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[75]); + expressions[76] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { BinaryenExpressionRef operands[] = { expressions[76] }; expressions[77] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[77]); - expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[77]); + expressions[78] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); { BinaryenExpressionRef operands[] = { expressions[78] }; expressions[79] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[79]); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); - expressions[80] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[80], expressions[0]); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[79]); + expressions[80] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[80], expressions[0]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[3], expressions[0], expressions[0]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[0], expressions[0]); expressions[81] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[81]); + functions[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[81]); } the_relooper = RelooperCreate(); expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); @@ -2065,145 +2415,178 @@ int main() { expressions[87] = BinaryenCallImport(the_module, "check", operands, 1, 0); } relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[87]); - expressions[88] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]); + expressions[88] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[0], expressions[88], expressions[0]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); + expressions[89] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { - BinaryenExpressionRef operands[] = { expressions[88] }; - expressions[89] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenType varTypes[] = { 1 }; + functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[89]); } - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[89]); - expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + the_relooper = RelooperCreate(); + expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { BinaryenExpressionRef operands[] = { expressions[90] }; expressions[91] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[91]); - expressions[92] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[91]); + expressions[92] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { BinaryenExpressionRef operands[] = { expressions[92] }; expressions[93] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[93]); - expressions[94] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[93]); + expressions[94] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { BinaryenExpressionRef operands[] = { expressions[94] }; expressions[95] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[95]); - expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[96]); - expressions[97] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[97], expressions[0]); - expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); - RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[98]); - expressions[99] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); - RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[99], expressions[0]); - expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); - RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[100]); - expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); - RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[101], expressions[0]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[95]); + expressions[96] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + { + BinaryenExpressionRef operands[] = { expressions[96] }; + expressions[97] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[97]); + expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(4)); + { + BinaryenExpressionRef operands[] = { expressions[98] }; + expressions[99] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[4] = RelooperAddBlock(the_relooper, expressions[99]); + expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(5)); + { + BinaryenExpressionRef operands[] = { expressions[100] }; + expressions[101] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[5] = RelooperAddBlock(the_relooper, expressions[101]); + expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(6)); + { + BinaryenExpressionRef operands[] = { expressions[102] }; + expressions[103] = BinaryenCallImport(the_module, "check", operands, 1, 0); + } + relooperBlocks[6] = RelooperAddBlock(the_relooper, expressions[103]); + expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + expressions[105] = BinaryenDrop(the_module, expressions[104]); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[105]); + expressions[106] = BinaryenConst(the_module, BinaryenLiteralInt32(-2)); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[106], expressions[0]); + expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(20)); + expressions[108] = BinaryenDrop(the_module, expressions[107]); + RelooperAddBranch(relooperBlocks[1], relooperBlocks[6], expressions[0], expressions[108]); + expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt32(-6)); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[3], expressions[109], expressions[0]); + expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt32(30)); + expressions[111] = BinaryenDrop(the_module, expressions[110]); + RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[111]); + expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt32(-10)); + RelooperAddBranch(relooperBlocks[3], relooperBlocks[4], expressions[112], expressions[0]); RelooperAddBranch(relooperBlocks[3], relooperBlocks[5], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[4], relooperBlocks[5], expressions[0], expressions[0]); - expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); - RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[102]); - expressions[103] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(40)); + expressions[114] = BinaryenDrop(the_module, expressions[113]); + RelooperAddBranch(relooperBlocks[5], relooperBlocks[6], expressions[0], expressions[114]); + expressions[115] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[103]); + functions[11] = BinaryenAddFunction(the_module, "nontrivial-loop-plus-phi-to-head", functionTypes[0], varTypes, 1, expressions[115]); } the_relooper = RelooperCreate(); - expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); - expressions[105] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt32(-99)); + expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[105] }; - expressions[106] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[117] }; + expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[106], expressions[104]); - expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[118], expressions[116]); + expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[107] }; - expressions[108] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[119] }; + expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[108]); - expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[120]); + expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[109] }; - expressions[110] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[121] }; + expressions[122] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[110]); - expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[122]); + expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(3)); { - BinaryenExpressionRef operands[] = { expressions[111] }; - expressions[112] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[123] }; + expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[112]); + relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[124]); { BinaryenIndex indexes[] = { 2, 5 }; RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[1], indexes, 2, expressions[0]); } - expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(55)); + expressions[126] = BinaryenDrop(the_module, expressions[125]); { BinaryenIndex indexes[] = { 4 }; - RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[113]); + RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[2], indexes, 1, expressions[126]); } { BinaryenIndex indexes[] = { 0 }; RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[3], indexes, 0, expressions[0]); } - expressions[114] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + expressions[127] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[114]); + functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[127]); } the_relooper = RelooperCreate(); - expressions[115] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); + expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(0)); { - BinaryenExpressionRef operands[] = { expressions[115] }; - expressions[116] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[128] }; + expressions[129] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[116]); - expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[129]); + expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(1)); { - BinaryenExpressionRef operands[] = { expressions[117] }; - expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[130] }; + expressions[131] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[118]); - expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); + relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]); + expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt32(2)); { - BinaryenExpressionRef operands[] = { expressions[119] }; - expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[132] }; + expressions[133] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[120]); - expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); - RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[121], expressions[0]); + relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[133]); + expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt32(10)); + RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[134], expressions[0]); RelooperAddBranch(relooperBlocks[0], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[1], relooperBlocks[2], expressions[0], expressions[0]); RelooperAddBranch(relooperBlocks[2], relooperBlocks[1], expressions[0], expressions[0]); - expressions[122] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); + expressions[135] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 3, the_module); { BinaryenType varTypes[] = { 1, 1, 2, 1, 3, 4, 1 }; - functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[122]); + functions[13] = BinaryenAddFunction(the_module, "duffs-device", functionTypes[0], varTypes, 7, expressions[135]); } { BinaryenIndex paramTypes[] = { 0 }; functionTypes[2] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0); } the_relooper = RelooperCreate(); - expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); + expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(42)); { - BinaryenExpressionRef operands[] = { expressions[123] }; - expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0); + BinaryenExpressionRef operands[] = { expressions[136] }; + expressions[137] = BinaryenCallImport(the_module, "check", operands, 1, 0); } - expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); - expressions[126] = BinaryenReturn(the_module, expressions[125]); + expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(1337)); + expressions[139] = BinaryenReturn(the_module, expressions[138]); { - BinaryenExpressionRef children[] = { expressions[124], expressions[126] }; - expressions[127] = BinaryenBlock(the_module, "the-list", children, 2); + BinaryenExpressionRef children[] = { expressions[137], expressions[139] }; + expressions[140] = BinaryenBlock(the_module, "the-list", children, 2); } - relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[127]); - expressions[128] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); + relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[140]); + expressions[141] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module); { BinaryenType varTypes[] = { 1 }; - functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[2], varTypes, 1, expressions[128]); + functions[14] = BinaryenAddFunction(the_module, "return", functionTypes[2], varTypes, 1, expressions[141]); } raw: BinaryenModulePrint(the_module); @@ -2242,7 +2625,9 @@ raw: (i32.const 0) ) (block - (i32.const 77) + (drop + (i32.const 77) + ) (br $block$2$break) ) ) @@ -2281,7 +2666,9 @@ raw: (i32.const 0) ) (block - (i32.const 33) + (drop + (i32.const 33) + ) (br $block$2$break) ) ) @@ -2290,7 +2677,9 @@ raw: (i32.const 1) ) (block - (i32.const -66) + (drop + (i32.const -66) + ) (br $shape$0$continue) ) ) @@ -2323,7 +2712,9 @@ raw: (if (i32.const 55) (block - (i32.const 10) + (drop + (i32.const 10) + ) (block (call_import $check (i32.const 1) @@ -2331,7 +2722,9 @@ raw: ) ) (block - (i32.const 20) + (drop + (i32.const 20) + ) (block (call_import $check (i32.const 2) @@ -2374,19 +2767,25 @@ raw: (if (i32.const 55) (block - (i32.const -1) + (drop + (i32.const -1) + ) (block (call_import $check (i32.const 1) ) (block - (i32.const -3) + (drop + (i32.const -3) + ) (br $block$3$break) ) ) ) (block - (i32.const -2) + (drop + (i32.const -2) + ) (br $block$3$break) ) ) @@ -2466,7 +2865,9 @@ raw: (i32.const 0) ) (block - (i32.const 10) + (drop + (i32.const 10) + ) (br $block$2$break) ) ) @@ -2482,7 +2883,9 @@ raw: (i32.const -2) (br $block$3$break) (block - (i32.const 20) + (drop + (i32.const 20) + ) (br $block$7$break) ) ) @@ -2495,7 +2898,9 @@ raw: (i32.const -6) (br $block$4$break) (block - (i32.const 30) + (drop + (i32.const 30) + ) (br $shape$1$continue) ) ) @@ -2525,7 +2930,9 @@ raw: (i32.const 5) ) (block - (i32.const 40) + (drop + (i32.const 40) + ) (br $block$7$break) ) ) @@ -2561,7 +2968,9 @@ raw: (br $switch$1$leave) ) (block - (i32.const 55) + (drop + (i32.const 55) + ) (block (call_import $check (i32.const 2) diff --git a/test/example/c-api-kitchen-sink.txt.txt b/test/example/c-api-kitchen-sink.txt.txt index 7e32ba431..52da01f9d 100644 --- a/test/example/c-api-kitchen-sink.txt.txt +++ b/test/example/c-api-kitchen-sink.txt.txt @@ -18,340 +18,509 @@ (local $4 i32) (block $the-body (block $the-nothing - (block $the-value - (i32.clz - (i32.const -10) - ) - (i64.ctz - (i64.const -22) - ) - (i32.popcnt - (i32.const -10) - ) - (f32.neg - (f32.const -33.61199951171875) - ) - (f64.abs - (f64.const -9005.84) - ) - (f32.ceil - (f32.const -33.61199951171875) - ) - (f64.floor - (f64.const -9005.84) - ) - (f32.trunc - (f32.const -33.61199951171875) - ) - (f32.nearest - (f32.const -33.61199951171875) - ) - (f64.sqrt - (f64.const -9005.84) - ) - (i32.eqz - (i32.const -10) - ) - (i64.extend_s/i32 - (i32.const -10) - ) - (i64.extend_u/i32 - (i32.const -10) - ) - (i32.wrap/i64 - (i64.const -22) - ) - (i32.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_s/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i64.trunc_u/f32 - (f32.const -33.61199951171875) - ) - (i32.trunc_s/f64 - (f64.const -9005.84) - ) - (i64.trunc_s/f64 - (f64.const -9005.84) - ) - (i32.trunc_u/f64 - (f64.const -9005.84) - ) - (i64.trunc_u/f64 - (f64.const -9005.84) - ) - (i32.reinterpret/f32 - (f32.const -33.61199951171875) - ) - (i64.reinterpret/f64 - (f64.const -9005.84) - ) - (f32.convert_s/i32 - (i32.const -10) - ) - (f64.convert_s/i32 - (i32.const -10) - ) - (f32.convert_u/i32 - (i32.const -10) - ) - (f64.convert_u/i32 - (i32.const -10) - ) - (f32.convert_s/i64 - (i64.const -22) - ) - (f64.convert_s/i64 - (i64.const -22) - ) - (f32.convert_u/i64 - (i64.const -22) - ) - (f64.convert_u/i64 - (i64.const -22) - ) - (f64.promote/f32 - (f32.const -33.61199951171875) - ) - (f32.demote/f64 - (f64.const -9005.84) - ) - (f32.reinterpret/i32 - (i32.const -10) - ) - (f64.reinterpret/i64 - (i64.const -22) - ) - (i32.add - (i32.const -10) - (i32.const -11) - ) - (f64.sub - (f64.const -9005.84) - (f64.const -9007.33) - ) - (i32.div_s - (i32.const -10) - (i32.const -11) - ) - (i64.div_u - (i64.const -22) - (i64.const -23) - ) - (i64.rem_s - (i64.const -22) - (i64.const -23) - ) - (i32.rem_u - (i32.const -10) - (i32.const -11) - ) - (i32.and - (i32.const -10) - (i32.const -11) - ) - (i64.or - (i64.const -22) - (i64.const -23) - ) - (i32.xor - (i32.const -10) - (i32.const -11) - ) - (i64.shl - (i64.const -22) - (i64.const -23) - ) - (i64.shr_u - (i64.const -22) - (i64.const -23) - ) - (i32.shr_s - (i32.const -10) - (i32.const -11) - ) - (i32.rotl - (i32.const -10) - (i32.const -11) - ) - (i64.rotr - (i64.const -22) - (i64.const -23) - ) - (f32.div - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.copysign - (f64.const -9005.84) - (f64.const -9007.33) - ) - (f32.min - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.max - (f64.const -9005.84) - (f64.const -9007.33) - ) - (i32.eq - (i32.const -10) - (i32.const -11) - ) - (f32.ne - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (i32.lt_s - (i32.const -10) - (i32.const -11) - ) - (i64.lt_u - (i64.const -22) - (i64.const -23) - ) - (i64.le_s - (i64.const -22) - (i64.const -23) - ) - (i32.le_u - (i32.const -10) - (i32.const -11) - ) - (i64.gt_s - (i64.const -22) - (i64.const -23) - ) - (i32.gt_u - (i32.const -10) - (i32.const -11) - ) - (i32.ge_s - (i32.const -10) - (i32.const -11) - ) - (i64.ge_u - (i64.const -22) - (i64.const -23) - ) - (f32.lt - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (f64.le - (f64.const -9005.84) - (f64.const -9007.33) - ) - (f64.gt - (f64.const -9005.84) - (f64.const -9007.33) - ) - (f32.ge - (f32.const -33.61199951171875) - (f32.const -62.5) - ) - (block - ) - (if - (i32.const 1) - (i32.const 2) - (i32.const 3) - ) - (if - (i32.const 4) - (i32.const 5) - ) - (loop $out $in - (i32.const 0) - ) - (loop $in2 - (i32.const 0) - ) - (loop - (i32.const 0) - ) - (br_if $the-value - (i32.const 1) - (i32.const 0) - ) - (br_if $the-nothing - (i32.const 2) - ) - (br $the-value - (i32.const 3) - ) - (br $the-nothing) - (br_table $the-value $the-value - (i32.const 1) - (i32.const 0) - ) - (br_table $the-nothing $the-nothing - (i32.const 2) - ) - (i32.eqz - (call "$kitchen()sinker" - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (block $the-value + (drop + (i32.clz + (i32.const -10) + ) ) - ) - (i32.eqz - (i32.trunc_s/f32 - (call_import $an-imported - (i32.const 13) - (f64.const 3.7) + (drop + (i64.ctz + (i64.const -22) ) ) - ) - (i32.eqz - (call_indirect $iiIfF - (i32.const 2449) - (i32.const 13) - (i64.const 37) - (f32.const 1.2999999523162842) - (f64.const 3.7) + (drop + (i32.popcnt + (i32.const -10) + ) ) + (drop + (f32.neg + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.abs + (f64.const -9005.84) + ) + ) + (drop + (f32.ceil + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.floor + (f64.const -9005.84) + ) + ) + (drop + (f32.trunc + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.nearest + (f32.const -33.61199951171875) + ) + ) + (drop + (f64.sqrt + (f64.const -9005.84) + ) + ) + (drop + (i32.eqz + (i32.const -10) + ) + ) + (drop + (i64.extend_s/i32 + (i32.const -10) + ) + ) + (drop + (i64.extend_u/i32 + (i32.const -10) + ) + ) + (drop + (i32.wrap/i64 + (i64.const -22) + ) + ) + (drop + (i32.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_s/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.trunc_u/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i32.trunc_s/f64 + (f64.const -9005.84) + ) + ) + (drop + (i64.trunc_s/f64 + (f64.const -9005.84) + ) + ) + (drop + (i32.trunc_u/f64 + (f64.const -9005.84) + ) + ) + (drop + (i64.trunc_u/f64 + (f64.const -9005.84) + ) + ) + (drop + (i32.reinterpret/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (i64.reinterpret/f64 + (f64.const -9005.84) + ) + ) + (drop + (f32.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_s/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f64.convert_u/i32 + (i32.const -10) + ) + ) + (drop + (f32.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_s/i64 + (i64.const -22) + ) + ) + (drop + (f32.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.convert_u/i64 + (i64.const -22) + ) + ) + (drop + (f64.promote/f32 + (f32.const -33.61199951171875) + ) + ) + (drop + (f32.demote/f64 + (f64.const -9005.84) + ) + ) + (drop + (f32.reinterpret/i32 + (i32.const -10) + ) + ) + (drop + (f64.reinterpret/i64 + (i64.const -22) + ) + ) + (drop + (i32.add + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f64.sub + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (i32.div_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.div_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.rem_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.rem_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.and + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.or + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.xor + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.shl + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.shr_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.shr_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.rotl + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.rotr + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.div + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.copysign + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f32.min + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.max + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (i32.eq + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (f32.ne + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (i32.lt_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.lt_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i64.le_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.le_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.gt_s + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (i32.gt_u + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i32.ge_s + (i32.const -10) + (i32.const -11) + ) + ) + (drop + (i64.ge_u + (i64.const -22) + (i64.const -23) + ) + ) + (drop + (f32.lt + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (drop + (f64.le + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f64.gt + (f64.const -9005.84) + (f64.const -9007.33) + ) + ) + (drop + (f32.ge + (f32.const -33.61199951171875) + (f32.const -62.5) + ) + ) + (block + ) + (drop + (if + (i32.const 1) + (i32.const 2) + (i32.const 3) + ) + ) + (if + (i32.const 4) + (i32.const 5) + ) + (drop + (loop $out $in + (i32.const 0) + ) + ) + (drop + (loop $in2 + (i32.const 0) + ) + ) + (drop + (loop + (i32.const 0) + ) + ) + (br_if $the-value + (i32.const 1) + (i32.const 0) + ) + (br_if $the-nothing + (i32.const 2) + ) + (br $the-value + (i32.const 3) + ) + (br $the-nothing) + (br_table $the-value $the-value + (i32.const 1) + (i32.const 0) + ) + (br_table $the-nothing $the-nothing + (i32.const 2) + ) + (drop + (i32.eqz + (call "$kitchen()sinker" + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (i32.eqz + (i32.trunc_s/f32 + (call_import $an-imported + (i32.const 13) + (f64.const 3.7) + ) + ) + ) + ) + (drop + (i32.eqz + (call_indirect $iiIfF + (i32.const 2449) + (i32.const 13) + (i64.const 37) + (f32.const 1.2999999523162842) + (f64.const 3.7) + ) + ) + ) + (drop + (get_local $0) + ) + (set_local $0 + (i32.const 101) + ) + (drop + (tee_local $0 + (i32.const 102) + ) + ) + (drop + (i32.load + (i32.const 1) + ) + ) + (drop + (i64.load8_s offset=2 align=4 + (i32.const 8) + ) + ) + (drop + (f32.load + (i32.const 2) + ) + ) + (drop + (f64.load offset=2 + (i32.const 9) + ) + ) + (i32.store + (i32.const 10) + (i32.const 11) + ) + (i64.store offset=2 align=4 + (i32.const 110) + (i64.const 111) + ) + (drop + (select + (i32.const 3) + (i32.const 5) + (i32.const 1) + ) + ) + (return + (i32.const 1337) + ) + (nop) + (unreachable) ) - (get_local $0) - (set_local $0 - (i32.const 101) - ) - (i32.load - (i32.const 1) - ) - (i64.load8_s offset=2 align=4 - (i32.const 8) - ) - (f32.load - (i32.const 2) - ) - (f64.load offset=2 - (i32.const 9) - ) - (i32.store - (i32.const 10) - (i32.const 11) - ) - (i64.store offset=2 align=4 - (i32.const 110) - (i64.const 111) - ) - (select - (i32.const 3) - (i32.const 5) - (i32.const 1) - ) - (return - (i32.const 1337) - ) - (nop) - (unreachable) ) ) (i32.const 42) @@ -396,7 +565,9 @@ (i32.const 0) ) (block - (i32.const 77) + (drop + (i32.const 77) + ) (br $block$2$break) ) ) @@ -435,7 +606,9 @@ (i32.const 0) ) (block - (i32.const 33) + (drop + (i32.const 33) + ) (br $block$2$break) ) ) @@ -444,7 +617,9 @@ (i32.const 1) ) (block - (i32.const -66) + (drop + (i32.const -66) + ) (br $shape$0$continue) ) ) @@ -477,7 +652,9 @@ (if (i32.const 55) (block - (i32.const 10) + (drop + (i32.const 10) + ) (block (call_import $check (i32.const 1) @@ -485,7 +662,9 @@ ) ) (block - (i32.const 20) + (drop + (i32.const 20) + ) (block (call_import $check (i32.const 2) @@ -528,19 +707,25 @@ (if (i32.const 55) (block - (i32.const -1) + (drop + (i32.const -1) + ) (block (call_import $check (i32.const 1) ) (block - (i32.const -3) + (drop + (i32.const -3) + ) (br $block$3$break) ) ) ) (block - (i32.const -2) + (drop + (i32.const -2) + ) (br $block$3$break) ) ) @@ -620,7 +805,9 @@ (i32.const 0) ) (block - (i32.const 10) + (drop + (i32.const 10) + ) (br $block$2$break) ) ) @@ -636,7 +823,9 @@ (i32.const -2) (br $block$3$break) (block - (i32.const 20) + (drop + (i32.const 20) + ) (br $block$7$break) ) ) @@ -649,7 +838,9 @@ (i32.const -6) (br $block$4$break) (block - (i32.const 30) + (drop + (i32.const 30) + ) (br $shape$1$continue) ) ) @@ -679,7 +870,9 @@ (i32.const 5) ) (block - (i32.const 40) + (drop + (i32.const 40) + ) (br $block$7$break) ) ) @@ -715,7 +908,9 @@ (br $switch$1$leave) ) (block - (i32.const 55) + (drop + (i32.const 55) + ) (block (call_import $check (i32.const 2) diff --git a/test/example/relooper-fuzz.c b/test/example/relooper-fuzz.c index 65d00aa5d..9fd11096f 100644 --- a/test/example/relooper-fuzz.c +++ b/test/example/relooper-fuzz.c @@ -31,7 +31,8 @@ int main() { BinaryenAddInt32(), BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4)) - ) + ), + BinaryenInt32() ); // optionally, print the return value @@ -235,7 +236,8 @@ int main() { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), - BinaryenConst(module, BinaryenLiteralInt32(decisions[i])) + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), + BinaryenInt32() ); } } diff --git a/test/example/relooper-fuzz.txt b/test/example/relooper-fuzz.txt index b4e6c8b57..2836a05de 100644 --- a/test/example/relooper-fuzz.txt +++ b/test/example/relooper-fuzz.txt @@ -463,7 +463,9 @@ (call_import $print (i32.const 8) ) - (call $check) + (drop + (call $check) + ) ) ) (loop $shape$3$continue @@ -503,7 +505,7 @@ (if (i32.eq (i32.rem_u - (set_local $1 + (tee_local $1 (call $check) ) (i32.const 3) @@ -530,7 +532,9 @@ (call_import $print (i32.const 2) ) - (call $check) + (drop + (call $check) + ) (set_local $0 (i32.const 6) ) diff --git a/test/example/relooper-fuzz1.c b/test/example/relooper-fuzz1.c index fbbbfdd59..cca61e4f4 100644 --- a/test/example/relooper-fuzz1.c +++ b/test/example/relooper-fuzz1.c @@ -33,7 +33,8 @@ int main() { BinaryenLoad(module, 4, 0, 0, 0, BinaryenInt32(), BinaryenConst(module, BinaryenLiteralInt32(4))), BinaryenConst(module, BinaryenLiteralInt32(4)) - ) + ), + BinaryenInt32() ); // optionally, print the return value @@ -288,7 +289,8 @@ int main() { full[i] = BinaryenStore(module, 4, 0, 0, BinaryenConst(module, BinaryenLiteralInt32(8 + 4 * i)), - BinaryenConst(module, BinaryenLiteralInt32(decisions[i])) + BinaryenConst(module, BinaryenLiteralInt32(decisions[i])), + BinaryenInt32() ); } } diff --git a/test/example/relooper-fuzz1.txt b/test/example/relooper-fuzz1.txt index 437dab062..32456c82a 100644 --- a/test/example/relooper-fuzz1.txt +++ b/test/example/relooper-fuzz1.txt @@ -440,7 +440,7 @@ (if (i32.ne (i32.rem_u - (set_local $0 + (tee_local $0 (call $check) ) (i32.const 4) @@ -489,13 +489,17 @@ (call_import $print (i32.const 3) ) - (call $check) + (drop + (call $check) + ) (br $shape$6$continue) ) ) (call_import $print (i32.const 9) ) - (call $check) + (drop + (call $check) + ) ) ) |