diff options
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 21 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 77 |
2 files changed, 98 insertions, 0 deletions
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 28fd901a4..65355da4a 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -332,6 +332,27 @@ void test_relooper() { BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-tail", v, localTypes, 1, body); } + { // nontrivial loop + phi to head + RelooperRef relooper = RelooperCreate(); + RelooperBlockRef block0 = RelooperAddBlock(relooper, makeInt32(module, 0)); + RelooperBlockRef block1 = RelooperAddBlock(relooper, makeInt32(module, 1)); + RelooperBlockRef block2 = RelooperAddBlock(relooper, makeInt32(module, 2)); + RelooperBlockRef block3 = RelooperAddBlock(relooper, makeInt32(module, 3)); + RelooperBlockRef block4 = RelooperAddBlock(relooper, makeInt32(module, 4)); + RelooperBlockRef block5 = RelooperAddBlock(relooper, makeInt32(module, 5)); + RelooperBlockRef block6 = RelooperAddBlock(relooper, makeInt32(module, 6)); + RelooperAddBranch(block0, block1, NULL, makeInt32(module, 10)); + RelooperAddBranch(block1, block2, makeInt32(module, -2), NULL); + RelooperAddBranch(block1, block6, NULL, makeInt32(module, 20)); + RelooperAddBranch(block2, block3, makeInt32(module, -6), NULL); + RelooperAddBranch(block2, block1, NULL, makeInt32(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)); + BinaryenExpressionRef body = RelooperRenderAndDispose(relooper, block0, 0, module); + BinaryenFunctionRef sinker = BinaryenAddFunction(module, "loop-tail", v, localTypes, 1, body); + } BinaryenModulePrint(module); BinaryenModuleDispose(module); diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 734038a74..3c808c9a1 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -532,4 +532,81 @@ BinaryenFloat64: 4 (i32.const 2) ) ) + (func $loop-tail (type $v) + (local $0 i32) + (block + (i32.const 0) + (block + (i32.const 10) + ) + ) + (block + (loop $shape$1$break $shape$1$continue + (block + (i32.const 1) + (if + (i32.eqz + (i32.const -2) + ) + (block + (i32.const 20) + (br $shape$1$break) + ) + ) + ) + (block + (i32.const 2) + (if + (i32.const -6) + (block + (set_local $0 + (i32.const 4) + ) + (br $shape$1$break) + ) + (block + (i32.const 30) + (br $shape$1$continue) + ) + ) + ) + ) + (block + (block $shape$4$break + (if + (i32.eq + (get_local $0) + (i32.const 4) + ) + (block + (block + (i32.const 3) + (block $shape$6$break + (if + (i32.const -10) + (block + (i32.const 4) + (block + (br $shape$6$break) + ) + ) + ) + ) + ) + (block + (i32.const 5) + (block + (i32.const 40) + (br $shape$4$break) + ) + ) + ) + ) + ) + (block + (i32.const 6) + ) + ) + ) + ) ) |