diff options
-rw-r--r-- | src/passes/Inlining.cpp | 11 | ||||
-rw-r--r-- | src/passes/RemoveUnusedBrs.cpp | 6 | ||||
-rw-r--r-- | src/tools/translate-to-fuzz.h | 14 | ||||
-rw-r--r-- | test/passes/inlining-optimizing.txt | 8 | ||||
-rw-r--r-- | test/passes/inlining-optimizing.wast | 9 | ||||
-rw-r--r-- | test/passes/remove-unused-brs_shrink-level=1.txt | 20 | ||||
-rw-r--r-- | test/passes/remove-unused-brs_shrink-level=1.wast | 20 | ||||
-rw-r--r-- | test/passes/translate-to-fuzz.txt | 1977 |
8 files changed, 1041 insertions, 1024 deletions
diff --git a/src/passes/Inlining.cpp b/src/passes/Inlining.cpp index 710fc00ff..192480d26 100644 --- a/src/passes/Inlining.cpp +++ b/src/passes/Inlining.cpp @@ -155,7 +155,6 @@ static Expression* doInlining(Module* module, Function* into, InliningAction& ac auto* call = (*action.callSite)->cast<Call>(); Builder builder(*module); auto* block = Builder(*module).makeBlock(); - block->type = call->type; block->name = Name(std::string("__inlined_func$") + from->name.str); *action.callSite = block; // set up a locals mapping @@ -191,6 +190,16 @@ static Expression* doInlining(Module* module, Function* into, InliningAction& ac auto* contents = ExpressionManipulator::copy(from->body, *module); updater.walk(contents); block->list.push_back(contents); + block->type = call->type; + // if the function returned a value, we just set the block containing the + // inlined code to have that type. or, if the function was void and + // contained void, that is fine too. a bad case is a void function in which + // we have unreachable code, so we would be replacing a void call with an + // unreachable; we need to handle + if (contents->type == unreachable && block->type == none) { + // make the block reachable by adding a break to it + block->list.push_back(builder.makeBreak(block->name)); + } return block; } diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp index e627ce138..e307ec414 100644 --- a/src/passes/RemoveUnusedBrs.cpp +++ b/src/passes/RemoveUnusedBrs.cpp @@ -482,9 +482,11 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs>> { // a "selectified" condition that executes both. for (Index i = 0; i < list.size() - 1; i++) { auto* br1 = list[i]->dynCast<Break>(); - if (!br1 || !br1->condition) continue; + // avoid unreachable brs, as they are dead code anyhow, and after merging + // them the outer scope could need type changes + if (!br1 || !br1->condition || br1->type == unreachable) continue; auto* br2 = list[i + 1]->dynCast<Break>(); - if (!br2 || !br2->condition) continue; + if (!br2 || !br2->condition || br2->type == unreachable) continue; if (br1->name == br2->name) { assert(!br1->value && !br2->value); if (!EffectAnalyzer(passOptions, br2->condition).hasSideEffects()) { diff --git a/src/tools/translate-to-fuzz.h b/src/tools/translate-to-fuzz.h index 307604af6..74a457013 100644 --- a/src/tools/translate-to-fuzz.h +++ b/src/tools/translate-to-fuzz.h @@ -259,16 +259,16 @@ private: labelIndex = 0; assert(breakableStack.empty()); assert(hangStack.empty()); + // with small chance, make the body unreachable + auto bodyType = func->result; + if (oneIn(10)) { + bodyType = unreachable; + } // with reasonable chance make the body a block if (oneIn(2)) { - func->body = makeBlock(func->result); + func->body = makeBlock(bodyType); } else { - // with very small chance, make the body unreachable - if (oneIn(20)) { - func->body = make(unreachable); - } else { - func->body = make(func->result); - } + func->body = make(bodyType); } if (HANG_LIMIT > 0) { func->body = builder.makeSequence( diff --git a/test/passes/inlining-optimizing.txt b/test/passes/inlining-optimizing.txt index e1f81e54f..19c580063 100644 --- a/test/passes/inlining-optimizing.txt +++ b/test/passes/inlining-optimizing.txt @@ -33,3 +33,11 @@ (nop) ) ) +(module + (type $0 (func (result i32))) + (type $1 (func)) + (memory $0 0) + (func $main (type $0) (result i32) + (unreachable) + ) +) diff --git a/test/passes/inlining-optimizing.wast b/test/passes/inlining-optimizing.wast index 082c4e98a..4f4f348a6 100644 --- a/test/passes/inlining-optimizing.wast +++ b/test/passes/inlining-optimizing.wast @@ -76,4 +76,13 @@ (drop (get_local $z)) ) ) +(module + (func $main (result i32) + (call $func_51) + (i32.const 0) + ) + (func $func_51 + (unreachable) ;; void function but having unreachable body, when inlined, type must be fixed + ) +) diff --git a/test/passes/remove-unused-brs_shrink-level=1.txt b/test/passes/remove-unused-brs_shrink-level=1.txt index a26f4ebf4..fb739356c 100644 --- a/test/passes/remove-unused-brs_shrink-level=1.txt +++ b/test/passes/remove-unused-brs_shrink-level=1.txt @@ -139,4 +139,24 @@ ) ) ) + (func $br-if-unreachable-pair (type $1) + (block $label$14 + (br_if $label$14 + (unreachable) + ) + (br_if $label$14 + (i32.const 0) + ) + ) + ) + (func $br-if-unreachable-pair2 (type $1) + (block $label$14 + (br_if $label$14 + (i32.const 0) + ) + (br_if $label$14 + (unreachable) + ) + ) + ) ) diff --git a/test/passes/remove-unused-brs_shrink-level=1.wast b/test/passes/remove-unused-brs_shrink-level=1.wast index 88977be9e..11510dea7 100644 --- a/test/passes/remove-unused-brs_shrink-level=1.wast +++ b/test/passes/remove-unused-brs_shrink-level=1.wast @@ -93,5 +93,25 @@ ) ) ) + (func $br-if-unreachable-pair + (block $label$14 + (br_if $label$14 + (unreachable) + ) + (br_if $label$14 + (i32.const 0) + ) + ) + ) + (func $br-if-unreachable-pair2 + (block $label$14 + (br_if $label$14 + (i32.const 0) + ) + (br_if $label$14 + (unreachable) + ) + ) + ) ) diff --git a/test/passes/translate-to-fuzz.txt b/test/passes/translate-to-fuzz.txt index b426766b5..b966a4164 100644 --- a/test/passes/translate-to-fuzz.txt +++ b/test/passes/translate-to-fuzz.txt @@ -2,11 +2,7 @@ (global $hangLimit (mut i32) (i32.const 100)) (memory $0 1 1) (export "func_0" (func $func_0)) - (export "func_2" (func $func_2)) - (export "func_4" (func $func_4)) - (export "func_5" (func $func_5)) - (export "func_7" (func $func_7)) - (export "func_8" (func $func_8)) + (export "func_6" (func $func_6)) (export "hangLimitInitializer" (func $hangLimitInitializer)) (func $func_0 (result i32) (local $0 f32) @@ -18,7 +14,7 @@ (get_global $hangLimit) ) (return - (i32.const -5) + (i32.const -11) ) ) (set_global $hangLimit @@ -28,113 +24,113 @@ ) ) ) - (block $label$0 (result i32) - (if - (loop $label$1 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -37) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) + (loop $label$0 + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (select - (loop $label$10 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 32767) - ) + (return + (i32.const 26963) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (i64.trunc_u/f64 + (drop + (loop $label$3 + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (return + (i32.const 32767) ) ) - (block $label$11 (result i32) - (i32.const 24342) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) ) ) - (i32.load8_s offset=2 - (i32.and - (br_if $label$0 - (i32.trunc_s/f64 - (loop $label$14 (result f64) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 0) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$15 (result f64) - (br $label$1) - ) + (return + (i32.const -73) + ) + ) + ) + ) + ) + ) + (func $func_1 (result f64) + (local $0 i32) + (local $1 f64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f64.const 9223372036854775808) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$0 (result f64) + (drop + (if (result i64) + (select + (get_local $0) + (i32.const 84414006) + (select + (i32.const 32767) + (i32.const -1) + (loop $label$1 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) ) ) - (i32.eqz - (i32.trunc_u/f64 - (loop $label$12 (result f64) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -128) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$13 (result f64) - (return - (i32.const -10) - ) - ) - ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) - (i32.const 31) + (block $label$2 (result i32) + (return + (get_local $1) + ) + ) ) ) - (br_if $label$0 - (loop $label$2 (result i32) + ) + (if (result i64) + (i32.eqz + (loop $label$9 (result i32) (block (if (i32.eqz (get_global $hangLimit) ) (return - (i32.const 1) + (f64.const 19) ) ) (set_global $hangLimit @@ -144,465 +140,438 @@ ) ) ) - (block $label$3 (result i32) - (i32.popcnt - (select - (if (result i32) - (i32.eqz - (if (result i32) - (i32.eqz - (i32.const -1) + (block $label$10 (result i32) + (i32.load8_s offset=3 + (i32.and + (tee_local $0 + (tee_local $0 + (select + (i32.load16_u offset=4 align=1 + (i32.and + (select + (get_local $0) + (get_local $0) + (select + (i64.lt_s + (loop $label$12 (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (i64.const 32767) + ) + (i64.const 251) + ) + (i32.trunc_u/f64 + (get_local $1) + ) + (br_if $label$10 + (i32.load16_u offset=3 + (i32.and + (i32.const 20) + (i32.const 31) + ) + ) + (get_local $0) + ) + ) + ) + (i32.const 31) + ) ) - (i32.const 0) - (i32.const 0) - ) - ) - (block $label$5 (result i32) - (loop $label$6 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) + (loop $label$13 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) ) - (return - (i32.const -41) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) ) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) + (block $label$14 (result i32) + (return + (get_local $1) ) ) ) - (i64.lt_s - (i64.const 1100) - (if (result i64) - (i32.eqz - (i32.const -88) - ) - (get_local $1) - (get_local $1) + (if (result i32) + (i32.eqz + (get_local $0) ) - ) - ) - ) - (block $label$7 (result i32) - (br $label$1) - ) - ) - (select - (br_if $label$3 - (i32.const 65535) - (loop $label$8 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 10) - ) + (block $label$11 (result i32) + (get_local $0) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (i32.popcnt + (get_local $0) ) ) - (block $label$9 (result i32) - (i32.const 127) - ) ) ) - (i32.const 67372036) - (i32.const -72) - ) - (br_if $label$3 - (block $label$4 (result i32) - (br $label$2) - ) - (i32.const -2147483648) ) + (i32.const 31) ) ) ) ) - (i32.eqz - (i32.const -1) - ) - ) - ) - ) - (block $label$16 - (br_if $label$16 - (i32.eqz - (block $label$17 (result i32) - (br $label$16) - ) ) - ) - (f32.store offset=3 - (i32.const 5661) - (call $deNan32 - (select - (if (result f32) - (i32.eqz - (i32.const 23) - ) - (block $label$23 (result f32) - (if (result f32) - (i32.eqz - (i32.const 3330) + (block $label$15 (result i64) + (block $label$16 (result i64) + (select + (br_if $label$16 + (i64.const 1) + (i32.eqz + (tee_local $0 + (select + (get_local $0) + (get_local $0) + (get_local $0) + ) ) - (block $label$24 (result f32) - (br $label$16) + ) + ) + (loop $label$21 (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) ) - (f32.load offset=22 - (block $label$25 (result i32) - (i32.const -1) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) + (block $label$22 (result i64) + (return + (get_local $1) + ) + ) ) - (f32.load offset=1 align=1 - (i32.and - (if (result i32) - (i32.trunc_u/f32 - (call $deNan32 - (select - (loop $label$27 (result f32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -31) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (get_local $0) + (loop $label$17 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f64.const -9223372036854775808) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$18 (result i32) + (if + (i32.eqz + (select + (i32.const -128) + (i32.const -12) + (i32.const 1561467741) + ) + ) + (block $label$19 + (nop) + ) + (loop $label$20 + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (block $label$28 (result f32) - (br $label$16) + (return + (f64.const -nan:0xfffffffffff83) ) - (loop $label$26 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 65518) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (if (result i32) - (i32.const 1) - (i32.const -32768) - (i32.const 1392974931) - ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) + (set_local $0 + (get_local $0) + ) ) - (call $func_0) - (i32.trunc_s/f32 - (tee_local $2 - (f32.const 9223372036854775808) + ) + (tee_local $0 + (f32.lt + (call $deNan32 + (f32.min + (f32.const 18446744073709551615) + (f32.const 11) + ) + ) + (call $deNan32 + (select + (f32.const 2147483648) + (f32.const 18446744073709551615) + (get_local $0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (select + (i64.load32_u offset=3 align=2 + (i32.and + (i32.load16_u offset=4 + (i32.and + (tee_local $0 + (if (result i32) + (i32.trunc_u/f64 + (get_local $1) + ) + (block $label$27 (result i32) + (get_local $0) + ) + (block $label$28 (result i32) + (get_local $0) ) ) ) (i32.const 31) ) ) + (i32.const 31) ) - (f32.load offset=4 - (i32.and - (br_if $label$0 - (i32.load8_u offset=3 - (i32.and - (loop $label$36 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -128) - ) + ) + (i64.const 80) + (i32.trunc_s/f32 + (call $deNan32 + (f32.copysign + (f32.const 1.8061622339155704e-31) + (if (result f32) + (i32.eqz + (loop $label$23 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (return + (f64.const 2.1384722118162242e-260) ) ) - (block $label$37 (result i32) - (br $label$16) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) ) ) - (i32.const 31) - ) - ) - (i32.eqz - (block $label$29 (result i32) - (if (result i32) - (i32.const 0) - (block $label$30 (result i32) - (if (result i32) - (i32.eqz - (select - (f32.lt - (get_local $2) - (get_local $2) - ) - (select - (select - (i32.const -101) - (i32.const 52) - (i32.const 2147483647) - ) - (i32.const 6733) - (i32.const -12) - ) - (i32.load8_s offset=22 - (i32.and - (i32.const 976638003) - (i32.const 31) - ) - ) - ) - ) - (block $label$31 (result i32) - (br $label$16) - ) - (block $label$32 (result i32) - (br $label$16) - ) + (i32.wrap/i64 + (if (result i64) + (i32.eqz + (get_local $0) ) - ) - (block $label$33 (result i32) - (f64.store offset=2 - (i32.and - (loop $label$34 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -2147483648) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$35 (result i32) - (i32.trunc_u/f32 - (get_local $2) - ) - ) + (i64.const 18752) + (select + (i64.const 650785547958815753) + (i64.const 8463519829359949880) + (block $label$24 (result i32) + (select + (get_local $0) + (i32.const 65535) + (get_local $0) ) - (i32.const 31) ) - (f64.const 6409) ) - (br $label$16) ) ) ) ) + (block $label$25 (result f32) + (f32.const 14385) + ) + (f32.const 4.2612939233197215e-37) ) - (i32.const 31) ) ) - (if (result i32) - (i32.const 2147483647) - (block $label$18 (result i32) - (f32.store offset=1 - (i32.and - (br_if $label$18 - (i32.load8_s offset=22 - (i32.and - (br_if $label$0 - (block $label$19 (result i32) - (return - (i32.const 201) - ) - ) - (i32.const 1465323825) - ) - (i32.const 31) - ) + ) + ) + ) + (block $label$29 (result i64) + (block $label$30 (result i64) + (return + (get_local $1) + ) + ) + ) + ) + ) + (if + (block $label$31 (result i32) + (block $label$32 + (if + (block $label$33 (result i32) + (loop $label$34 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f64.const -nan:0xffffffffffff8) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (if (result i32) + (i32.eqz + (if (result i32) + (block $label$35 (result i32) + (return + (get_local $1) ) - (i32.load8_u offset=4 - (i32.and - (br_if $label$0 - (i32.load16_s offset=3 - (i32.and - (f32.gt + ) + (i32.trunc_s/f64 + (call $deNan64 + (f64.convert_u/i32 + (select + (get_local $0) + (if (result i32) + (i32.eqz + (block $label$36 (result i32) (get_local $0) - (f32.load offset=2 align=1 - (i32.and - (i32.const 65453) - (i32.const 31) - ) - ) ) - (i32.const 31) ) + (i64.gt_u + (i64.const 155730402379) + (i64.const 15) + ) + (i32.const -2147483648) ) - (i32.const 2147483647) + (get_local $0) ) - (i32.const 31) ) ) ) - (i32.const 31) - ) - (block $label$20 (result f32) - (call $deNan32 - (f32.convert_u/i64 - (i64.trunc_u/f32 - (call $deNan32 - (f32.min - (tee_local $0 - (f32.const 2.8411366687849113e-29) + (block $label$37 (result i32) + (drop + (f64.const 65483) + ) + (select + (get_local $0) + (i32.trunc_s/f64 + (block $label$38 (result f64) + (loop $label$39 (result f64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) ) - (block $label$21 (result f32) - (br $label$16) + (call $deNan64 + (f64.add + (get_local $1) + (get_local $1) + ) ) ) ) ) + (i32.const 1751457892) ) ) ) ) - (br $label$16) - ) - (block $label$22 (result i32) - (i32.const -44) - ) - ) - ) - ) - ) - ) - (block $label$38 - (if - (i32.eqz - (i32.const 73) - ) - (block $label$39 - (loop $label$40 - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 2147483647) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) + (i32.reinterpret/f32 + (f32.const 9223372036854775808) ) + (get_local $0) ) ) - (nop) ) - ) - (block $label$41 - (loop $label$42 - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 167857947) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$43 - (if - (block $label$44 (result i32) - (if - (select - (i32.const 68027396) - (call $func_0) - (i32.const 127) - ) - (loop $label$45 - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 2147483647) - ) + (nop) + (block $label$40 + (set_local $1 + (call $deNan64 + (select + (f64.load offset=22 align=4 + (i32.and + (if (result i32) + (i32.const -124) + (block $label$43 (result i32) + (br $label$32) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (block $label$44 (result i32) + (get_local $0) ) ) - (set_local $2 - (if (result f32) - (i32.eqz - (i32.const 0) - ) - (block $label$46 (result f32) - (br $label$43) + (i32.const 31) + ) + ) + (call $deNan64 + (f64.copysign + (call $deNan64 + (f64.reinterpret/i64 + (i64.ctz + (i64.trunc_u/f32 + (f32.const 65525) + ) ) - (f32.const 70) ) ) - ) - (block $label$47 - (nop) + (get_local $1) ) ) - (loop $label$48 (result i32) + (loop $label$41 (result i32) (block (if (i32.eqz (get_global $hangLimit) ) (return - (i32.const 218628885) + (f64.const 9) ) ) (set_global $hangLimit @@ -612,51 +581,44 @@ ) ) ) - (i32.const 134561796) + (block $label$42 (result i32) + (br $label$40) + ) ) ) - (block $label$49 - (loop $label$50 - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -73) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) + ) + ) + ) + ) + ) + (return + (get_local $1) + ) + ) + (block $label$45 + (block $label$46 + (br_if $label$45 + (tee_local $0 + (i32.trunc_s/f64 + (loop $label$47 (result f64) + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (f32.store offset=1 - (i32.and - (if (result i32) - (i32.eqz - (i32.const -1) - ) - (f64.gt - (f64.const 2.314826290848667e-289) - (f64.const 2.5152972121526945e-172) - ) - (i32.const -71) - ) - (i32.const 31) - ) - (call $deNan32 - (f32.convert_u/i32 - (i32.const -32) - ) - ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) - (block $label$51 - (nop) + (block $label$48 (result f64) + (br $label$45) ) ) ) @@ -664,60 +626,87 @@ ) ) ) - ) - (block $label$52 - (f64.store offset=4 align=4 - (i32.and - (block $label$53 (result i32) - (return - (i32.const -11) - ) - ) - (i32.const 31) + (block $label$49 + (nop) + (br_if $label$49 + (get_local $0) ) - (f64.const 3402823466385288598117041e14) ) ) - (return - (i32.const 22064) - ) - ) - ) - (func $func_1 (result f32) - (block - (if + (if (result f64) (i32.eqz - (get_global $hangLimit) + (i32.trunc_u/f32 + (f32.const 2.0658355161339533e-21) + ) ) - (return - (f32.const -nan:0x7fffd7) + (call $deNan64 + (select + (get_local $1) + (if (result f64) + (i32.eqz + (get_local $0) + ) + (block $label$50 (result f64) + (return + (get_local $1) + ) + ) + (block $label$51 (result f64) + (return + (get_local $1) + ) + ) + ) + (get_local $0) + ) ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) + (block $label$52 (result f64) + (if + (i32.reinterpret/f32 + (f32.const -nan:0x7fffb9) + ) + (nop) + (drop + (f64.const 8.308760937752171e-246) + ) + ) + (drop + (loop $label$53 (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (get_local $1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$54 (result i64) + (i64.const -48) + ) + ) + ) + (return + (f64.const 65520) + ) ) ) ) - (block $label$0 (result f32) - (nop) - (return - (f32.const -nan:0x7fffcc) - ) - ) ) - (func $func_2 (result i64) - (local $0 f64) - (local $1 f32) + (func $func_2 (param $0 f32) (block (if (i32.eqz (get_global $hangLimit) ) - (return - (i64.const 65535) - ) + (return) ) (set_global $hangLimit (i32.sub @@ -726,46 +715,132 @@ ) ) ) - (i64.const -75) - ) - (func $func_3 (result f32) - (block + (block $label$0 (if (i32.eqz - (get_global $hangLimit) - ) - (return - (f32.const 0) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$0 (result f32) - (if (result f32) - (i32.eqz - (call $func_0) + (if (result i32) + (call $func_0) + (block $label$1 (result i32) + (block $label$2 + (loop $label$3 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$4 + (nop) + ) + ) + ) + (if (result i32) + (i32.eqz + (if (result i32) + (i32.load8_s offset=4 + (i32.and + (if (result i32) + (i32.eqz + (call $func_0) + ) + (block $label$5 (result i32) + (br $label$0) + ) + (block $label$6 (result i32) + (br $label$0) + ) + ) + (i32.const 31) + ) + ) + (i32.const 359492883) + (call $func_0) + ) + ) + (block $label$7 (result i32) + (br $label$0) + ) + (block $label$8 (result i32) + (i32.const 22536) + ) + ) + ) + (block $label$9 (result i32) + (nop) + (br_if $label$0 + (i32.eqz + (block $label$10 (result i32) + (br $label$0) + ) + ) + ) + (br $label$0) + ) + ) ) - (block $label$1 (result f32) + (if + (i32.const 65441) (nop) - (call $deNan32 - (select - (f32.load offset=22 align=1 - (i32.and - (i32.wrap/i64 - (loop $label$2 (result i64) + (block $label$11 + (loop $label$12 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$13 + (nop) + ) + ) + ) + ) + (block $label$14 + (if + (i32.eqz + (call $func_0) + ) + (block $label$15 + (loop $label$16 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$17 + (block $label$18 + (loop $label$19 (block (if (i32.eqz (get_global $hangLimit) ) - (return - (f32.const -88) - ) + (return) ) (set_global $hangLimit (i32.sub @@ -774,181 +849,214 @@ ) ) ) - (block $label$3 (result i64) - (select - (block $label$5 (result i64) - (return - (f32.const 65479) + (nop) + ) + ) + ) + ) + ) + (block $label$20 + (loop $label$21 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (if + (i32.trunc_u/f64 + (call $deNan64 + (f64.convert_u/i32 + (i32.clz + (call $func_0) + ) + ) + ) + ) + (nop) + (drop + (if (result i64) + (i32.eqz + (loop $label$22 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) ) ) - (if (result i64) - (i32.const 0) - (block $label$6 (result i64) - (br $label$2) + (block $label$23 (result i32) + (select + (i32.const 2113936401) + (i32.const 0) + (select + (i32.const 2147483647) + (i32.const 1297751887) + (i32.const 5191) + ) ) - (block $label$7 (result i64) - (return - (f32.const -109) + ) + ) + ) + (block $label$24 (result i64) + (br $label$0) + ) + (block $label$25 (result i64) + (loop $label$26 (result i64) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) - (block $label$4 (result i32) - (return - (f32.const 1.9142481055608796e-22) + (block $label$27 (result i64) + (i64.reinterpret/f64 + (f64.const -nan:0xfffffffffffb7) ) ) ) ) ) ) - (i32.const 31) ) ) - (call $deNan32 - (f32.demote/f64 - (call $deNan64 - (f64.add - (f64.const -nan:0xfffffffffffe6) - (call $deNan64 - (select - (f64.const 6.146610220788184e-183) - (loop $label$18 (result f64) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (f32.const -93) - ) + (drop + (call $func_1) + ) + (block $label$28 + (if + (i32.const 18500) + (nop) + (if + (i32.eqz + (i32.const -122) + ) + (block $label$29 + (set_local $0 + (loop $label$30 (result f32) + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) - (block $label$19 (result f64) - (call $deNan64 - (f64.nearest - (call $deNan64 - (f64.convert_u/i32 - (i32.const -45) - ) - ) + ) + (f32.load offset=22 align=2 + (i32.and + (block $label$31 (result i32) + (i64.eqz + (i64.const -2147483648) ) ) + (i32.const 31) ) ) - (block $label$10 (result i32) - (br_if $label$10 - (if (result i32) - (select - (call $func_0) - (i32.trunc_s/f64 - (f64.const -nan:0xfffffffffffdd) - ) - (if (result i32) - (i32.eqz - (i32.const 2113936401) - ) - (select - (loop $label$15 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (f32.const -nan:0x7fffea) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (i32.const -90) - ) - (i32.const 2097561141) - (i32.const 127) - ) - (i32.const 5918) - ) - ) - (block $label$16 (result i32) - (return - (f32.const 18446744073709551615) - ) - ) - (block $label$17 (result i32) - (return - (f32.const 253) - ) - ) + ) + ) + ) + (f32.store offset=4 align=1 + (i32.and + (loop $label$32 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) ) - (f64.le - (loop $label$11 (result f64) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (f32.const 1.1754943508222875e-38) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$12 (result f64) - (block $label$13 (result f64) - (return - (f32.const 3402823466385288598117041e14) - ) - ) - ) - ) - (f64.const -88) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) ) ) ) + (i32.wrap/i64 + (i64.const -125) + ) + ) + (i32.const 31) + ) + (f32.load offset=4 align=1 + (i32.and + (i32.const 23) + (i32.const 31) ) ) ) ) ) + (br_if $label$0 + (i32.eqz + (i32.const -128) + ) + ) ) - (i32.const 74) ) ) ) - (block $label$20 (result f32) - (nop) - (nop) - (return - (f32.const -3) + ) + (br_if $label$0 + (loop $label$33 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$34 (result i32) + (br $label$0) ) ) ) ) ) - (func $func_4 (result i64) - (local $0 i32) + (func $func_3 (param $0 f64) (param $1 f64) (param $2 f64) (result f32) (block (if (i32.eqz (get_global $hangLimit) ) (return - (i64.const 9223372036854775807) + (f32.const -nan:0x7fff97) ) ) (set_global $hangLimit @@ -958,16 +1066,50 @@ ) ) ) - (block $label$0 (result i64) - (return - (i64.const 9223372036854775807) + (call $deNan32 + (f32.sqrt + (if (result f32) + (loop $label$0 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (f32.const 9223372036854775808) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$1 (result i32) + (return + (f32.const 9223372036854775808) + ) + ) + ) + (block $label$2 (result f32) + (block $label$3 (result f32) + (f32.const 2147483648) + ) + ) + (f32.const 8764) + ) ) ) ) - (func $func_5 - (local $0 f64) - (local $1 i32) - (local $2 i32) + (func $func_4 + (local $0 i64) + (local $1 i64) + (local $2 f32) + (local $3 f64) + (local $4 f64) + (local $5 f64) + (local $6 f32) (block (if (i32.eqz @@ -982,24 +1124,16 @@ ) ) ) - (drop - (call $func_3) - ) + (nop) ) - (func $func_6 (result f32) - (local $0 i64) - (local $1 f32) - (local $2 f64) - (local $3 i64) - (local $4 i64) - (local $5 f32) + (func $func_5 (param $0 i64) (param $1 i64) (result f64) (block (if (i32.eqz (get_global $hangLimit) ) (return - (f32.const -1) + (f64.const -100) ) ) (set_global $hangLimit @@ -1009,18 +1143,17 @@ ) ) ) - (call $func_1) + (f64.const 1) ) - (func $func_7 (result f32) - (local $0 f32) - (local $1 i32) + (func $func_6 (result i32) + (local $0 f64) (block (if (i32.eqz (get_global $hangLimit) ) (return - (get_local $0) + (i32.const 2147483647) ) ) (set_global $hangLimit @@ -1030,153 +1163,90 @@ ) ) ) - (if (result f32) - (tee_local $1 - (tee_local $1 - (i32.const 65535) - ) - ) - (loop $label$0 (result f32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (get_local $0) + (select + (select + (loop $label$1 (result i32) + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (i32.const 0) + ) ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) ) ) - ) - (block $label$1 (result f32) - (tee_local $0 - (tee_local $0 - (if (result f32) - (i32.load16_s offset=22 align=1 - (i32.and - (if (result i32) - (tee_local $1 - (get_local $1) - ) - (block $label$2 (result i32) - (return - (get_local $0) - ) - ) - (block $label$3 (result i32) - (return - (get_local $0) + (block $label$2 (result i32) + (i32.load offset=4 + (br_if $label$2 + (i32.const -76) + (i32.eqz + (i32.load8_s offset=4 + (i32.and + (i32.load offset=22 align=1 + (i32.and + (i32.const 92) + (i32.const 31) ) ) - ) - (i32.const 31) - ) - ) - (tee_local $0 - (f32.load offset=22 - (i32.and - (i32.const 32767) (i32.const 31) ) ) ) - (block $label$4 (result f32) - (br $label$0) - ) ) ) ) ) + (block $label$3 (result i32) + (return + (i32.const 26) + ) + ) + (call $func_0) ) - (block $label$5 (result f32) - (br_if $label$5 - (tee_local $0 - (call $deNan32 - (f32.max - (f32.load offset=22 - (i32.and - (select - (tee_local $1 - (call $func_0) - ) - (tee_local $1 - (i32.load8_s offset=4 + (select + (block $label$9 (result i32) + (loop $label$10 + (block + (if + (i32.eqz + (get_global $hangLimit) + ) + (return + (i32.const 1) + ) + ) + (set_global $hangLimit + (i32.sub + (get_global $hangLimit) + (i32.const 1) + ) + ) + ) + (block $label$11 + (i32.store16 offset=2 align=1 + (i32.const -91) + (i32.load16_s offset=4 align=1 + (i32.ctz + (block $label$12 (result i32) + (select + (i32.load offset=4 align=2 (i32.and - (block $label$10 (result i32) - (return - (f32.const -27) - ) - ) + (i32.const -113) (i32.const 31) ) ) - ) - (i32.rem_u - (loop $label$8 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (get_local $0) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$9 (result i32) - (i32.shr_u - (select - (i32.const 1497849685) - (tee_local $1 - (tee_local $1 - (get_local $1) - ) - ) - (get_local $1) - ) - (get_local $1) - ) - ) - ) (call $func_0) - ) - ) - (i32.const 31) - ) - ) - (loop $label$11 (result f32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (get_local $0) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$12 (result f32) - (tee_local $0 - (block $label$13 (result f32) - (return - (f32.const -nan:0x7fffec) + (block $label$13 (result i32) + (return + (i32.const -32768) + ) ) ) ) @@ -1185,32 +1255,30 @@ ) ) ) - (i32.eqz - (block $label$6 (result i32) - (i32.load16_s offset=4 align=1 + (i32.const 255) + ) + (i32.const 127) + (select + (if (result i32) + (block $label$4 (result i32) + (i32.load offset=22 (i32.and - (loop $label$7 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (f32.const 65486) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) + (br_if $label$4 + (i32.load16_u offset=2 + (i32.and + (i32.const 226) + (i32.const 31) ) ) - (tee_local $1 - (i32.load offset=22 - (i32.and - (get_local $1) - (i32.const 31) + (i32.eqz + (select + (block $label$5 (result i32) + (i32.const -32768) + ) + (i32.const 354161438) + (i64.gt_s + (i64.const -18) + (i64.const 2835340575676513842) ) ) ) @@ -1219,153 +1287,34 @@ ) ) ) - ) - ) - ) - ) - ) - (func $func_8 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 65535) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$0 (result i32) - (f32.eq - (f32.const -nan:0x7ffff1) - (call $deNan32 - (select - (block $label$3 (result f32) + (i32.const -128) + (block $label$6 (result i32) (return - (i32.const 1) + (i32.const 65442) ) ) - (if (result f32) - (i32.eqz - (i32.const 709173281) - ) - (block $label$4 (result f32) - (f32.const 8.104309321630391e-21) - ) - (block $label$5 (result f32) - (drop - (i32.shr_u - (br_if $label$0 - (block $label$7 (result i32) - (return - (i32.const 65432) - ) - ) - (i32.eqz - (i32.wrap/i64 - (loop $label$6 (result i64) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const 65425) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (i64.xor - (i64.extend_u/i32 - (br_if $label$0 - (i32.const 12) - (i32.div_u - (i32.const -96) - (i32.const 0) - ) - ) - ) - (i64.const 8606517916339761162) - ) - ) - ) - ) - ) - (f32.le - (call $func_6) - (call $deNan32 - (f32.sub - (f32.const 9223372036854775808) - (f32.const 22107) - ) - ) - ) - ) - ) - (if - (i32.eqz - (i32.const 1543) - ) - (block $label$8 - (br_if $label$8 - (i32.load8_u offset=4 - (i32.and - (i32.const 126) - (i32.const 31) - ) - ) - ) - ) - (nop) - ) - (f32.const 1.1754943508222875e-38) - ) - ) - (select - (loop $label$1 (result i32) - (block - (if - (i32.eqz - (get_global $hangLimit) - ) - (return - (i32.const -80) - ) - ) - (set_global $hangLimit - (i32.sub - (get_global $hangLimit) - (i32.const 1) - ) - ) - ) - (block $label$2 (result i32) + ) + (block $label$7 (result i32) + (i32.load offset=22 align=1 + (i32.and + (block $label$8 (result i32) (return - (i32.const 65509) - ) - ) - ) - (i32.const 509639793) - (i32.trunc_s/f64 - (call $deNan64 - (f64.convert_u/i32 - (i32.const 65487) + (i32.const 255) ) ) + (i32.const 31) ) ) ) + (i32.lt_s + (i32.const -20) + (i32.const -2147483648) + ) + ) + ) + (block $label$0 (result i32) + (return + (i32.const -86) ) ) ) |