blob: 2c25a70ab1e4bbb6bfea76081d7168aa9928d97a [file] [log] [blame]
BinaryenNone: 0
BinaryenInt32: 1
BinaryenInt64: 2
BinaryenFloat32: 3
BinaryenFloat64: 4
(f32.neg
(f32.const -33.61199951171875)
)
(module
(type $iiIfF (func (param i32 i64 f32 f64) (result i32)))
(type $fiF (func (param i32 f64) (result f32)))
(type $v (func))
(type $3 (func))
(import "module" "base" (func $an-imported (param i32 f64) (result f32)))
(table 1 1 anyfunc)
(elem (i32.const 0) "$kitchen()sinker")
(memory $0 1 256)
(data (i32.const 10) "hello, world")
(export "kitchen_sinker" (func "$kitchen()sinker"))
(export "mem" (memory $0))
(start $starter)
(func "$kitchen()sinker" (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32)
(local $4 i32)
(block $the-body i32
(block $the-nothing
(drop
(block $the-value i32
(drop
(i32.clz
(i32.const -10)
)
)
(drop
(i64.ctz
(i64.const -22)
)
)
(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
)
(if
(i32.const 1)
(drop
(i32.const 2)
)
(drop
(i32.const 3)
)
)
(if
(i32.const 4)
(drop
(i32.const 5)
)
)
(drop
(loop $in i32
(i32.const 0)
)
)
(drop
(loop i32
(i32.const 0)
)
)
(drop
(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 $an-imported
(i32.const 13)
(f64.const 3.7)
)
)
)
)
(drop
(i32.eqz
(call_indirect $iiIfF
(i32.const 13)
(i64.const 37)
(f32.const 1.2999999523162842)
(f64.const 3.7)
(i32.const 2449)
)
)
)
(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.load16_s offset=2 align=1
(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)
)
)
)
(i32.const 42)
)
)
(func $starter (type $v)
(nop)
)
)
raw:
(module
(type $v (func))
(type $vi (func (param i32)))
(type $i (func (result i32)))
(import "module" "check" (func $check (param i32)))
(memory $0 0)
(func $just-one-block (type $v)
(local $0 i32)
(call $check
(i32.const 1337)
)
)
(func $two-blocks (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
)
)
(func $two-blocks-plus-code (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 77)
)
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
)
)
(func $loop (type $v)
(local $0 i32)
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(block
(br $shape$0$continue)
)
)
)
)
(func $loop-plus-code (type $v)
(local $0 i32)
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 33)
)
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(block
(drop
(i32.const -66)
)
(br $shape$0$continue)
)
)
)
)
(func $split (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
)
(block
(call $check
(i32.const 2)
)
)
)
)
(func $split-plus-code (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(drop
(i32.const 10)
)
(block
(call $check
(i32.const 1)
)
)
)
(block
(drop
(i32.const 20)
)
(block
(call $check
(i32.const 2)
)
)
)
)
)
(func $if (type $v)
(local $0 i32)
(block $block$3$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
(block
(br $block$3$break)
)
)
(br $block$3$break)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $if-plus-code (type $v)
(local $0 i32)
(block $block$3$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(drop
(i32.const -1)
)
(block
(call $check
(i32.const 1)
)
(block
(drop
(i32.const -3)
)
(br $block$3$break)
)
)
)
(block
(drop
(i32.const -2)
)
(br $block$3$break)
)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $if-else (type $v)
(local $0 i32)
(block $block$4$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
(block
(br $block$4$break)
)
)
(block
(call $check
(i32.const 2)
)
(block
(br $block$4$break)
)
)
)
)
(block
(call $check
(i32.const 3)
)
)
)
(func $loop-tail (type $v)
(local $0 i32)
(block $block$3$break
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(if
(i32.const 10)
(br $shape$0$continue)
(br $block$3$break)
)
)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $nontrivial-loop-plus-phi-to-head (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 10)
)
(br $block$2$break)
)
)
(block
(block $block$7$break
(block $block$4$break
(loop $shape$1$continue
(block $block$3$break
(call $check
(i32.const 1)
)
(if
(i32.const -2)
(br $block$3$break)
(block
(drop
(i32.const 20)
)
(br $block$7$break)
)
)
)
(block
(call $check
(i32.const 2)
)
(if
(i32.const -6)
(br $block$4$break)
(block
(drop
(i32.const 30)
)
(br $shape$1$continue)
)
)
)
)
)
(block
(block $block$6$break
(call $check
(i32.const 3)
)
(if
(i32.const -10)
(block
(call $check
(i32.const 4)
)
(block
(br $block$6$break)
)
)
(br $block$6$break)
)
)
(block
(call $check
(i32.const 5)
)
(block
(drop
(i32.const 40)
)
(br $block$7$break)
)
)
)
)
(block
(call $check
(i32.const 6)
)
)
)
)
(func $switch (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(block $switch$1$leave
(block $switch$1$default
(block $switch$1$case$3
(block $switch$1$case$2
(br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default
(i32.const -99)
)
)
(block
(block
(call $check
(i32.const 1)
)
)
)
(br $switch$1$leave)
)
(block
(drop
(i32.const 55)
)
(block
(call $check
(i32.const 2)
)
)
)
(br $switch$1$leave)
)
(block
(block
(call $check
(i32.const 3)
)
)
)
(br $switch$1$leave)
)
)
(func $duffs-device (type $v)
(local $0 i32)
(local $1 i32)
(local $2 i64)
(local $3 i32)
(local $4 f32)
(local $5 f64)
(local $6 i32)
(block
(block $block$3$break
(block $block$2$break
(call $check
(i32.const 0)
)
(if
(i32.const 10)
(block
(set_local $3
(i32.const 2)
)
(br $block$2$break)
)
(block
(set_local $3
(i32.const 3)
)
(br $block$3$break)
)
)
)
)
)
(loop $shape$1$continue
(if
(i32.eq
(get_local $3)
(i32.const 2)
)
(block
(set_local $3
(i32.const 0)
)
(call $check
(i32.const 1)
)
(block
(set_local $3
(i32.const 3)
)
(br $shape$1$continue)
)
)
(if
(i32.eq
(get_local $3)
(i32.const 3)
)
(block
(set_local $3
(i32.const 0)
)
(call $check
(i32.const 2)
)
(block
(set_local $3
(i32.const 2)
)
(br $shape$1$continue)
)
)
)
)
)
)
(func $return (type $i) (result i32)
(local $0 i32)
(block $the-list
(call $check
(i32.const 42)
)
(return
(i32.const 1337)
)
)
)
)
optimized:
(module
(type $v (func))
(type $vi (func (param i32)))
(type $i (func (result i32)))
(memory $0 0)
)
module loaded from binary form:
(module
(type $0 (func (param i32 i32) (result i32)))
(memory $0 0)
(func $adder (type $0) (param $var$0 i32) (param $var$1 i32) (result i32)
(i32.add
(get_local $var$0)
(get_local $var$1)
)
)
)
(module
(type $vi (func (param i32)))
(type $v (func))
(import "spectest" "print" (func $print-i32 (param i32)))
(memory $0 0)
(start $starter)
(func $starter (type $v)
(call $print-i32
(i32.const 1234)
)
)
)
(i32.const 1234)
(module
(type $v (func))
(memory $0 0)
(func $func (type $v)
(local $0 i32)
(set_local $0
(i64.const 1234)
)
)
)
validation: 0
// beginning a Binaryen API trace
#include <math.h>
#include <map>
#include "src/binaryen-c.h"
int main() {
std::map<size_t, BinaryenFunctionTypeRef> functionTypes;
std::map<size_t, BinaryenExpressionRef> expressions;
std::map<size_t, BinaryenFunctionRef> functions;
std::map<size_t, RelooperBlockRef> relooperBlocks;
BinaryenModuleRef the_module = NULL;
RelooperRef the_relooper = NULL;
the_module = BinaryenModuleCreate();
expressions[size_t(NULL)] = BinaryenExpressionRef(NULL);
expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[2] = BinaryenConst(the_module, BinaryenLiteralInt64(2));
expressions[3] = BinaryenConst(the_module, BinaryenLiteralFloat32(3.14));
expressions[4] = BinaryenConst(the_module, BinaryenLiteralFloat64(2.1828));
expressions[5] = BinaryenConst(the_module, BinaryenLiteralFloat32(NAN));
expressions[6] = BinaryenConst(the_module, BinaryenLiteralFloat64(NAN));
expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
expressions[8] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
expressions[11] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
expressions[12] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
{
BinaryenIndex paramTypes[] = { 1, 2, 3, 4 };
functionTypes[0] = BinaryenAddFunctionType(the_module, "iiIfF", 1, paramTypes, 4);
}
expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(4));
expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(11));
expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(110));
expressions[28] = BinaryenConst(the_module, BinaryenLiteralInt64(111));
expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[30] = BinaryenUnary(the_module, 0, expressions[29]);
expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[32] = BinaryenUnary(the_module, 3, expressions[31]);
expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[34] = BinaryenUnary(the_module, 4, expressions[33]);
expressions[35] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[36] = BinaryenUnary(the_module, 6, expressions[35]);
expressions[37] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[38] = BinaryenUnary(the_module, 9, expressions[37]);
expressions[39] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[40] = BinaryenUnary(the_module, 10, expressions[39]);
expressions[41] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[42] = BinaryenUnary(the_module, 13, expressions[41]);
expressions[43] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[44] = BinaryenUnary(the_module, 14, expressions[43]);
expressions[45] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[46] = BinaryenUnary(the_module, 16, expressions[45]);
expressions[47] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[48] = BinaryenUnary(the_module, 19, expressions[47]);
expressions[49] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[50] = BinaryenUnary(the_module, 20, expressions[49]);
expressions[51] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[52] = BinaryenUnary(the_module, 22, expressions[51]);
expressions[53] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[54] = BinaryenUnary(the_module, 23, expressions[53]);
expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[56] = BinaryenUnary(the_module, 24, expressions[55]);
expressions[57] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[58] = BinaryenUnary(the_module, 25, expressions[57]);
expressions[59] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[60] = BinaryenUnary(the_module, 26, expressions[59]);
expressions[61] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[62] = BinaryenUnary(the_module, 27, expressions[61]);
expressions[63] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[64] = BinaryenUnary(the_module, 28, expressions[63]);
expressions[65] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[66] = BinaryenUnary(the_module, 29, expressions[65]);
expressions[67] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[68] = BinaryenUnary(the_module, 30, expressions[67]);
expressions[69] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[70] = BinaryenUnary(the_module, 31, expressions[69]);
expressions[71] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[72] = BinaryenUnary(the_module, 32, expressions[71]);
expressions[73] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[74] = BinaryenUnary(the_module, 33, expressions[73]);
expressions[75] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[76] = BinaryenUnary(the_module, 34, expressions[75]);
expressions[77] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[78] = BinaryenUnary(the_module, 35, expressions[77]);
expressions[79] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[80] = BinaryenUnary(the_module, 36, expressions[79]);
expressions[81] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[82] = BinaryenUnary(the_module, 37, expressions[81]);
expressions[83] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[84] = BinaryenUnary(the_module, 38, expressions[83]);
expressions[85] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[86] = BinaryenUnary(the_module, 39, expressions[85]);
expressions[87] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[88] = BinaryenUnary(the_module, 40, expressions[87]);
expressions[89] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[90] = BinaryenUnary(the_module, 41, expressions[89]);
expressions[91] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[92] = BinaryenUnary(the_module, 42, expressions[91]);
expressions[93] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[94] = BinaryenUnary(the_module, 43, expressions[93]);
expressions[95] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[96] = BinaryenUnary(the_module, 44, expressions[95]);
expressions[97] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[98] = BinaryenUnary(the_module, 45, expressions[97]);
expressions[99] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[100] = BinaryenUnary(the_module, 46, expressions[99]);
expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[103] = BinaryenBinary(the_module, 0, expressions[102], expressions[101]);
expressions[104] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
expressions[105] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[106] = BinaryenBinary(the_module, 64, expressions[105], expressions[104]);
expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[108] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[109] = BinaryenBinary(the_module, 3, expressions[108], expressions[107]);
expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[112] = BinaryenBinary(the_module, 29, expressions[111], expressions[110]);
expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[114] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[115] = BinaryenBinary(the_module, 30, expressions[114], expressions[113]);
expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[118] = BinaryenBinary(the_module, 6, expressions[117], expressions[116]);
expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[120] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[121] = BinaryenBinary(the_module, 7, expressions[120], expressions[119]);
expressions[122] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[124] = BinaryenBinary(the_module, 33, expressions[123], expressions[122]);
expressions[125] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[126] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[127] = BinaryenBinary(the_module, 9, expressions[126], expressions[125]);
expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[129] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[130] = BinaryenBinary(the_module, 35, expressions[129], expressions[128]);
expressions[131] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[133] = BinaryenBinary(the_module, 36, expressions[132], expressions[131]);
expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[135] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[136] = BinaryenBinary(the_module, 12, expressions[135], expressions[134]);
expressions[137] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[139] = BinaryenBinary(the_module, 13, expressions[138], expressions[137]);
expressions[140] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[141] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[142] = BinaryenBinary(the_module, 39, expressions[141], expressions[140]);
expressions[143] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
expressions[144] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[145] = BinaryenBinary(the_module, 53, expressions[144], expressions[143]);
expressions[146] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
expressions[147] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[148] = BinaryenBinary(the_module, 67, expressions[147], expressions[146]);
expressions[149] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
expressions[150] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[151] = BinaryenBinary(the_module, 55, expressions[150], expressions[149]);
expressions[152] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
expressions[153] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[154] = BinaryenBinary(the_module, 69, expressions[153], expressions[152]);
expressions[155] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[156] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[157] = BinaryenBinary(the_module, 15, expressions[156], expressions[155]);
expressions[158] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
expressions[159] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[160] = BinaryenBinary(the_module, 58, expressions[159], expressions[158]);
expressions[161] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[162] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[163] = BinaryenBinary(the_module, 17, expressions[162], expressions[161]);
expressions[164] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[165] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[166] = BinaryenBinary(the_module, 43, expressions[165], expressions[164]);
expressions[167] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[168] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[169] = BinaryenBinary(the_module, 44, expressions[168], expressions[167]);
expressions[170] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[171] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[172] = BinaryenBinary(the_module, 20, expressions[171], expressions[170]);
expressions[173] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[174] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[175] = BinaryenBinary(the_module, 46, expressions[174], expressions[173]);
expressions[176] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[177] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[178] = BinaryenBinary(the_module, 22, expressions[177], expressions[176]);
expressions[179] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
expressions[180] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
expressions[181] = BinaryenBinary(the_module, 23, expressions[180], expressions[179]);
expressions[182] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
expressions[183] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[184] = BinaryenBinary(the_module, 49, expressions[183], expressions[182]);
expressions[185] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
expressions[186] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[187] = BinaryenBinary(the_module, 59, expressions[186], expressions[185]);
expressions[188] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
expressions[189] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[190] = BinaryenBinary(the_module, 73, expressions[189], expressions[188]);
expressions[191] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
expressions[192] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
expressions[193] = BinaryenBinary(the_module, 74, expressions[192], expressions[191]);
expressions[194] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
expressions[195] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
expressions[196] = BinaryenBinary(the_module, 62, expressions[195], expressions[194]);
{
BinaryenExpressionRef children[] = { 0 };
expressions[197] = BinaryenBlock(the_module, NULL, children, 0);
}
expressions[198] = BinaryenIf(the_module, expressions[13], expressions[14], expressions[15]);
expressions[199] = BinaryenIf(the_module, expressions[16], expressions[17], expressions[0]);
expressions[200] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
expressions[201] = BinaryenLoop(the_module, "in", expressions[200]);
expressions[202] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
expressions[203] = BinaryenLoop(the_module, NULL, expressions[202]);
expressions[204] = BinaryenBreak(the_module, "the-value", expressions[18], expressions[19]);
expressions[205] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
expressions[206] = BinaryenBreak(the_module, "the-nothing", expressions[205], expressions[0]);
expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
expressions[208] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[207]);
expressions[209] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
{
const char* names[] = { "the-value" };
expressions[210] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[20], expressions[21]);
}
expressions[211] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
const char* names[] = { "the-nothing" };
expressions[212] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[211], expressions[0]);
}
{
BinaryenExpressionRef operands[] = { expressions[9], expressions[10], expressions[11], expressions[12] };
expressions[213] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1);
}
expressions[214] = BinaryenUnary(the_module, 20, expressions[213]);
{
BinaryenExpressionRef operands[] = { expressions[7], expressions[8] };
expressions[215] = BinaryenCallImport(the_module, "an-imported", operands, 2, 3);
}
expressions[216] = BinaryenUnary(the_module, 25, expressions[215]);
expressions[217] = BinaryenUnary(the_module, 20, expressions[216]);
expressions[218] = BinaryenConst(the_module, BinaryenLiteralInt32(2449));
{
BinaryenExpressionRef operands[] = { expressions[9], expressions[10], expressions[11], expressions[12] };
expressions[219] = BinaryenCallIndirect(the_module, expressions[218], operands, 4, "iiIfF");
}
expressions[220] = BinaryenUnary(the_module, 20, expressions[219]);
expressions[221] = BinaryenGetLocal(the_module, 0, 1);
expressions[222] = BinaryenDrop(the_module, expressions[221]);
expressions[223] = BinaryenConst(the_module, BinaryenLiteralInt32(101));
expressions[224] = BinaryenSetLocal(the_module, 0, expressions[223]);
expressions[225] = BinaryenConst(the_module, BinaryenLiteralInt32(102));
expressions[226] = BinaryenTeeLocal(the_module, 0, expressions[225]);
expressions[227] = BinaryenDrop(the_module, expressions[226]);
expressions[228] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
expressions[229] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[228]);
expressions[230] = BinaryenConst(the_module, BinaryenLiteralInt32(8));
expressions[231] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[230]);
expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
expressions[233] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[232]);
expressions[234] = BinaryenConst(the_module, BinaryenLiteralInt32(9));
expressions[235] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[234]);
expressions[236] = BinaryenStore(the_module, 4, 0, 0, expressions[25], expressions[26], 1);
expressions[237] = BinaryenStore(the_module, 8, 2, 4, expressions[27], expressions[28], 2);
expressions[238] = BinaryenSelect(the_module, expressions[22], expressions[23], expressions[24]);
expressions[239] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
expressions[240] = BinaryenReturn(the_module, expressions[239]);
expressions[241] = BinaryenNop(the_module);
expressions[242] = 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[204], expressions[206], expressions[208], expressions[209], expressions[210], expressions[212], expressions[214], expressions[217], expressions[220], expressions[222], expressions[224], expressions[227], expressions[229], expressions[231], expressions[233], expressions[235], expressions[236], expressions[237], expressions[238], expressions[240], expressions[241], expressions[242] };
expressions[243] = BinaryenBlock(the_module, "the-value", children, 95);
}
expressions[244] = BinaryenDrop(the_module, expressions[243]);
{
BinaryenExpressionRef children[] = { expressions[244] };
expressions[245] = BinaryenBlock(the_module, "the-nothing", children, 1);
}
expressions[246] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
{
BinaryenExpressionRef children[] = { expressions[245], expressions[246] };
expressions[247] = BinaryenBlock(the_module, "the-body", children, 2);
}
{
BinaryenType varTypes[] = { 1 };
functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[247]);
}
{
BinaryenIndex paramTypes[] = { 1, 4 };
functionTypes[1] = BinaryenAddFunctionType(the_module, "fiF", 3, paramTypes, 2);
}
BinaryenAddImport(the_module, "an-imported", "module", "base", functionTypes[1]);
BinaryenAddExport(the_module, "kitchen()sinker", "kitchen_sinker");
{
BinaryenFunctionRef funcs[] = { functions[0] };
BinaryenSetFunctionTable(the_module, funcs, 1);
}
expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
{
const char segment0[] = { 104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100 };
const char* segments[] = { segment0 };
BinaryenExpressionRef segmentOffsets[] = { expressions[248] };
BinaryenIndex segmentSizes[] = { 12 };
BinaryenSetMemory(the_module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1);
}
{
BinaryenIndex paramTypes[] = { 0 };
functionTypes[2] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0);
}
expressions[249] = BinaryenNop(the_module);
{
BinaryenType varTypes[] = { 0 };
functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[249]);
}
BinaryenSetStart(the_module, functions[1]);
{
BinaryenIndex paramTypes[] = { 0 };
functionTypes[3] = BinaryenAddFunctionType(the_module, NULL, 0, paramTypes, 0);
}
BinaryenModuleAutoDrop(the_module);
BinaryenModuleValidate(the_module);
BinaryenModulePrint(the_module);
(module
(type $iiIfF (func (param i32 i64 f32 f64) (result i32)))
(type $fiF (func (param i32 f64) (result f32)))
(type $v (func))
(type $3 (func))
(import "module" "base" (func $an-imported (param i32 f64) (result f32)))
(table 1 1 anyfunc)
(elem (i32.const 0) "$kitchen()sinker")
(memory $0 1 256)
(data (i32.const 10) "hello, world")
(export "kitchen_sinker" (func "$kitchen()sinker"))
(export "mem" (memory $0))
(start $starter)
(func "$kitchen()sinker" (type $iiIfF) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result i32)
(local $4 i32)
(block $the-body i32
(block $the-nothing
(drop
(block $the-value i32
(drop
(i32.clz
(i32.const -10)
)
)
(drop
(i64.ctz
(i64.const -22)
)
)
(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
)
(if
(i32.const 1)
(drop
(i32.const 2)
)
(drop
(i32.const 3)
)
)
(if
(i32.const 4)
(drop
(i32.const 5)
)
)
(drop
(loop $in i32
(i32.const 0)
)
)
(drop
(loop i32
(i32.const 0)
)
)
(drop
(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 $an-imported
(i32.const 13)
(f64.const 3.7)
)
)
)
)
(drop
(i32.eqz
(call_indirect $iiIfF
(i32.const 13)
(i64.const 37)
(f32.const 1.2999999523162842)
(f64.const 3.7)
(i32.const 2449)
)
)
)
(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.load16_s offset=2 align=1
(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)
)
)
)
(i32.const 42)
)
)
(func $starter (type $v)
(nop)
)
)
BinaryenModuleDispose(the_module);
functionTypes.clear();
expressions.clear();
functions.clear();
relooperBlocks.clear();
the_module = BinaryenModuleCreate();
expressions[size_t(NULL)] = BinaryenExpressionRef(NULL);
{
BinaryenIndex paramTypes[] = { 0 };
functionTypes[0] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0);
}
{
BinaryenIndex paramTypes[] = { 1 };
functionTypes[1] = BinaryenAddFunctionType(the_module, "vi", 0, paramTypes, 1);
}
BinaryenAddImport(the_module, "check", "module", "check", functionTypes[1]);
the_relooper = RelooperCreate();
expressions[1] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
{
BinaryenExpressionRef operands[] = { expressions[1] };
expressions[2] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[2]);
expressions[3] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[0] = BinaryenAddFunction(the_module, "just-one-block", functionTypes[0], varTypes, 1, expressions[3]);
}
the_relooper = RelooperCreate();
expressions[4] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[4] };
expressions[5] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[5]);
expressions[6] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[6] };
expressions[7] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[7]);
RelooperAddBranch(relooperBlocks[0], relooperBlocks[1], expressions[0], expressions[0]);
expressions[8] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[1] = BinaryenAddFunction(the_module, "two-blocks", functionTypes[0], varTypes, 1, expressions[8]);
}
the_relooper = RelooperCreate();
expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[9] };
expressions[10] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[10]);
expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[11] };
expressions[12] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[12]);
expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(77));
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[15]);
}
the_relooper = RelooperCreate();
expressions[16] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[16] };
expressions[17] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[17]);
expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[18] };
expressions[19] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
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[20] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[3] = BinaryenAddFunction(the_module, "loop", functionTypes[0], varTypes, 1, expressions[20]);
}
the_relooper = RelooperCreate();
expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[21] };
expressions[22] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[22]);
expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[23] };
expressions[24] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
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[29]);
}
the_relooper = RelooperCreate();
expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[30] };
expressions[31] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[31]);
expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[32] };
expressions[33] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[33]);
expressions[34] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[34] };
expressions[35] = BinaryenCallImport(the_module, "check", operands, 1, 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[37] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[5] = BinaryenAddFunction(the_module, "split", functionTypes[0], varTypes, 1, expressions[37]);
}
the_relooper = RelooperCreate();
expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[38] };
expressions[39] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[39]);
expressions[40] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[40] };
expressions[41] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[41]);
expressions[42] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[42] };
expressions[43] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
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[49]);
}
the_relooper = RelooperCreate();
expressions[50] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[50] };
expressions[51] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[51]);
expressions[52] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[52] };
expressions[53] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[53]);
expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[54] };
expressions[55] = BinaryenCallImport(the_module, "check", operands, 1, 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[57] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[7] = BinaryenAddFunction(the_module, "if", functionTypes[0], varTypes, 1, expressions[57]);
}
the_relooper = RelooperCreate();
expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[58] };
expressions[59] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[59]);
expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[60] };
expressions[61] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[61]);
expressions[62] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[62] };
expressions[63] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
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[71]);
}
the_relooper = RelooperCreate();
expressions[72] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[72] };
expressions[73] = BinaryenCallImport(the_module, "check", operands, 1, 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[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[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[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[9] = BinaryenAddFunction(the_module, "if-else", functionTypes[0], varTypes, 1, expressions[81]);
}
the_relooper = RelooperCreate();
expressions[82] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[82] };
expressions[83] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[83]);
expressions[84] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[84] };
expressions[85] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[85]);
expressions[86] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[86] };
expressions[87] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[87]);
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);
{
BinaryenType varTypes[] = { 1 };
functions[10] = BinaryenAddFunction(the_module, "loop-tail", functionTypes[0], varTypes, 1, expressions[89]);
}
the_relooper = RelooperCreate();
expressions[90] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[90] };
expressions[91] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
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[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[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[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[115]);
}
the_relooper = RelooperCreate();
expressions[116] = BinaryenConst(the_module, BinaryenLiteralInt32(-99));
expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[117] };
expressions[118] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlockWithSwitch(the_relooper, expressions[118], expressions[116]);
expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[119] };
expressions[120] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[120]);
expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[121] };
expressions[122] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[2] = RelooperAddBlock(the_relooper, expressions[122]);
expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
{
BinaryenExpressionRef operands[] = { expressions[123] };
expressions[124] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[3] = RelooperAddBlock(the_relooper, expressions[124]);
{
BinaryenIndex indexes[] = { 2, 5 };
RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[1], indexes, 2, expressions[0]);
}
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[126]);
}
{
BinaryenIndex indexes[] = { 0 };
RelooperAddBranchForSwitch(relooperBlocks[0], relooperBlocks[3], indexes, 0, expressions[0]);
}
expressions[127] = RelooperRenderAndDispose(the_relooper, relooperBlocks[0], 0, the_module);
{
BinaryenType varTypes[] = { 1 };
functions[12] = BinaryenAddFunction(the_module, "switch", functionTypes[0], varTypes, 1, expressions[127]);
}
the_relooper = RelooperCreate();
expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
{
BinaryenExpressionRef operands[] = { expressions[128] };
expressions[129] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[0] = RelooperAddBlock(the_relooper, expressions[129]);
expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
{
BinaryenExpressionRef operands[] = { expressions[130] };
expressions[131] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
relooperBlocks[1] = RelooperAddBlock(the_relooper, expressions[131]);
expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
BinaryenExpressionRef operands[] = { expressions[132] };
expressions[133] = BinaryenCallImport(the_module, "check", operands, 1, 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[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[135]);
}
{
BinaryenIndex paramTypes[] = { 0 };
functionTypes[2] = BinaryenAddFunctionType(the_module, "i", 1, paramTypes, 0);
}
the_relooper = RelooperCreate();
expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
{
BinaryenExpressionRef operands[] = { expressions[136] };
expressions[137] = BinaryenCallImport(the_module, "check", operands, 1, 0);
}
expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
expressions[139] = BinaryenReturn(the_module, expressions[138]);
{
BinaryenExpressionRef children[] = { expressions[137], expressions[139] };
expressions[140] = BinaryenBlock(the_module, "the-list", children, 2);
}
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[141]);
}
raw:
BinaryenModulePrint(the_module);
(module
(type $v (func))
(type $vi (func (param i32)))
(type $i (func (result i32)))
(import "module" "check" (func $check (param i32)))
(memory $0 0)
(func $just-one-block (type $v)
(local $0 i32)
(call $check
(i32.const 1337)
)
)
(func $two-blocks (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
)
)
(func $two-blocks-plus-code (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 77)
)
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
)
)
(func $loop (type $v)
(local $0 i32)
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(block
(br $shape$0$continue)
)
)
)
)
(func $loop-plus-code (type $v)
(local $0 i32)
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 33)
)
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(block
(drop
(i32.const -66)
)
(br $shape$0$continue)
)
)
)
)
(func $split (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
)
(block
(call $check
(i32.const 2)
)
)
)
)
(func $split-plus-code (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(drop
(i32.const 10)
)
(block
(call $check
(i32.const 1)
)
)
)
(block
(drop
(i32.const 20)
)
(block
(call $check
(i32.const 2)
)
)
)
)
)
(func $if (type $v)
(local $0 i32)
(block $block$3$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
(block
(br $block$3$break)
)
)
(br $block$3$break)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $if-plus-code (type $v)
(local $0 i32)
(block $block$3$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(drop
(i32.const -1)
)
(block
(call $check
(i32.const 1)
)
(block
(drop
(i32.const -3)
)
(br $block$3$break)
)
)
)
(block
(drop
(i32.const -2)
)
(br $block$3$break)
)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $if-else (type $v)
(local $0 i32)
(block $block$4$break
(call $check
(i32.const 0)
)
(if
(i32.const 55)
(block
(call $check
(i32.const 1)
)
(block
(br $block$4$break)
)
)
(block
(call $check
(i32.const 2)
)
(block
(br $block$4$break)
)
)
)
)
(block
(call $check
(i32.const 3)
)
)
)
(func $loop-tail (type $v)
(local $0 i32)
(block $block$3$break
(loop $shape$0$continue
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(br $block$2$break)
)
)
(block
(call $check
(i32.const 1)
)
(if
(i32.const 10)
(br $shape$0$continue)
(br $block$3$break)
)
)
)
)
(block
(call $check
(i32.const 2)
)
)
)
(func $nontrivial-loop-plus-phi-to-head (type $v)
(local $0 i32)
(block $block$2$break
(call $check
(i32.const 0)
)
(block
(drop
(i32.const 10)
)
(br $block$2$break)
)
)
(block
(block $block$7$break
(block $block$4$break
(loop $shape$1$continue
(block $block$3$break
(call $check
(i32.const 1)
)
(if
(i32.const -2)
(br $block$3$break)
(block
(drop
(i32.const 20)
)
(br $block$7$break)
)
)
)
(block
(call $check
(i32.const 2)
)
(if
(i32.const -6)
(br $block$4$break)
(block
(drop
(i32.const 30)
)
(br $shape$1$continue)
)
)
)
)
)
(block
(block $block$6$break
(call $check
(i32.const 3)
)
(if
(i32.const -10)
(block
(call $check
(i32.const 4)
)
(block
(br $block$6$break)
)
)
(br $block$6$break)
)
)
(block
(call $check
(i32.const 5)
)
(block
(drop
(i32.const 40)
)
(br $block$7$break)
)
)
)
)
(block
(call $check
(i32.const 6)
)
)
)
)
(func $switch (type $v)
(local $0 i32)
(call $check
(i32.const 0)
)
(block $switch$1$leave
(block $switch$1$default
(block $switch$1$case$3
(block $switch$1$case$2
(br_table $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$3 $switch$1$case$2 $switch$1$default
(i32.const -99)
)
)
(block
(block
(call $check
(i32.const 1)
)
)
)
(br $switch$1$leave)
)
(block
(drop
(i32.const 55)
)
(block
(call $check
(i32.const 2)
)
)
)
(br $switch$1$leave)
)
(block
(block
(call $check
(i32.const 3)
)
)
)
(br $switch$1$leave)
)
)
(func $duffs-device (type $v)
(local $0 i32)
(local $1 i32)
(local $2 i64)
(local $3 i32)
(local $4 f32)
(local $5 f64)
(local $6 i32)
(block
(block $block$3$break
(block $block$2$break
(call $check
(i32.const 0)
)
(if
(i32.const 10)
(block
(set_local $3
(i32.const 2)
)
(br $block$2$break)
)
(block
(set_local $3
(i32.const 3)
)
(br $block$3$break)
)
)
)
)
)
(loop $shape$1$continue
(if
(i32.eq
(get_local $3)
(i32.const 2)
)
(block
(set_local $3
(i32.const 0)
)
(call $check
(i32.const 1)
)
(block
(set_local $3
(i32.const 3)
)
(br $shape$1$continue)
)
)
(if
(i32.eq
(get_local $3)
(i32.const 3)
)
(block
(set_local $3
(i32.const 0)
)
(call $check
(i32.const 2)
)
(block
(set_local $3
(i32.const 2)
)
(br $shape$1$continue)
)
)
)
)
)
)
(func $return (type $i) (result i32)
(local $0 i32)
(block $the-list
(call $check
(i32.const 42)
)
(return
(i32.const 1337)
)
)
)
)
BinaryenModuleValidate(the_module);
BinaryenModuleOptimize(the_module);
BinaryenModuleValidate(the_module);
optimized:
BinaryenModulePrint(the_module);
(module
(type $v (func))
(type $vi (func (param i32)))
(type $i (func (result i32)))
(memory $0 0)
)
BinaryenModuleDispose(the_module);
functionTypes.clear();
expressions.clear();
functions.clear();
relooperBlocks.clear();
return 0;
}