diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fc9847e1fb..a505a9509d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ Current Trunk ------------- - The `tuple.make` pseudoinstruction now requires an immediate giving its arity. For example, to make a tuple of two elements, use `tuple.make 2`. + - The text format for `if` expressions now requires `then` and `else` to + introduce the two branch arms, matching the spec. v116 ---- diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index dcd43c323e2..b6060a85363 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -306,7 +306,7 @@ struct PrintSExpression : public UnifiedExpressionVisitor { // loop, if, and try can contain implicit blocks. But they are not needed to // be printed in some cases. - void maybePrintImplicitBlock(Expression* curr, bool allowMultipleInsts); + void maybePrintImplicitBlock(Expression* curr); // Generic visitor, overridden only when necessary. void visitExpression(Expression* curr); @@ -2563,11 +2563,9 @@ void PrintSExpression::printFullLine(Expression* expression) { o << maybeNewLine; } -void PrintSExpression::maybePrintImplicitBlock(Expression* curr, - bool allowMultipleInsts) { +void PrintSExpression::maybePrintImplicitBlock(Expression* curr) { auto block = curr->dynCast(); - if (!full && block && block->name.isNull() && - (allowMultipleInsts || block->list.size() == 1)) { + if (!full && block && block->name.isNull()) { for (auto expression : block->list) { printFullLine(expression); } @@ -2657,13 +2655,23 @@ void PrintSExpression::visitIf(If* curr) { printExpressionContents(curr); incIndent(); printFullLine(curr->condition); - maybePrintImplicitBlock(curr->ifTrue, false); + doIndent(o, indent); + o << "(then"; + incIndent(); + maybePrintImplicitBlock(curr->ifTrue); + decIndent(); + o << maybeNewLine; if (curr->ifFalse) { + doIndent(o, indent); + o << "(else"; + incIndent(); // Note: debug info here is not used as LLVM does not emit ifs, and since // LLVM is the main source of DWARF, effectively we never encounter ifs // with DWARF. printDebugDelimiterLocation(curr, BinaryLocations::Else); - maybePrintImplicitBlock(curr->ifFalse, false); + maybePrintImplicitBlock(curr->ifFalse); + decIndent(); + o << maybeNewLine; } decIndent(); if (full) { @@ -2677,7 +2685,7 @@ void PrintSExpression::visitLoop(Loop* curr) { o << '('; printExpressionContents(curr); incIndent(); - maybePrintImplicitBlock(curr->body, true); + maybePrintImplicitBlock(curr->body); decIndent(); if (full) { o << " ;; end loop"; @@ -2722,7 +2730,7 @@ void PrintSExpression::visitTry(Try* curr) { o << '('; printMedium(o, "do"); incIndent(); - maybePrintImplicitBlock(curr->body, true); + maybePrintImplicitBlock(curr->body); decIndent(); o << "\n"; for (size_t i = 0; i < curr->catchTags.size(); i++) { @@ -2732,7 +2740,7 @@ void PrintSExpression::visitTry(Try* curr) { printMedium(o, "catch "); printName(curr->catchTags[i], o); incIndent(); - maybePrintImplicitBlock(curr->catchBodies[i], true); + maybePrintImplicitBlock(curr->catchBodies[i]); decIndent(); o << "\n"; } @@ -2742,7 +2750,7 @@ void PrintSExpression::visitTry(Try* curr) { o << '('; printMedium(o, "catch_all"); incIndent(); - maybePrintImplicitBlock(curr->catchBodies.back(), true); + maybePrintImplicitBlock(curr->catchBodies.back()); decIndent(); o << "\n"; } @@ -2770,7 +2778,7 @@ void PrintSExpression::visitTryTable(TryTable* curr) { o << '('; printExpressionContents(curr); incIndent(); - maybePrintImplicitBlock(curr->body, true); + maybePrintImplicitBlock(curr->body); decIndent(); if (full) { o << " ;; end if"; diff --git a/src/passes/wasm-intrinsics.wat b/src/passes/wasm-intrinsics.wat index 185bef961a8..efa31264556 100644 --- a/src/passes/wasm-intrinsics.wat +++ b/src/passes/wasm-intrinsics.wat @@ -146,16 +146,18 @@ (func $__wasm_ctz_i32 (; 7 ;) (type $3) (param $var$0 i32) (result i32) (if (local.get $var$0) - (return - (i32.sub - (i32.const 31) - (i32.clz - (i32.xor - (i32.add + (then + (return + (i32.sub + (i32.const 31) + (i32.clz + (i32.xor + (i32.add + (local.get $var$0) + (i32.const -1) + ) (local.get $var$0) - (i32.const -1) ) - (local.get $var$0) ) ) ) @@ -171,16 +173,18 @@ (local.get $var$0) ) ) - (return - (i64.sub - (i64.const 63) - (i64.clz - (i64.xor - (i64.add + (then + (return + (i64.sub + (i64.const 63) + (i64.clz + (i64.xor + (i64.add + (local.get $var$0) + (i64.const -1) + ) (local.get $var$0) - (i64.const -1) ) - (local.get $var$0) ) ) ) @@ -369,38 +373,42 @@ (f32.const 0.5) ) ) - (block - (local.set $var$0 - (f32.ceil - (local.get $var$0) - ) - ) - (if - (f32.gt - (local.get $var$2) - (f32.const 0.5) + (then + (block + (local.set $var$0 + (f32.ceil + (local.get $var$0) + ) ) - (return - (local.get $var$0) + (if + (f32.gt + (local.get $var$2) + (f32.const 0.5) + ) + (then + (return + (local.get $var$0) + ) + ) ) - ) - (local.set $var$1 - (select - (local.get $var$1) - (local.get $var$0) - (f32.eq - (f32.sub - (local.tee $var$2 - (f32.mul - (local.get $var$1) - (f32.const 0.5) + (local.set $var$1 + (select + (local.get $var$1) + (local.get $var$0) + (f32.eq + (f32.sub + (local.tee $var$2 + (f32.mul + (local.get $var$1) + (f32.const 0.5) + ) + ) + (f32.floor + (local.get $var$2) ) ) - (f32.floor - (local.get $var$2) - ) + (f32.const 0) ) - (f32.const 0) ) ) ) @@ -429,38 +437,42 @@ (f64.const 0.5) ) ) - (block - (local.set $var$0 - (f64.ceil - (local.get $var$0) - ) - ) - (if - (f64.gt - (local.get $var$2) - (f64.const 0.5) + (then + (block + (local.set $var$0 + (f64.ceil + (local.get $var$0) + ) ) - (return - (local.get $var$0) + (if + (f64.gt + (local.get $var$2) + (f64.const 0.5) + ) + (then + (return + (local.get $var$0) + ) + ) ) - ) - (local.set $var$1 - (select - (local.get $var$1) - (local.get $var$0) - (f64.eq - (f64.sub - (local.tee $var$2 - (f64.mul - (local.get $var$1) - (f64.const 0.5) + (local.set $var$1 + (select + (local.get $var$1) + (local.get $var$0) + (f64.eq + (f64.sub + (local.tee $var$2 + (f64.mul + (local.get $var$1) + (f64.const 0.5) + ) + ) + (f64.floor + (local.get $var$2) ) ) - (f64.floor - (local.get $var$2) - ) + (f64.const 0) ) - (f64.const 0) ) ) ) @@ -496,44 +508,46 @@ ) ) ) - (block - (br_if $label$11 - (i32.eqz - (local.tee $var$3 - (i32.wrap_i64 - (local.get $var$1) + (then + (block + (br_if $label$11 + (i32.eqz + (local.tee $var$3 + (i32.wrap_i64 + (local.get $var$1) + ) ) ) ) - ) - (br_if $label$9 - (i32.eqz - (local.tee $var$4 - (i32.wrap_i64 - (i64.shr_u - (local.get $var$1) - (i64.const 32) + (br_if $label$9 + (i32.eqz + (local.tee $var$4 + (i32.wrap_i64 + (i64.shr_u + (local.get $var$1) + (i64.const 32) + ) ) ) ) ) - ) - (br_if $label$8 - (i32.le_u - (local.tee $var$2 - (i32.sub - (i32.clz - (local.get $var$4) - ) - (i32.clz - (local.get $var$2) + (br_if $label$8 + (i32.le_u + (local.tee $var$2 + (i32.sub + (i32.clz + (local.get $var$4) + ) + (i32.clz + (local.get $var$2) + ) ) ) + (i32.const 31) ) - (i32.const 31) ) + (br $label$2) ) - (br $label$2) ) ) (br_if $label$2 @@ -790,69 +804,71 @@ (block $label$13 (if (local.get $var$2) - (block - (local.set $var$8 - (i64.add - (local.get $var$1) - (i64.const -1) + (then + (block + (local.set $var$8 + (i64.add + (local.get $var$1) + (i64.const -1) + ) ) - ) - (loop $label$15 - (local.set $var$5 - (i64.sub - (local.tee $var$5 - (i64.or - (i64.shl - (local.get $var$5) - (i64.const 1) - ) - (i64.shr_u - (local.get $var$0) - (i64.const 63) + (loop $label$15 + (local.set $var$5 + (i64.sub + (local.tee $var$5 + (i64.or + (i64.shl + (local.get $var$5) + (i64.const 1) + ) + (i64.shr_u + (local.get $var$0) + (i64.const 63) + ) ) ) - ) - (i64.and - (local.tee $var$6 - (i64.shr_s - (i64.sub - (local.get $var$8) - (local.get $var$5) + (i64.and + (local.tee $var$6 + (i64.shr_s + (i64.sub + (local.get $var$8) + (local.get $var$5) + ) + (i64.const 63) ) - (i64.const 63) ) + (local.get $var$1) ) - (local.get $var$1) ) ) - ) - (local.set $var$0 - (i64.or - (i64.shl - (local.get $var$0) - (i64.const 1) + (local.set $var$0 + (i64.or + (i64.shl + (local.get $var$0) + (i64.const 1) + ) + (local.get $var$7) ) - (local.get $var$7) ) - ) - (local.set $var$7 - (local.tee $var$6 - (i64.and - (local.get $var$6) - (i64.const 1) + (local.set $var$7 + (local.tee $var$6 + (i64.and + (local.get $var$6) + (i64.const 1) + ) ) ) - ) - (br_if $label$15 - (local.tee $var$2 - (i32.add - (local.get $var$2) - (i32.const -1) + (br_if $label$15 + (local.tee $var$2 + (i32.add + (local.get $var$2) + (i32.const -1) + ) ) ) ) + (br $label$13) ) - (br $label$13) ) ) ) diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 41a5b188495..9270a19b0b1 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -1703,12 +1703,11 @@ Expression* SExpressionWasmBuilder::makeBlock(Element& s) { // Similar to block, but the label is handled by the enclosing if (since there // might not be a then or else, ick) Expression* SExpressionWasmBuilder::makeThenOrElse(Element& s) { - auto ret = allocator.alloc(); - size_t i = 1; - if (s.size() > 1 && s[1]->isStr()) { - i++; + if (s.size() == 2) { + return parseExpression(s[1]); } - for (; i < s.size(); i++) { + auto ret = allocator.alloc(); + for (size_t i = 1; i < s.size(); i++) { ret->list.push_back(parseExpression(s[i])); } ret->finalize(); @@ -2415,8 +2414,14 @@ Expression* SExpressionWasmBuilder::makeIf(Element& s) { // if signature Type type = parseBlockType(s, i); ret->condition = parseExpression(s[i++]); + if (!elementStartsWith(*s[i], "then")) { + throw SParseException("expected 'then'", *s[i]); + } ret->ifTrue = parseExpression(*s[i++]); if (i < s.size()) { + if (!elementStartsWith(*s[i], "else")) { + throw SParseException("expected 'else'", *s[i]); + } ret->ifFalse = parseExpression(*s[i++]); } ret->finalize(type); diff --git a/test/binaryen.js/expressions.js b/test/binaryen.js/expressions.js index c7c45a08a1a..bd681f86dfe 100644 --- a/test/binaryen.js/expressions.js +++ b/test/binaryen.js/expressions.js @@ -109,7 +109,7 @@ console.log("# If"); assert( theIf.toText() == - "(if (result i32)\n (i32.const 4)\n (i32.const 5)\n (i32.const 6)\n)\n" + "(if (result i32)\n (i32.const 4)\n (then\n (i32.const 5)\n )\n (else\n (i32.const 6)\n )\n)\n" ); theIf.ifFalse = null; @@ -118,7 +118,7 @@ console.log("# If"); assert( theIf.toText() == - "(if (result i32)\n (i32.const 4)\n (i32.const 5)\n)\n" + "(if (result i32)\n (i32.const 4)\n (then\n (i32.const 5)\n )\n)\n" ); module.dispose(); diff --git a/test/binaryen.js/expressions.js.txt b/test/binaryen.js/expressions.js.txt index 7b04795ba33..5d6c37c6bc6 100644 --- a/test/binaryen.js/expressions.js.txt +++ b/test/binaryen.js/expressions.js.txt @@ -7,13 +7,19 @@ # If (if (result i32) (i32.const 4) - (i32.const 5) - (i32.const 6) + (then + (i32.const 5) + ) + (else + (i32.const 6) + ) ) (if (result i32) (i32.const 4) - (i32.const 5) + (then + (i32.const 5) + ) ) # Loop diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt index bbef03377e6..b5a9b713e9d 100644 --- a/test/binaryen.js/kitchen-sink.js.txt +++ b/test/binaryen.js/kitchen-sink.js.txt @@ -1934,17 +1934,23 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} ) (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) ) (drop @@ -4038,17 +4044,23 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} ) (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) ) (drop @@ -4423,14 +4435,18 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) + (then + (block + (call $check + (i32.const 1) + ) ) ) - (block - (call $check - (i32.const 2) + (else + (block + (call $check + (i32.const 2) + ) ) ) ) @@ -4442,7 +4458,7 @@ raw: ) (if (i32.const 55) - (block + (then (drop (i32.const 10) ) @@ -4452,7 +4468,7 @@ raw: ) ) ) - (block + (else (drop (i32.const 20) ) @@ -4472,15 +4488,19 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) - ) + (then (block - (br $block$3$break) + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) ) ) - (br $block$3$break) + (else + (br $block$3$break) + ) ) ) (block @@ -4497,7 +4517,7 @@ raw: ) (if (i32.const 55) - (block + (then (drop (i32.const -1) ) @@ -4513,7 +4533,7 @@ raw: ) ) ) - (block + (else (drop (i32.const -2) ) @@ -4535,20 +4555,24 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) - ) + (then (block - (br $block$4$break) + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) ) ) - (block - (call $check - (i32.const 2) - ) + (else (block - (br $block$4$break) + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) ) ) ) @@ -4573,8 +4597,12 @@ raw: ) (if (i32.const 10) - (br $shape$0$continue) - (br $block$3$break) + (then + (br $shape$0$continue) + ) + (else + (br $block$3$break) + ) ) ) ) @@ -4607,8 +4635,10 @@ raw: ) (if (i32.const -2) - (br $block$3$break) - (block + (then + (br $block$3$break) + ) + (else (drop (i32.const 20) ) @@ -4622,8 +4652,10 @@ raw: ) (if (i32.const -6) - (br $block$4$break) - (block + (then + (br $block$4$break) + ) + (else (drop (i32.const 30) ) @@ -4640,15 +4672,19 @@ raw: ) (if (i32.const -10) - (block - (call $check - (i32.const 4) - ) + (then (block - (br $block$6$break) + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) ) ) - (br $block$6$break) + (else + (br $block$6$break) + ) ) ) (block @@ -4731,13 +4767,13 @@ raw: ) (if (i32.const 10) - (block + (then (local.set $3 (i32.const 2) ) (br $block$2$break) ) - (block + (else (local.set $3 (i32.const 3) ) @@ -4753,7 +4789,7 @@ raw: (local.get $3) (i32.const 2) ) - (block + (then (local.set $3 (i32.const 0) ) @@ -4767,23 +4803,25 @@ raw: (br $shape$1$continue) ) ) - (if - (i32.eq - (local.get $3) - (i32.const 3) - ) - (block - (local.set $3 - (i32.const 0) - ) - (call $check - (i32.const 2) + (else + (if + (i32.eq + (local.get $3) + (i32.const 3) ) - (block + (then (local.set $3 + (i32.const 0) + ) + (call $check (i32.const 2) ) - (br $shape$1$continue) + (block + (local.set $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) ) ) ) diff --git a/test/binaryen.js/optimize-levels.js b/test/binaryen.js/optimize-levels.js index b3dd2adbd98..6d9dbc26286 100644 --- a/test/binaryen.js/optimize-levels.js +++ b/test/binaryen.js/optimize-levels.js @@ -7,8 +7,8 @@ var wast = ` (block (result i32) (if (result i32) (local.get $0) - (local.get $0) - (i32.const 0) + (then (local.get $0)) + (else (i32.const 0)) ) ) ) diff --git a/test/binaryen.js/optimize-levels.js.txt b/test/binaryen.js/optimize-levels.js.txt index 05fe2358986..ed928fbef15 100644 --- a/test/binaryen.js/optimize-levels.js.txt +++ b/test/binaryen.js/optimize-levels.js.txt @@ -7,8 +7,8 @@ (block (result i32) (if (result i32) (local.get $0) - (local.get $0) - (i32.const 0) + (then (local.get $0)) + (else (i32.const 0)) ) ) ) @@ -22,8 +22,12 @@ (func $test (param $0 i32) (result i32) (if (result i32) (local.get $0) - (local.get $0) - (i32.const 0) + (then + (local.get $0) + ) + (else + (i32.const 0) + ) ) ) ) diff --git a/test/binaryen.js/sieve.js.txt b/test/binaryen.js/sieve.js.txt index 3fad13fdf01..46e5d3b398c 100644 --- a/test/binaryen.js/sieve.js.txt +++ b/test/binaryen.js/sieve.js.txt @@ -12,17 +12,19 @@ ) (local.get $0) ) - (drop - (memory.grow - (i32.sub - (i32.div_u - (i32.add - (local.get $0) - (i32.const 65535) + (then + (drop + (memory.grow + (i32.sub + (i32.div_u + (i32.add + (local.get $0) + (i32.const 65535) + ) + (i32.const 65536) ) - (i32.const 65536) + (memory.size) ) - (memory.size) ) ) ) @@ -70,17 +72,19 @@ optimized: ) (local.get $0) ) - (drop - (memory.grow - (i32.sub - (i32.shr_u - (i32.add - (local.get $0) - (i32.const 65535) + (then + (drop + (memory.grow + (i32.sub + (i32.shr_u + (i32.add + (local.get $0) + (i32.const 65535) + ) + (i32.const 16) ) - (i32.const 16) + (memory.size) ) - (memory.size) ) ) ) diff --git a/test/binaryen.js/stackir.js b/test/binaryen.js/stackir.js index 20754e078a8..d797aa6d818 100644 --- a/test/binaryen.js/stackir.js +++ b/test/binaryen.js/stackir.js @@ -8,8 +8,8 @@ var wast = ` (block (result i32) (if (result i32) (local.get $0) - (local.get $0) - (i32.const 0) + (then (local.get $0)) + (else (i32.const 0)) ) ) ) diff --git a/test/binaryen.js/stackir.js.txt b/test/binaryen.js/stackir.js.txt index a49c6bb01c5..bd906c388b0 100644 --- a/test/binaryen.js/stackir.js.txt +++ b/test/binaryen.js/stackir.js.txt @@ -8,8 +8,8 @@ (block (result i32) (if (result i32) (local.get $0) - (local.get $0) - (i32.const 0) + (then (local.get $0)) + (else (i32.const 0)) ) ) ) diff --git a/test/ctor-eval/partial-return.wast b/test/ctor-eval/partial-return.wast index 8ca6eee7570..e74c59cb871 100644 --- a/test/ctor-eval/partial-return.wast +++ b/test/ctor-eval/partial-return.wast @@ -18,7 +18,9 @@ (i32.load8_u (i32.const 12) ) - (return) + (then + (return) + ) ) ;; This is unsafe to call, and would stop evalling here. But we exit due to diff --git a/test/ctor-eval/results.wast b/test/ctor-eval/results.wast index bfefa2756c2..dcd10ea5f38 100644 --- a/test/ctor-eval/results.wast +++ b/test/ctor-eval/results.wast @@ -41,13 +41,17 @@ ;; we should succeed. After that we should keep returning the constant 55 (if (result i32) (i32.const 1) - (block (result i32) - (global.set $global4 - (i32.const 14) + (then + (block (result i32) + (global.set $global4 + (i32.const 14) + ) + (i32.const 55) ) - (i32.const 55) ) - (i32.const 99) + (else + (i32.const 99) + ) ) ) diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 06ec3a1b7d1..75c71b4ab01 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -1969,17 +1969,23 @@ BinaryenFeatureAll: 131071 ) (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) ) (drop @@ -2685,14 +2691,18 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) + (then + (block + (call $check + (i32.const 1) + ) ) ) - (block - (call $check - (i32.const 2) + (else + (block + (call $check + (i32.const 2) + ) ) ) ) @@ -2704,7 +2714,7 @@ raw: ) (if (i32.const 55) - (block + (then (drop (i32.const 10) ) @@ -2714,7 +2724,7 @@ raw: ) ) ) - (block + (else (drop (i32.const 20) ) @@ -2734,15 +2744,19 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) - ) + (then (block - (br $block$3$break) + (call $check + (i32.const 1) + ) + (block + (br $block$3$break) + ) ) ) - (br $block$3$break) + (else + (br $block$3$break) + ) ) ) (block @@ -2759,7 +2773,7 @@ raw: ) (if (i32.const 55) - (block + (then (drop (i32.const -1) ) @@ -2775,7 +2789,7 @@ raw: ) ) ) - (block + (else (drop (i32.const -2) ) @@ -2797,20 +2811,24 @@ raw: ) (if (i32.const 55) - (block - (call $check - (i32.const 1) - ) + (then (block - (br $block$4$break) + (call $check + (i32.const 1) + ) + (block + (br $block$4$break) + ) ) ) - (block - (call $check - (i32.const 2) - ) + (else (block - (br $block$4$break) + (call $check + (i32.const 2) + ) + (block + (br $block$4$break) + ) ) ) ) @@ -2835,8 +2853,12 @@ raw: ) (if (i32.const 10) - (br $shape$0$continue) - (br $block$3$break) + (then + (br $shape$0$continue) + ) + (else + (br $block$3$break) + ) ) ) ) @@ -2869,8 +2891,10 @@ raw: ) (if (i32.const -2) - (br $block$3$break) - (block + (then + (br $block$3$break) + ) + (else (drop (i32.const 20) ) @@ -2884,8 +2908,10 @@ raw: ) (if (i32.const -6) - (br $block$4$break) - (block + (then + (br $block$4$break) + ) + (else (drop (i32.const 30) ) @@ -2902,15 +2928,19 @@ raw: ) (if (i32.const -10) - (block - (call $check - (i32.const 4) - ) + (then (block - (br $block$6$break) + (call $check + (i32.const 4) + ) + (block + (br $block$6$break) + ) ) ) - (br $block$6$break) + (else + (br $block$6$break) + ) ) ) (block @@ -2993,13 +3023,13 @@ raw: ) (if (i32.const 10) - (block + (then (local.set $3 (i32.const 2) ) (br $block$2$break) ) - (block + (else (local.set $3 (i32.const 3) ) @@ -3015,7 +3045,7 @@ raw: (local.get $3) (i32.const 2) ) - (block + (then (local.set $3 (i32.const 0) ) @@ -3029,23 +3059,25 @@ raw: (br $shape$1$continue) ) ) - (if - (i32.eq - (local.get $3) - (i32.const 3) - ) - (block - (local.set $3 - (i32.const 0) - ) - (call $check - (i32.const 2) + (else + (if + (i32.eq + (local.get $3) + (i32.const 3) ) - (block + (then (local.set $3 + (i32.const 0) + ) + (call $check (i32.const 2) ) - (br $shape$1$continue) + (block + (local.set $3 + (i32.const 2) + ) + (br $shape$1$continue) + ) ) ) ) diff --git a/test/example/relooper-fuzz.txt b/test/example/relooper-fuzz.txt index c962a3e0a2a..1030fac320d 100644 --- a/test/example/relooper-fuzz.txt +++ b/test/example/relooper-fuzz.txt @@ -14,7 +14,9 @@ ) (i32.const 108) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) @@ -172,24 +174,26 @@ ) (i32.const 0) ) - (block + (then (local.set $1 (i32.const 6) ) (br $block$6$break) ) - (block + (else (block - (call $print - (i32.const 8) + (block + (call $print + (i32.const 8) + ) + (local.set $0 + (call $check) + ) ) - (local.set $0 - (call $check) + (block + (br $block$5$break) ) ) - (block - (br $block$5$break) - ) ) ) ) @@ -202,7 +206,7 @@ (local.get $1) (i32.const 6) ) - (block + (then (local.set $1 (i32.const 0) ) @@ -222,8 +226,10 @@ ) (i32.const 0) ) - (br $shape$3$continue) - (block + (then + (br $shape$3$continue) + ) + (else (local.set $1 (i32.const 6) ) @@ -251,22 +257,28 @@ ) (i32.const 0) ) - (br $shape$3$continue) - (if - (i32.eq - (i32.rem_u - (local.get $0) - (i32.const 3) + (then + (br $shape$3$continue) + ) + (else + (if + (i32.eq + (i32.rem_u + (local.get $0) + (i32.const 3) + ) + (i32.const 1) ) - (i32.const 1) - ) - (block - (local.set $1 - (i32.const 6) + (then + (local.set $1 + (i32.const 6) + ) + (br $shape$3$continue) + ) + (else + (br $block$3$break) ) - (br $shape$3$continue) ) - (br $block$3$break) ) ) ) @@ -307,7 +319,9 @@ ) (i32.const 108) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) @@ -453,7 +467,7 @@ (call $check) (i32.const 1) ) - (block + (then (call $print (i32.const 8) ) @@ -461,8 +475,10 @@ (call $check) ) ) - (local.set $0 - (i32.const 6) + (else + (local.set $0 + (i32.const 6) + ) ) ) (loop $shape$3$continue @@ -471,7 +487,7 @@ (local.get $0) (i32.const 6) ) - (block + (then (local.set $0 (i32.const 0) ) @@ -513,13 +529,13 @@ ) (i32.const 1) ) - (block + (then (local.set $0 (i32.const 6) ) (br $shape$3$continue) ) - (block + (else (call $print (i32.const 2) ) diff --git a/test/example/relooper-fuzz1.txt b/test/example/relooper-fuzz1.txt index 1fb24808ea2..3cdb12e69f1 100644 --- a/test/example/relooper-fuzz1.txt +++ b/test/example/relooper-fuzz1.txt @@ -14,7 +14,9 @@ ) (i32.const 120) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) @@ -184,37 +186,49 @@ ) (i32.const 0) ) - (br $block$3$break) - (if - (i32.eq - (i32.rem_u - (local.get $0) - (i32.const 4) - ) - (i32.const 2) - ) - (block - (block - (call $print - (i32.const 7) - ) - (local.set $0 - (call $check) + (then + (br $block$3$break) + ) + (else + (if + (i32.eq + (i32.rem_u + (local.get $0) + (i32.const 4) ) + (i32.const 2) ) - (if - (i32.eq - (i32.rem_u - (local.get $0) - (i32.const 3) + (then + (block + (block + (call $print + (i32.const 7) + ) + (local.set $0 + (call $check) + ) + ) + (if + (i32.eq + (i32.rem_u + (local.get $0) + (i32.const 3) + ) + (i32.const 0) + ) + (then + (br $block$3$break) + ) + (else + (br $block$10$break) + ) ) - (i32.const 0) ) - (br $block$3$break) - (br $block$10$break) + ) + (else + (br $block$4$break) ) ) - (br $block$4$break) ) ) ) @@ -235,8 +249,12 @@ ) (i32.const 0) ) - (br $block$4$break) - (br $block$10$break) + (then + (br $block$4$break) + ) + (else + (br $block$10$break) + ) ) ) ) @@ -283,7 +301,9 @@ ) (i32.const 120) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) @@ -444,26 +464,30 @@ ) (i32.const 3) ) - (if - (i32.eq - (i32.and - (local.get $0) - (i32.const 3) - ) - (i32.const 2) - ) - (block - (call $print - (i32.const 7) - ) - (br_if $block$10$break - (i32.rem_u - (call $check) + (then + (if + (i32.eq + (i32.and + (local.get $0) (i32.const 3) ) + (i32.const 2) + ) + (then + (call $print + (i32.const 7) + ) + (br_if $block$10$break + (i32.rem_u + (call $check) + (i32.const 3) + ) + ) + ) + (else + (br $block$4$break) ) ) - (br $block$4$break) ) ) (call $print diff --git a/test/example/relooper-fuzz2.txt b/test/example/relooper-fuzz2.txt index bee8277d750..0b3fdb2fd7b 100644 --- a/test/example/relooper-fuzz2.txt +++ b/test/example/relooper-fuzz2.txt @@ -14,7 +14,9 @@ ) (i32.const 108) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge1.txt b/test/example/relooper-merge1.txt index 1d5779259db..61816bebd0c 100644 --- a/test/example/relooper-merge1.txt +++ b/test/example/relooper-merge1.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge2.txt b/test/example/relooper-merge2.txt index 31a13192d12..a52ee20b301 100644 --- a/test/example/relooper-merge2.txt +++ b/test/example/relooper-merge2.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge3.txt b/test/example/relooper-merge3.txt index a856d10b0b6..3c8f3f5388f 100644 --- a/test/example/relooper-merge3.txt +++ b/test/example/relooper-merge3.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge4.txt b/test/example/relooper-merge4.txt index 6f0f7d5b3d8..5d3420f49f9 100644 --- a/test/example/relooper-merge4.txt +++ b/test/example/relooper-merge4.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge5.txt b/test/example/relooper-merge5.txt index c09c016b926..38aaf6a0237 100644 --- a/test/example/relooper-merge5.txt +++ b/test/example/relooper-merge5.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge6.txt b/test/example/relooper-merge6.txt index dca86d40a96..9519d024233 100644 --- a/test/example/relooper-merge6.txt +++ b/test/example/relooper-merge6.txt @@ -14,7 +14,9 @@ ) (i32.const 48) ) - (unreachable) + (then + (unreachable) + ) ) (i32.store (i32.const 4) diff --git a/test/example/relooper-merge7.txt b/test/example/relooper-merge7.txt index 23ffffb218d..fb54ddea9e4 100644 --- a/test/example/relooper-merge7.txt +++ b/test/example/relooper-merge7.txt @@ -7,8 +7,12 @@ ) (if (i32.const -10) - (br $block$3$break) - (br $block$2$break) + (then + (br $block$3$break) + ) + (else + (br $block$2$break) + ) ) ) (block diff --git a/test/fib-dbg.wasm.fromBinary b/test/fib-dbg.wasm.fromBinary index f36bd2250d1..bc90702d312 100644 --- a/test/fib-dbg.wasm.fromBinary +++ b/test/fib-dbg.wasm.fromBinary @@ -100,7 +100,7 @@ (global.get $global$7) (i32.const 0) ) - (block + (then (global.set $global$7 (local.get $0) ) @@ -136,7 +136,7 @@ ;;@ fib.c:3:0 (if (local.get $6) - (block + (then (local.set $1 (i32.const 0) ) @@ -147,7 +147,7 @@ (i32.const 0) ) ) - (block + (else (local.set $4 (i32.const 1) ) @@ -184,13 +184,13 @@ ;;@ fib.c:3:0 (if (local.get $7) - (block + (then (local.set $4 (local.get $3) ) (br $label$5) ) - (block + (else (local.set $2 (local.get $5) ) diff --git a/test/gtest/cfg.cpp b/test/gtest/cfg.cpp index bf3742bc13d..c78eb218a45 100644 --- a/test/gtest/cfg.cpp +++ b/test/gtest/cfg.cpp @@ -26,7 +26,7 @@ TEST_F(CFGTest, Print) { (drop (if (result i32) (i32.const 1) - (block + (then (loop $loop (br_if $loop (i32.const 2) @@ -34,8 +34,10 @@ TEST_F(CFGTest, Print) { ) (i32.const 3) ) - (return - (i32.const 4) + (else + (return + (i32.const 4) + ) ) ) ) @@ -65,7 +67,7 @@ TEST_F(CFGTest, Print) { ;; preds: [3], succs: [6] 4: 6: i32.const 3 - 7: block + 7: block (result i32) ;; preds: [0], succs: [7] 5: @@ -230,7 +232,7 @@ TEST_F(CFGTest, BlockIndexes) { (func $foo (if (i32.const 1) - (block + (then (drop (i32.const 2) ) @@ -343,11 +345,15 @@ TEST_F(CFGTest, ReachingDefinitionsIf) { (local.get $a) (i32.const 2) ) - (local.set $b - (i32.const 3) + (then + (local.set $b + (i32.const 3) + ) ) - (local.set $a - (i32.const 4) + (else + (local.set $a + (i32.const 4) + ) ) ) (drop diff --git a/test/gtest/stringify.cpp b/test/gtest/stringify.cpp index 3e50c6d4c53..c38c29d8063 100644 --- a/test/gtest/stringify.cpp +++ b/test/gtest/stringify.cpp @@ -20,13 +20,13 @@ TEST_F(StringifyTest, Print) { ) (block $block_b (drop (if (i32.const 0) - (i32.const 40) - (i32.const 5) + (then (i32.const 40)) + (else (i32.const 5)) )) ) (block $block_c (drop (if (i32.const 1) - (i32.const 30) + (then (i32.const 30)) )) ) (block $block_d @@ -150,13 +150,13 @@ static auto dupModuleText = R"wasm( ) (block $block_b (drop (if (i32.const 0) - (i32.const 40) - (i32.const 5) + (then (i32.const 40)) + (else (i32.const 5)) )) ) (block $block_c (drop (if (i32.const 1) - (i32.const 30) + (then (i32.const 30)) )) ) (block $block_d @@ -165,12 +165,12 @@ static auto dupModuleText = R"wasm( ) (block $block_e (drop (if (i32.const 1) - (i32.const 30) + (then (i32.const 30)) )) ) (block $block_f (drop (if (i32.const 0) - (i32.const 30) + (then (i32.const 30)) )) ) ) diff --git a/test/lit/basic/exception-handling-old.wast b/test/lit/basic/exception-handling-old.wast index c082c1977da..6fcb33ed43e 100644 --- a/test/lit/basic/exception-handling-old.wast +++ b/test/lit/basic/exception-handling-old.wast @@ -1160,8 +1160,12 @@ ;; CHECK-TEXT-NEXT: (throw $e-i32 ;; CHECK-TEXT-NEXT: (if (result i32) ;; CHECK-TEXT-NEXT: (pop i32) - ;; CHECK-TEXT-NEXT: (i32.const 0) - ;; CHECK-TEXT-NEXT: (i32.const 3) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (i32.const 3) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -1176,8 +1180,12 @@ ;; CHECK-BIN-NEXT: (throw $e-i32 ;; CHECK-BIN-NEXT: (if (result i32) ;; CHECK-BIN-NEXT: (pop i32) - ;; CHECK-BIN-NEXT: (i32.const 0) - ;; CHECK-BIN-NEXT: (i32.const 3) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (i32.const 0) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (i32.const 3) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) @@ -1191,8 +1199,12 @@ (if (result i32) ;; pop is within an if condition, so this is OK. (pop i32) - (i32.const 0) - (i32.const 3) + (then + (i32.const 0) + ) + (else + (i32.const 3) + ) ) ) ) @@ -1764,8 +1776,12 @@ ;; CHECK-BIN-NODEBUG-NEXT: (throw $tag$0 ;; CHECK-BIN-NODEBUG-NEXT: (if (result i32) ;; CHECK-BIN-NODEBUG-NEXT: (pop i32) -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/basic/exception-handling.wast b/test/lit/basic/exception-handling.wast index b94f89e1aad..e1fa9c14dfb 100644 --- a/test/lit/basic/exception-handling.wast +++ b/test/lit/basic/exception-handling.wast @@ -79,12 +79,20 @@ ;; CHECK-TEXT-NEXT: (local $null-exn nullexnref) ;; CHECK-TEXT-NEXT: (if (result exnref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (if (result nullexnref) - ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (local.get $null-exn) - ;; CHECK-TEXT-NEXT: (ref.null noexn) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (if (result nullexnref) + ;; CHECK-TEXT-NEXT: (i32.const 1) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.get $null-exn) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null noexn) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (local.get $exn) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (local.get $exn) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $exnref-nullexnref-test (type $3) (result exnref) @@ -92,23 +100,39 @@ ;; CHECK-BIN-NEXT: (local $null-exn nullexnref) ;; CHECK-BIN-NEXT: (if (result exnref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (if (result nullexnref) - ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (local.get $null-exn) - ;; CHECK-BIN-NEXT: (ref.null noexn) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (if (result nullexnref) + ;; CHECK-BIN-NEXT: (i32.const 1) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (local.get $null-exn) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null noexn) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (local.get $exn) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (local.get $exn) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $exnref-nullexnref-test (result exnref) (local $exn exnref) (local $null-exn nullexnref) (if (result exnref) (i32.const 1) - (if (result nullexnref) - (i32.const 1) - (local.get $null-exn) - (ref.null noexn) + (then + (if (result nullexnref) + (i32.const 1) + (then + (local.get $null-exn) + ) + (else + (ref.null noexn) + ) + ) + ) + (else + (local.get $exn) ) - (local.get $exn) ) ) @@ -631,11 +655,15 @@ ;; CHECK-TEXT-NEXT: (try_table (catch $e-i32 $l-catch-inner) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 0) - ;; CHECK-TEXT-NEXT: (throw $e-i32 - ;; CHECK-TEXT-NEXT: (i32.const 3) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (throw $e-i32 + ;; CHECK-TEXT-NEXT: (i32.const 3) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (throw $e-eqref - ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (throw $e-eqref + ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -653,11 +681,15 @@ ;; CHECK-BIN-NEXT: (try_table (catch $e-i32 $label$2) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 0) - ;; CHECK-BIN-NEXT: (throw $e-i32 - ;; CHECK-BIN-NEXT: (i32.const 3) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (throw $e-i32 + ;; CHECK-BIN-NEXT: (i32.const 3) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (throw $e-eqref - ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (throw $e-eqref + ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) @@ -675,8 +707,12 @@ (try_table (catch $e-i32 $l-catch-inner) (if (i32.const 0) - (throw $e-i32 (i32.const 3)) - (throw $e-eqref (ref.null eq)) + (then + (throw $e-i32 (i32.const 3)) + ) + (else + (throw $e-eqref (ref.null eq)) + ) ) ) ) @@ -725,12 +761,20 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local $1 nullexnref) ;; CHECK-BIN-NODEBUG-NEXT: (if (result exnref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (if (result nullexnref) -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null noexn) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (if (result nullexnref) +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null noexn) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -988,11 +1032,15 @@ ;; CHECK-BIN-NODEBUG-NEXT: (try_table (catch $tag$0 $label$2) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) -;; CHECK-BIN-NODEBUG-NEXT: (throw $tag$0 -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (throw $tag$0 +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (throw $tag$3 -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (throw $tag$3 +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/basic/polymorphic_stack.wast b/test/lit/basic/polymorphic_stack.wast index d51117e16f9..fc743bf2aea 100644 --- a/test/lit/basic/polymorphic_stack.wast +++ b/test/lit/basic/polymorphic_stack.wast @@ -162,8 +162,10 @@ ;; CHECK-TEXT-NEXT: (local $0 f32) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 259) - ;; CHECK-TEXT-NEXT: (local.tee $0 - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.tee $0 + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -171,15 +173,19 @@ ;; CHECK-BIN-NEXT: (local $0 f32) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 259) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $tee2 (local $0 f32) (if (i32.const 259) - (local.set $0 - (unreachable) + (then + (local.set $0 + (unreachable) + ) ) ) ) @@ -245,8 +251,10 @@ ;; CHECK-TEXT: (func $unreachable-in-block-but-code-before (type $FUNCSIG$ii) (param $0 i32) (result i32) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (local.get $0) - ;; CHECK-TEXT-NEXT: (return - ;; CHECK-TEXT-NEXT: (i32.const 127) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (return + ;; CHECK-TEXT-NEXT: (i32.const 127) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (block $label$0 (result i32) @@ -261,8 +269,10 @@ ;; CHECK-BIN: (func $unreachable-in-block-but-code-before (type $FUNCSIG$ii) (param $0 i32) (result i32) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (local.get $0) - ;; CHECK-BIN-NEXT: (return - ;; CHECK-BIN-NEXT: (i32.const 127) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (return + ;; CHECK-BIN-NEXT: (i32.const 127) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (block $label$2 (result i32) @@ -277,8 +287,10 @@ (func $unreachable-in-block-but-code-before (param $0 i32) (result i32) (if (local.get $0) - (return - (i32.const 127) + (then + (return + (i32.const 127) + ) ) ) (block $label$0 (result i32) @@ -325,11 +337,15 @@ ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 0) - ;; CHECK-TEXT-NEXT: (br_if $label$8 + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br_if $label$8 + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (unreachable) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -340,8 +356,12 @@ ;; CHECK-BIN-NEXT: (block $label$2 ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 0) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (unreachable) @@ -353,11 +373,15 @@ (drop (if (i32.const 0) - (br_if $label$8 + (then + (br_if $label$8 + (unreachable) + (i32.const 0) + ) + ) + (else (unreachable) - (i32.const 0) ) - (unreachable) ) ) ) @@ -393,7 +417,9 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local $0 f32) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 259) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -416,8 +442,10 @@ ;; CHECK-BIN-NODEBUG: (func $6 (type $1) (param $0 i32) (result i32) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) -;; CHECK-BIN-NODEBUG-NEXT: (return -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 127) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (return +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 127) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (block $label$2 (result i32) @@ -443,8 +471,12 @@ ;; CHECK-BIN-NODEBUG-NEXT: (block $label$2 ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (unreachable) diff --git a/test/lit/basic/reference-types.wast b/test/lit/basic/reference-types.wast index 2b502d78939..94d4f352557 100644 --- a/test/lit/basic/reference-types.wast +++ b/test/lit/basic/reference-types.wast @@ -525,45 +525,69 @@ ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result eqref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (local.get $local_eqref) - ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.get $local_eqref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result funcref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (local.get $local_funcref) - ;; CHECK-TEXT-NEXT: (ref.null nofunc) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.get $local_funcref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null nofunc) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result anyref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (local.get $local_anyref) - ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.get $local_anyref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result anyref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (local.get $local_eqref) - ;; CHECK-TEXT-NEXT: (local.get $local_eqref) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (local.get $local_eqref) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (local.get $local_eqref) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result anyref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (ref.null none) - ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null none) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (if (result anyref) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (ref.i31 - ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (ref.i31 + ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (ref.null none) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (ref.null none) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (drop @@ -1036,45 +1060,69 @@ ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result eqref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (local.get $local_eqref) - ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (local.get $local_eqref) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result funcref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (local.get $local_funcref) - ;; CHECK-BIN-NEXT: (ref.null nofunc) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (local.get $local_funcref) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null nofunc) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result anyref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (local.get $local_anyref) - ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (local.get $local_anyref) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result anyref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (local.get $local_eqref) - ;; CHECK-BIN-NEXT: (local.get $local_eqref) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (local.get $local_eqref) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (local.get $local_eqref) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result anyref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (ref.null none) - ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null none) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop ;; CHECK-BIN-NEXT: (if (result anyref) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (ref.i31 - ;; CHECK-BIN-NEXT: (i32.const 0) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (ref.i31 + ;; CHECK-BIN-NEXT: (i32.const 0) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (ref.null none) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (ref.null none) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (drop @@ -1420,22 +1468,34 @@ (drop (if (result eqref) (i32.const 1) - (local.get $local_eqref) - (ref.null eq) + (then + (local.get $local_eqref) + ) + (else + (ref.null eq) + ) ) ) (drop (if (result funcref) (i32.const 1) - (local.get $local_funcref) - (ref.null func) + (then + (local.get $local_funcref) + ) + (else + (ref.null func) + ) ) ) (drop (if (result anyref) (i32.const 1) - (local.get $local_anyref) - (ref.null any) + (then + (local.get $local_anyref) + ) + (else + (ref.null any) + ) ) ) @@ -1443,24 +1503,36 @@ (drop (if (result anyref) (i32.const 1) - (local.get $local_eqref) - (local.get $local_eqref) + (then + (local.get $local_eqref) + ) + (else + (local.get $local_eqref) + ) ) ) (drop (if (result anyref) (i32.const 1) - (ref.null eq) - (ref.null i31) + (then + (ref.null eq) + ) + (else + (ref.null i31) + ) ) ) (drop (if (result anyref) (i32.const 1) - (ref.i31 - (i32.const 0) + (then + (ref.i31 + (i32.const 0) + ) + ) + (else + (ref.null eq) ) - (ref.null eq) ) ) @@ -2201,45 +2273,69 @@ ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result eqref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result funcref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null nofunc) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null nofunc) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result anyref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $2) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (local.get $2) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result anyref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) -;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result anyref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop ;; CHECK-BIN-NODEBUG-NEXT: (if (result anyref) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (ref.i31 -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (ref.i31 +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (ref.null none) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (drop diff --git a/test/lit/basic/reg_switch.wast b/test/lit/basic/reg_switch.wast index 5f9dd5d7f6b..db749451145 100644 --- a/test/lit/basic/reg_switch.wast +++ b/test/lit/basic/reg_switch.wast @@ -22,9 +22,11 @@ ;; CHECK-TEXT: (func $0 (type $0) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 0) - ;; CHECK-TEXT-NEXT: (block $A - ;; CHECK-TEXT-NEXT: (br_table $A - ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (block $A + ;; CHECK-TEXT-NEXT: (br_table $A + ;; CHECK-TEXT-NEXT: (i32.const 0) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -32,9 +34,11 @@ ;; CHECK-BIN: (func $0 (type $0) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 0) - ;; CHECK-BIN-NEXT: (block $label$2 - ;; CHECK-BIN-NEXT: (br_table $label$2 - ;; CHECK-BIN-NEXT: (i32.const 0) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (block $label$2 + ;; CHECK-BIN-NEXT: (br_table $label$2 + ;; CHECK-BIN-NEXT: (i32.const 0) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) @@ -42,9 +46,11 @@ ;; CHECK-BIN-NODEBUG: (func $0 (type $0) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) - ;; CHECK-BIN-NODEBUG-NEXT: (block $label$2 - ;; CHECK-BIN-NODEBUG-NEXT: (br_table $label$2 - ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) + ;; CHECK-BIN-NODEBUG-NEXT: (then + ;; CHECK-BIN-NODEBUG-NEXT: (block $label$2 + ;; CHECK-BIN-NODEBUG-NEXT: (br_table $label$2 + ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) + ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -52,9 +58,11 @@ (func $0 (type $0) (if (i32.const 0) - (block $A - (br_table $A - (i32.const 0) + (then + (block $A + (br_table $A + (i32.const 0) + ) ) ) ) diff --git a/test/lit/basic/unit.wat b/test/lit/basic/unit.wat index 4fc36b3b7ea..9cdcb57927f 100644 --- a/test/lit/basic/unit.wat +++ b/test/lit/basic/unit.wat @@ -191,8 +191,10 @@ ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (f64.const -3.4) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (f64.const -3.4) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if @@ -202,8 +204,10 @@ ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (f64.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (f64.const 5.6) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (f64.const 5.6) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (f64.const 1.2) @@ -243,8 +247,10 @@ ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (i32.const 0) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (f64.const -3.4) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (f64.const -3.4) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (if @@ -254,8 +260,10 @@ ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (f64.const 0) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (f64.const 5.6) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (f64.const 5.6) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (f64.const 1.2) @@ -295,8 +303,10 @@ ) (i32.const 0) ) - (br $topmost - (f64.const -3.4) + (then + (br $topmost + (f64.const -3.4) + ) ) ) (if @@ -306,8 +316,10 @@ ) (f64.const 0) ) - (br $topmost - (f64.const 5.6) + (then + (br $topmost + (f64.const 5.6) + ) ) ) (f64.const 1.2) @@ -323,8 +335,10 @@ ;; CHECK-TEXT-NEXT: (local.get $x) ;; CHECK-TEXT-NEXT: (f64.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (f64.const 1.2) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (f64.const 1.2) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if @@ -332,8 +346,10 @@ ;; CHECK-TEXT-NEXT: (local.get $Int) ;; CHECK-TEXT-NEXT: (f64.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (f64.const -3.4) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (f64.const -3.4) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if @@ -341,8 +357,10 @@ ;; CHECK-TEXT-NEXT: (local.get $Double) ;; CHECK-TEXT-NEXT: (i32.const 0) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (f64.const 5.6) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (f64.const 5.6) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if @@ -350,8 +368,10 @@ ;; CHECK-TEXT-NEXT: (local.get $x) ;; CHECK-TEXT-NEXT: (local.get $y) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (br $topmost - ;; CHECK-TEXT-NEXT: (local.get $x) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (br $topmost + ;; CHECK-TEXT-NEXT: (local.get $x) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (local.get $y) @@ -367,8 +387,10 @@ ;; CHECK-BIN-NEXT: (local.get $x) ;; CHECK-BIN-NEXT: (f64.const 0) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (f64.const 1.2) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (f64.const 1.2) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (if @@ -376,8 +398,10 @@ ;; CHECK-BIN-NEXT: (local.get $Int) ;; CHECK-BIN-NEXT: (f64.const 0) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (f64.const -3.4) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (f64.const -3.4) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (if @@ -385,8 +409,10 @@ ;; CHECK-BIN-NEXT: (local.get $Double) ;; CHECK-BIN-NEXT: (i32.const 0) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (f64.const 5.6) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (f64.const 5.6) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (if @@ -394,8 +420,10 @@ ;; CHECK-BIN-NEXT: (local.get $x) ;; CHECK-BIN-NEXT: (local.get $y) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (br $label$1 - ;; CHECK-BIN-NEXT: (local.get $x) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (br $label$1 + ;; CHECK-BIN-NEXT: (local.get $x) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (local.get $y) @@ -411,8 +439,10 @@ (local.get $x) (f64.const 0) ) - (br $topmost - (f64.const 1.2) + (then + (br $topmost + (f64.const 1.2) + ) ) ) (if @@ -420,8 +450,10 @@ (local.get $Int) (f64.const 0) ) - (br $topmost - (f64.const -3.4) + (then + (br $topmost + (f64.const -3.4) + ) ) ) (if @@ -429,8 +461,10 @@ (local.get $Double) (i32.const 0) ) - (br $topmost - (f64.const 5.6) + (then + (br $topmost + (f64.const 5.6) + ) ) ) (if @@ -438,8 +472,10 @@ (local.get $x) (local.get $y) ) - (br $topmost - (local.get $x) + (then + (br $topmost + (local.get $x) + ) ) ) (local.get $y) @@ -1497,11 +1533,15 @@ ;; CHECK-TEXT-NEXT: (f64.abs ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 3) - ;; CHECK-TEXT-NEXT: (return - ;; CHECK-TEXT-NEXT: (i32.const 2) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (return + ;; CHECK-TEXT-NEXT: (i32.const 2) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (return - ;; CHECK-TEXT-NEXT: (i32.const 1) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (return + ;; CHECK-TEXT-NEXT: (i32.const 1) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -1509,11 +1549,15 @@ ;; CHECK-BIN: (func $unreachable-if (type $5) (result i32) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 3) - ;; CHECK-BIN-NEXT: (return - ;; CHECK-BIN-NEXT: (i32.const 2) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (return + ;; CHECK-BIN-NEXT: (i32.const 2) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (return - ;; CHECK-BIN-NEXT: (i32.const 1) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (return + ;; CHECK-BIN-NEXT: (i32.const 1) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) @@ -1521,38 +1565,54 @@ (f64.abs (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) - (return (i32.const 2)) - (return (i32.const 1)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 1)) + ) ) ) ) ;; CHECK-TEXT: (func $unreachable-if-toplevel (type $5) (result i32) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 3) - ;; CHECK-TEXT-NEXT: (return - ;; CHECK-TEXT-NEXT: (i32.const 2) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (return + ;; CHECK-TEXT-NEXT: (i32.const 2) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) - ;; CHECK-TEXT-NEXT: (return - ;; CHECK-TEXT-NEXT: (i32.const 1) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (return + ;; CHECK-TEXT-NEXT: (i32.const 1) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $unreachable-if-toplevel (type $5) (result i32) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 3) - ;; CHECK-BIN-NEXT: (return - ;; CHECK-BIN-NEXT: (i32.const 2) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (return + ;; CHECK-BIN-NEXT: (i32.const 2) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) - ;; CHECK-BIN-NEXT: (return - ;; CHECK-BIN-NEXT: (i32.const 1) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (return + ;; CHECK-BIN-NEXT: (i32.const 1) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $unreachable-if-toplevel (result i32) (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) - (return (i32.const 2)) - (return (i32.const 1)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 1)) + ) ) ) ;; CHECK-TEXT: (func $unreachable-loop (type $5) (result i32) @@ -1648,68 +1708,102 @@ ;; CHECK-TEXT: (func $unreachable-ifs (type $FUNCSIG$v) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (nop) - ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (nop) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (nop) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $unreachable-ifs (type $FUNCSIG$v) ;; CHECK-BIN-NEXT: (unreachable) ;; CHECK-BIN-NEXT: ) (func $unreachable-ifs - (if (unreachable) (nop)) - (if (unreachable) (unreachable)) - (if (unreachable) (nop) (nop)) - (if (unreachable) (unreachable) (nop)) - (if (unreachable) (nop) (unreachable)) - (if (unreachable) (unreachable) (unreachable)) + (if (unreachable) (then (nop))) + (if (unreachable) (then (unreachable))) + (if (unreachable) (then (nop) )(else (nop))) + (if (unreachable) (then (unreachable) )(else (nop))) + (if (unreachable) (then (nop) )(else (unreachable))) + (if (unreachable) (then (unreachable) )(else (unreachable))) ;; - (if (i32.const 1) (unreachable) (nop)) - (if (i32.const 1) (nop) (unreachable)) - (if (i32.const 1) (unreachable) (unreachable)) + (if (i32.const 1) (then (unreachable) )(else (nop))) + (if (i32.const 1) (then (nop) )(else (unreachable))) + (if (i32.const 1) (then (unreachable) )(else (unreachable))) ) ;; CHECK-TEXT: (func $unreachable-if-arm (type $FUNCSIG$v) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (nop) - ;; CHECK-TEXT-NEXT: (block + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (nop) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else ;; CHECK-TEXT-NEXT: (unreachable) ;; CHECK-TEXT-NEXT: (drop ;; CHECK-TEXT-NEXT: (i32.const 1) @@ -1720,20 +1814,28 @@ ;; CHECK-BIN: (func $unreachable-if-arm (type $FUNCSIG$v) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (nop) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (nop) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $unreachable-if-arm (if (i32.const 1) - (block - (nop) + (then + (block + (nop) + ) ) - (block - (unreachable) - (drop - (i32.const 1) + (else + (block + (unreachable) + (drop + (i32.const 1) + ) ) ) ) @@ -1800,8 +1902,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (f64.const -3.4) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (f64.const -3.4) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (if @@ -1811,8 +1915,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (f64.const 0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (f64.const 5.6) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (f64.const 5.6) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (f64.const 1.2) @@ -1829,8 +1935,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: (f64.const 0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (f64.const 1.2) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (f64.const 1.2) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (if @@ -1838,8 +1946,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local.get $3) ;; CHECK-BIN-NODEBUG-NEXT: (f64.const 0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (f64.const -3.4) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (f64.const -3.4) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (if @@ -1847,8 +1957,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local.get $4) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 0) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (f64.const 5.6) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (f64.const 5.6) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (if @@ -1856,8 +1968,10 @@ ;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) ;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 -;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (br $label$1 +;; CHECK-BIN-NODEBUG-NEXT: (local.get $0) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (local.get $1) @@ -2229,11 +2343,15 @@ ;; CHECK-BIN-NODEBUG: (func $29 (type $0) (result i32) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) -;; CHECK-BIN-NODEBUG-NEXT: (return -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (return +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (return -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (return +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -2241,11 +2359,15 @@ ;; CHECK-BIN-NODEBUG: (func $30 (type $0) (result i32) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 3) -;; CHECK-BIN-NODEBUG-NEXT: (return -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (return +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 2) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) -;; CHECK-BIN-NODEBUG-NEXT: (return -;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (return +;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -2291,7 +2413,11 @@ ;; CHECK-BIN-NODEBUG: (func $36 (type $1) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (nop) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (nop) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/basic/unreachable-code.wast b/test/lit/basic/unreachable-code.wast index 16ec691a56e..0dfb00c4022 100644 --- a/test/lit/basic/unreachable-code.wast +++ b/test/lit/basic/unreachable-code.wast @@ -15,7 +15,9 @@ ;; CHECK-TEXT: (func $a (type $0) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (type $0 (func)) @@ -23,52 +25,74 @@ ;; CHECK-BIN: (func $a (type $0) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $a (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK-TEXT: (func $b (type $0) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $b (type $0) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $b (if (i32.const 1) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ;; CHECK-TEXT: (func $a-block (type $0) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $a-block (type $0) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $a-block (block (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) ) ) @@ -76,22 +100,34 @@ ;; CHECK-TEXT: (func $b-block (type $0) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-BIN: (func $b-block (type $0) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $b-block (block (if (i32.const 1) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -100,7 +136,9 @@ ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: ) @@ -108,14 +146,18 @@ ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: ) (func $a-prepost (nop) (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) (nop) ) @@ -124,8 +166,12 @@ ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (nop) ;; CHECK-TEXT-NEXT: ) @@ -133,15 +179,23 @@ ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $b-prepost (nop) (if (i32.const 1) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) (nop) ) @@ -151,7 +205,9 @@ ;; CHECK-TEXT-NEXT: (block ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (nop) @@ -160,7 +216,9 @@ ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: ) @@ -168,7 +226,9 @@ (nop) (block (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) ) (nop) @@ -179,8 +239,12 @@ ;; CHECK-TEXT-NEXT: (block ;; CHECK-TEXT-NEXT: (if ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: (nop) @@ -189,16 +253,24 @@ ;; CHECK-BIN-NEXT: (nop) ;; CHECK-BIN-NEXT: (if ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: (then + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $b-block-prepost (nop) (block (if (i32.const 1) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) (nop) @@ -272,30 +344,42 @@ ;; CHECK-BIN-NODEBUG: (func $0 (type $0) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG: (func $1 (type $0) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG: (func $2 (type $0) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG: (func $3 (type $0) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -303,7 +387,9 @@ ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -312,8 +398,12 @@ ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -321,7 +411,9 @@ ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: ) @@ -330,8 +422,12 @@ ;; CHECK-BIN-NODEBUG-NEXT: (nop) ;; CHECK-BIN-NODEBUG-NEXT: (if ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: (then +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/basic/untaken-br_if.wast b/test/lit/basic/untaken-br_if.wast index 23063d79623..bf2ad1ce3db 100644 --- a/test/lit/basic/untaken-br_if.wast +++ b/test/lit/basic/untaken-br_if.wast @@ -15,11 +15,15 @@ ;; CHECK-TEXT: (func $binaryify-untaken-br_if (type $0) (result f32) ;; CHECK-TEXT-NEXT: (if (result f32) ;; CHECK-TEXT-NEXT: (i32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) - ;; CHECK-TEXT-NEXT: (block $label$1 (result f32) - ;; CHECK-TEXT-NEXT: (br_if $label$1 - ;; CHECK-TEXT-NEXT: (f32.const 1) - ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: (then + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) + ;; CHECK-TEXT-NEXT: (else + ;; CHECK-TEXT-NEXT: (block $label$1 (result f32) + ;; CHECK-TEXT-NEXT: (br_if $label$1 + ;; CHECK-TEXT-NEXT: (f32.const 1) + ;; CHECK-TEXT-NEXT: (unreachable) + ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) ;; CHECK-TEXT-NEXT: ) @@ -29,23 +33,31 @@ ;; CHECK-BIN: (func $binaryify-untaken-br_if (type $0) (result f32) ;; CHECK-BIN-NEXT: (if (result f32) ;; CHECK-BIN-NEXT: (i32.const 1) - ;; CHECK-BIN-NEXT: (unreachable) - ;; CHECK-BIN-NEXT: (block $label$3 (result f32) - ;; CHECK-BIN-NEXT: (drop - ;; CHECK-BIN-NEXT: (f32.const 1) - ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (then ;; CHECK-BIN-NEXT: (unreachable) ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (else + ;; CHECK-BIN-NEXT: (block $label$3 (result f32) + ;; CHECK-BIN-NEXT: (drop + ;; CHECK-BIN-NEXT: (f32.const 1) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: (unreachable) + ;; CHECK-BIN-NEXT: ) + ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) ;; CHECK-BIN-NEXT: ) (func $binaryify-untaken-br_if (result f32) (if (result f32) (i32.const 1) - (unreachable) - (block $label$1 (result f32) - (br_if $label$1 - (f32.const 1) - (unreachable) + (then + (unreachable) + ) + (else + (block $label$1 (result f32) + (br_if $label$1 + (f32.const 1) + (unreachable) + ) ) ) ) @@ -56,12 +68,16 @@ ;; CHECK-BIN-NODEBUG: (func $0 (type $0) (result f32) ;; CHECK-BIN-NODEBUG-NEXT: (if (result f32) ;; CHECK-BIN-NODEBUG-NEXT: (i32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: (unreachable) -;; CHECK-BIN-NODEBUG-NEXT: (block $label$3 (result f32) -;; CHECK-BIN-NODEBUG-NEXT: (drop -;; CHECK-BIN-NODEBUG-NEXT: (f32.const 1) -;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (then ;; CHECK-BIN-NODEBUG-NEXT: (unreachable) ;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (else +;; CHECK-BIN-NODEBUG-NEXT: (block $label$3 (result f32) +;; CHECK-BIN-NODEBUG-NEXT: (drop +;; CHECK-BIN-NODEBUG-NEXT: (f32.const 1) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: (unreachable) +;; CHECK-BIN-NODEBUG-NEXT: ) +;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) ;; CHECK-BIN-NODEBUG-NEXT: ) diff --git a/test/lit/if-then-else.wast b/test/lit/if-then-else.wast index 9d457bef1ec..9d13cea9226 100644 --- a/test/lit/if-then-else.wast +++ b/test/lit/if-then-else.wast @@ -6,18 +6,22 @@ ;; CHECK: (func $test (param $0 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return diff --git a/test/lit/multivalue.wast b/test/lit/multivalue.wast index 77941f529aa..e3de5da1bf4 100644 --- a/test/lit/multivalue.wast +++ b/test/lit/multivalue.wast @@ -473,15 +473,19 @@ ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (type $2) (result i32 i64 externref) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (tuple.make 3 - ;; CHECK-NEXT: (i32.const 42) - ;; CHECK-NEXT: (i64.const 42) - ;; CHECK-NEXT: (ref.null noextern) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (tuple.make 3 + ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: (i64.const 42) + ;; CHECK-NEXT: (ref.null noextern) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (tuple.make 3 - ;; CHECK-NEXT: (i32.const 42) - ;; CHECK-NEXT: (i64.const 42) - ;; CHECK-NEXT: (ref.null noextern) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (tuple.make 3 + ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: (i64.const 42) + ;; CHECK-NEXT: (ref.null noextern) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -500,15 +504,19 @@ (func $mv-if (result i32 i64 externref) (if (result i32 i64 externref) (i32.const 1) - (tuple.make 3 - (i32.const 42) - (i64.const 42) - (ref.null extern) + (then + (tuple.make 3 + (i32.const 42) + (i64.const 42) + (ref.null extern) + ) ) - (tuple.make 3 - (i32.const 42) - (i64.const 42) - (ref.null extern) + (else + (tuple.make 3 + (i32.const 42) + (i64.const 42) + (ref.null extern) + ) ) ) ) diff --git a/test/lit/non-nullable-locals.wast b/test/lit/non-nullable-locals.wast index 04bc5df1adc..21c12d4ad76 100644 --- a/test/lit/non-nullable-locals.wast +++ b/test/lit/non-nullable-locals.wast @@ -123,11 +123,15 @@ ;; CHECK-NEXT: (ref.func $helper) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -140,11 +144,15 @@ (ref.func $helper) ) ) - (drop - (local.get $x) + (then + (drop + (local.get $x) + ) ) - (drop - (local.get $x) + (else + (drop + (local.get $x) + ) ) ) ) diff --git a/test/lit/passes/O.wast b/test/lit/passes/O.wast index ce2c8521155..7affbb8b7c9 100644 --- a/test/lit/passes/O.wast +++ b/test/lit/passes/O.wast @@ -26,8 +26,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ret) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 999) @@ -36,9 +38,11 @@ (block $out (result i32) (drop (call $ret)) (if (call $ret) - (return + (then (return - (i32.const 1) + (return + (i32.const 1) + ) ) ) ) @@ -55,8 +59,12 @@ (block $label$1 (if (i32.const 0) - (br $label$1) - (unreachable) + (then + (br $label$1) + ) + (else + (unreachable) + ) ) ) ) @@ -83,16 +91,22 @@ (local.get $0) (i32.const -1073741824) ) - (local.set $0 - (i32.const -1073741824) - ) - (if - (i32.gt_s - (local.get $0) - (i32.const 1073741823) - ) + (then (local.set $0 - (i32.const 1073741823) + (i32.const -1073741824) + ) + ) + (else + (if + (i32.gt_s + (local.get $0) + (i32.const 1073741823) + ) + (then + (local.set $0 + (i32.const 1073741823) + ) + ) ) ) ) @@ -108,8 +122,10 @@ (func $end-if-else (export "end-if-else") (param $x i32) (result i32) (if (local.get $x) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) ) (local.get $x) @@ -117,15 +133,21 @@ ;; CHECK: (func $end-if-else-call (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (call $ret) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $ret) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $end-if-else-call (export "end-if-else-call") (param $x i32) (result i32) (if (local.get $x) - (local.set $x - (call $ret) + (then + (local.set $x + (call $ret) + ) ) ) (local.get $x) diff --git a/test/lit/passes/O3_inline-functions-with-loops_flexible-inline-max-function-size=30.wast b/test/lit/passes/O3_inline-functions-with-loops_flexible-inline-max-function-size=30.wast index e0045579dd6..87dec51e350 100644 --- a/test/lit/passes/O3_inline-functions-with-loops_flexible-inline-max-function-size=30.wast +++ b/test/lit/passes/O3_inline-functions-with-loops_flexible-inline-max-function-size=30.wast @@ -28,8 +28,10 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.add @@ -81,7 +83,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) @@ -134,7 +136,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $0) diff --git a/test/lit/passes/O3_inlining.wast b/test/lit/passes/O3_inlining.wast index a16a8b8d45d..14f54df5c2a 100644 --- a/test/lit/passes/O3_inlining.wast +++ b/test/lit/passes/O3_inlining.wast @@ -16,7 +16,9 @@ (func $0 (if (global.get $global$1) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$1 (i32.const 0) @@ -29,8 +31,12 @@ (i32.load16_u offset=3 (i32.const 0) ) - (i32.const 1) - (i32.const 0) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) ) ) (unreachable) @@ -41,7 +47,9 @@ ;; CHECK: (func $1 (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$1 ;; CHECK-NEXT: (i32.const 0) @@ -52,7 +60,9 @@ ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $1 (param $var$0 i32) diff --git a/test/lit/passes/O4_disable-bulk-memory.wast b/test/lit/passes/O4_disable-bulk-memory.wast index 051f62456b2..63bb0ea406c 100644 --- a/test/lit/passes/O4_disable-bulk-memory.wast +++ b/test/lit/passes/O4_disable-bulk-memory.wast @@ -20,14 +20,18 @@ ) (i32.const 127) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$0 (i32.const -1) ) (if (global.get $global$0) - (unreachable) + (then + (unreachable) + ) ) (unreachable) ) @@ -162,30 +166,34 @@ (i32.const 2) ) ) - (block (result i32) - (local.set $3 - (local.get $2) - ) - (local.set $4 - (local.get $1) - ) - (local.set $5 - (i32.const 0) - ) - (i32.load offset=8 - (i32.add + (then + (block (result i32) + (local.set $3 + (local.get $2) + ) + (local.set $4 + (local.get $1) + ) + (local.set $5 + (i32.const 0) + ) + (i32.load offset=8 (i32.add - (local.get $3) - (i32.shl - (local.get $4) - (i32.const 2) + (i32.add + (local.get $3) + (i32.shl + (local.get $4) + (i32.const 2) + ) ) + (local.get $5) ) - (local.get $5) ) ) ) - (unreachable) + (else + (unreachable) + ) ) ) (func $assembly/index/Body#offsetMomentum (; 5 ;) (type $2) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) @@ -227,7 +235,9 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 1073741824) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.gt_u @@ -259,42 +269,48 @@ ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (memory.grow - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (memory.grow + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 65535) + ;; CHECK-NEXT: (i32.const -65536) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -65536) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (memory.grow - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (memory.grow + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -315,7 +331,9 @@ (local.get $0) (i32.const 1073741824) ) - (unreachable) + (then + (unreachable) + ) ) (local.set $1 (global.get $global$1) @@ -357,54 +375,60 @@ (i32.const 16) ) ) - (block - (local.set $2 - (i32.shr_u - (i32.and - (i32.add - (i32.sub - (local.get $4) - (local.get $1) + (then + (block + (local.set $2 + (i32.shr_u + (i32.and + (i32.add + (i32.sub + (local.get $4) + (local.get $1) + ) + (i32.const 65535) + ) + (i32.xor + (i32.const 65535) + (i32.const -1) ) - (i32.const 65535) - ) - (i32.xor - (i32.const 65535) - (i32.const -1) ) + (i32.const 16) ) - (i32.const 16) ) - ) - (local.set $3 - (select - (local.tee $3 - (local.get $5) - ) - (local.tee $6 - (local.get $2) - ) - (i32.gt_s - (local.get $3) - (local.get $6) - ) - ) - ) - (if - (i32.lt_s - (memory.grow - (local.get $3) + (local.set $3 + (select + (local.tee $3 + (local.get $5) + ) + (local.tee $6 + (local.get $2) + ) + (i32.gt_s + (local.get $3) + (local.get $6) + ) ) - (i32.const 0) ) (if (i32.lt_s (memory.grow - (local.get $2) + (local.get $3) ) (i32.const 0) ) - (unreachable) + (then + (if + (i32.lt_s + (memory.grow + (local.get $2) + ) + (i32.const 0) + ) + (then + (unreachable) + ) + ) + ) ) ) ) @@ -531,9 +555,11 @@ (i32.eqz (local.get $0) ) - (local.set $0 - (call $~lib/memory/memory.allocate - (i32.const 4) + (then + (local.set $0 + (call $~lib/memory/memory.allocate + (i32.const 4) + ) ) ) ) @@ -584,9 +610,11 @@ (i32.eqz (local.get $0) ) - (local.set $0 - (call $~lib/memory/memory.allocate - (i32.const 56) + (then + (local.set $0 + (call $~lib/memory/memory.allocate + (i32.const 56) + ) ) ) ) @@ -755,14 +783,16 @@ (i32.const 1073741816) ) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 40) - (i32.const 26) - (i32.const 2) + (then + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 40) + (i32.const 26) + (i32.const 2) + ) + (unreachable) ) - (unreachable) ) ) (local.set $1 @@ -793,7 +823,9 @@ (i32.eqz (local.get $2) ) - (return) + (then + (return) + ) ) (i32.store8 (local.get $0) @@ -814,7 +846,9 @@ (local.get $2) (i32.const 2) ) - (return) + (then + (return) + ) ) (i32.store8 (i32.add @@ -855,7 +889,9 @@ (local.get $2) (i32.const 6) ) - (return) + (then + (return) + ) ) (i32.store8 (i32.add @@ -879,7 +915,9 @@ (local.get $2) (i32.const 8) ) - (return) + (then + (return) + ) ) (local.set $3 (i32.and @@ -939,7 +977,9 @@ (local.get $2) (i32.const 8) ) - (return) + (then + (return) + ) ) (i32.store (i32.add @@ -980,7 +1020,9 @@ (local.get $2) (i32.const 24) ) - (return) + (then + (return) + ) ) (i32.store (i32.add @@ -1091,47 +1133,49 @@ (local.get $2) (i32.const 32) ) - (block - (block $label$10 - (i64.store - (local.get $0) - (local.get $5) - ) - (i64.store - (i32.add + (then + (block + (block $label$10 + (i64.store (local.get $0) - (i32.const 8) + (local.get $5) ) - (local.get $5) - ) - (i64.store - (i32.add - (local.get $0) - (i32.const 16) + (i64.store + (i32.add + (local.get $0) + (i32.const 8) + ) + (local.get $5) ) - (local.get $5) - ) - (i64.store - (i32.add - (local.get $0) - (i32.const 24) + (i64.store + (i32.add + (local.get $0) + (i32.const 16) + ) + (local.get $5) ) - (local.get $5) - ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 32) + (i64.store + (i32.add + (local.get $0) + (i32.const 24) + ) + (local.get $5) ) - ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 32) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 32) + ) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 32) + ) ) ) + (br $label$8) ) - (br $label$8) ) ) ) @@ -1148,14 +1192,16 @@ (local.get $1) (i32.const 268435454) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 8) - (i32.const 45) - (i32.const 39) + (then + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 8) + (i32.const 45) + (i32.const 39) + ) + (unreachable) ) - (unreachable) ) ) (local.set $2 @@ -1175,9 +1221,11 @@ (i32.eqz (local.get $0) ) - (local.set $0 - (call $~lib/memory/memory.allocate - (i32.const 8) + (then + (local.set $0 + (call $~lib/memory/memory.allocate + (i32.const 8) + ) ) ) ) @@ -1514,7 +1562,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i64.const 0) @@ -1668,7 +1716,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (f64.load offset=48 ;; CHECK-NEXT: (local.tee $1 @@ -1742,10 +1790,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load offset=8 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.load offset=8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.div @@ -1854,7 +1906,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $0 @@ -1914,7 +1966,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $13) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (f64.mul ;; CHECK-NEXT: (local.get $17) @@ -2701,7 +2753,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 @@ -2784,7 +2836,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (f64.sub ;; CHECK-NEXT: (local.get $7) @@ -2946,32 +2998,40 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load offset=8 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.load offset=8 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $assembly/index/getBody (; 25 ;) (type $3) (param $0 i32) (result i32) @@ -2994,11 +3054,15 @@ ) ) ) - (call $~lib/array/Array#__get - (local.get $1) - (local.get $0) + (then + (call $~lib/array/Array#__get + (local.get $1) + (local.get $0) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) ;; CHECK: (func $start (; has Stack IR ;) diff --git a/test/lit/passes/Oz.wast b/test/lit/passes/Oz.wast index 85a722737a4..42295ec2308 100644 --- a/test/lit/passes/Oz.wast +++ b/test/lit/passes/Oz.wast @@ -166,8 +166,10 @@ ;; CHECK: (func $11 (type $1) (; has Stack IR ;) (param $0 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -175,9 +177,13 @@ (func $11 (export "eliminate-redundant-checks-1") (param $0 i32) (result i32) (if (local.get $0) - (if - (local.get $0) - (return (local.get $0)) + (then + (if + (local.get $0) + (then + (return (local.get $0)) + ) + ) ) ) (i32.const 0) @@ -189,15 +195,19 @@ (i32.const 0) (local.get $0) ) - (return (local.get $0)) + (then + (return (local.get $0)) + ) ) (i32.const 0) ) ;; CHECK: (func $12 (type $0) (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -205,9 +215,13 @@ (func $12 (export "eliminate-redundant-checks-2") (param $0 i32) (param $1 i32) (result i32) (if (local.tee $1 (local.get $0)) - (if - (local.get $1) - (return (local.get $1)) + (then + (if + (local.get $1) + (then + (return (local.get $1)) + ) + ) ) ) (i32.const 0) @@ -219,7 +233,9 @@ (i32.const 0) (local.get $1) ) - (return (local.get $1)) + (then + (return (local.get $1)) + ) ) (i32.const 0) ) @@ -230,8 +246,10 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -243,7 +261,9 @@ (i32.const 0) (local.tee $1 (local.get $0)) ) - (return (local.get $1)) + (then + (return (local.get $1)) + ) ) (i32.const 0) ) @@ -255,8 +275,10 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -268,7 +290,9 @@ (local.get $1) (local.tee $1 (local.get $0)) ) - (return (local.get $1)) + (then + (return (local.get $1)) + ) ) (i32.const 0) ) diff --git a/test/lit/passes/asyncify-wasm64.wast b/test/lit/passes/asyncify-wasm64.wast index 8349eedf268..07d1942e4af 100644 --- a/test/lit/passes/asyncify-wasm64.wast +++ b/test/lit/passes/asyncify-wasm64.wast @@ -55,7 +55,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -91,7 +91,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -116,7 +116,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -145,15 +145,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -163,7 +165,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -254,7 +256,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -290,7 +292,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -315,7 +317,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -344,15 +346,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -362,7 +366,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -451,7 +455,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -487,7 +491,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -518,15 +522,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -536,7 +542,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -557,15 +563,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -575,7 +583,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) @@ -652,7 +660,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -683,7 +691,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -711,28 +719,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -741,7 +753,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -797,7 +809,9 @@ ;; CHECK-NEXT: ) (func $liveness4 (param $live0 i32) (param $dead0 i32) (if (i32.const 0) - (call $import) + (then + (call $import) + ) ) (drop (local.get $live0)) ) @@ -811,7 +825,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -822,7 +838,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -847,7 +863,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -865,28 +881,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -895,7 +915,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $dead0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -937,7 +957,9 @@ (func $liveness5 (param $dead0 i32) (drop (local.get $dead0)) (if (i32.const 0) - (call $import) ;; live before and after call, but not during + (then + (call $import) ;; live before and after call, but not during + ) ) (local.set $dead0 (i32.const 1)) (drop (local.get $dead0)) @@ -953,7 +975,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -984,7 +1006,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -1009,8 +1031,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $live) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $live) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1024,7 +1048,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -1033,8 +1057,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1098,7 +1124,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -1134,7 +1160,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i64.add @@ -1159,7 +1185,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -1180,7 +1206,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) @@ -1190,8 +1216,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1264,7 +1292,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1281,7 +1311,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1301,7 +1333,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1318,7 +1352,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify-wasm64_pass-arg=in-secondary-memory.wast b/test/lit/passes/asyncify-wasm64_pass-arg=in-secondary-memory.wast index 35692883e76..1a8f6dfef5e 100644 --- a/test/lit/passes/asyncify-wasm64_pass-arg=in-secondary-memory.wast +++ b/test/lit/passes/asyncify-wasm64_pass-arg=in-secondary-memory.wast @@ -48,7 +48,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store $asyncify_memory ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -84,7 +84,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store $asyncify_memory ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -109,7 +109,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -138,15 +138,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -156,7 +158,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -248,7 +250,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -265,7 +269,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -285,7 +291,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -302,7 +310,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify.wast b/test/lit/passes/asyncify.wast index 236f29fa56d..968cc571673 100644 --- a/test/lit/passes/asyncify.wast +++ b/test/lit/passes/asyncify.wast @@ -54,7 +54,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -90,7 +90,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -115,7 +115,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -144,15 +144,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -162,7 +164,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -253,7 +255,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -289,7 +291,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -314,7 +316,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -343,15 +345,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -361,7 +365,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -450,7 +454,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -486,7 +490,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -517,15 +521,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -535,7 +541,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -556,15 +562,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -574,7 +582,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $live1) ;; CHECK-NEXT: ) @@ -651,7 +659,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -682,7 +690,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -710,28 +718,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -740,7 +752,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -796,7 +808,9 @@ ;; CHECK-NEXT: ) (func $liveness4 (param $live0 i32) (param $dead0 i32) (if (i32.const 0) - (call $import) + (then + (call $import) + ) ) (drop (local.get $live0)) ) @@ -810,7 +824,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -821,7 +837,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -846,7 +862,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -864,28 +880,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -894,7 +914,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $dead0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -936,7 +956,9 @@ (func $liveness5 (param $dead0 i32) (drop (local.get $dead0)) (if (i32.const 0) - (call $import) ;; live before and after call, but not during + (then + (call $import) ;; live before and after call, but not during + ) ) (local.set $dead0 (i32.const 1)) (drop (local.get $dead0)) @@ -952,7 +974,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -983,7 +1005,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1008,8 +1030,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $live) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $live) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1023,7 +1047,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -1032,8 +1056,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1097,7 +1123,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1133,7 +1159,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1158,7 +1184,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -1179,7 +1205,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) @@ -1189,8 +1215,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1263,7 +1291,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1280,7 +1310,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1300,7 +1332,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1317,7 +1351,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_enable-multivalue.wast b/test/lit/passes/asyncify_enable-multivalue.wast index 04b0a470788..69ae2efc6d0 100644 --- a/test/lit/passes/asyncify_enable-multivalue.wast +++ b/test/lit/passes/asyncify_enable-multivalue.wast @@ -41,7 +41,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $sleeping) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -49,7 +49,7 @@ ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -60,14 +60,18 @@ (func $do_sleep (if (i32.eqz (global.get $sleeping)) - (block - (global.set $sleeping (i32.const 1)) - ;; we should set up the data at address 4 around here - (call $asyncify_start_unwind (i32.const 4)) + (then + (block + (global.set $sleeping (i32.const 1)) + ;; we should set up the data at address 4 around here + (call $asyncify_start_unwind (i32.const 4)) + ) ) - (block - (global.set $sleeping (i32.const 0)) - (call $asyncify_stop_rewind) + (else + (block + (global.set $sleeping (i32.const 0)) + (call $asyncify_stop_rewind) + ) ) ) ) @@ -80,7 +84,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -91,7 +97,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -116,7 +122,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -129,15 +137,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $do_sleep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -147,7 +157,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -192,7 +204,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -203,7 +217,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -233,15 +247,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -318,7 +334,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -335,7 +353,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -355,7 +375,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -372,7 +394,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -423,7 +447,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -434,7 +460,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -464,15 +490,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -520,7 +548,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -551,7 +579,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -583,7 +611,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -592,11 +620,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -606,7 +638,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -684,7 +716,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -715,7 +747,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -746,7 +778,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -755,11 +787,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -769,8 +805,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -850,7 +888,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -881,7 +919,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -907,36 +945,38 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $l - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $l + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $y + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $y - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -951,15 +991,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -969,7 +1011,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) @@ -1050,7 +1092,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1061,7 +1105,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1086,8 +1130,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1098,28 +1144,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1150,7 +1200,9 @@ ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) - (call $import) + (then + (call $import) + ) ) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) @@ -1165,7 +1217,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1196,7 +1248,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1221,8 +1273,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -1231,8 +1285,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1243,30 +1299,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1280,30 +1340,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1354,8 +1418,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32) @@ -1370,7 +1438,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1381,7 +1451,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1408,8 +1478,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -1418,8 +1490,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1430,13 +1504,17 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1450,30 +1528,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1484,8 +1566,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1518,8 +1602,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) - (return (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (return (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) (return (i32.const 3)) ) @@ -1537,7 +1625,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1568,7 +1656,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1595,8 +1683,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -1605,8 +1695,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1617,30 +1709,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1654,13 +1750,17 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1671,8 +1771,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1724,8 +1826,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (return (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (return (i32.const 2)) + ) ) (return (i32.const 3)) ) @@ -1742,7 +1848,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1778,7 +1884,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1809,7 +1915,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (call $import-mv) ;; CHECK-NEXT: ) @@ -1818,11 +1924,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1832,8 +1942,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1905,7 +2017,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1936,7 +2048,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1967,7 +2079,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -1976,8 +2088,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1987,7 +2101,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -2079,7 +2193,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -2110,7 +2224,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -2141,7 +2255,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -2150,11 +2264,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2164,8 +2282,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2227,7 +2347,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -2238,7 +2360,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -2263,7 +2385,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -2276,15 +2400,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2294,7 +2420,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -2307,15 +2435,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2363,7 +2493,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -2374,7 +2506,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -2399,7 +2531,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -2412,15 +2546,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2430,7 +2566,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -2443,15 +2581,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2501,7 +2641,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -2512,7 +2654,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -2542,15 +2684,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2600,7 +2744,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2617,7 +2763,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2637,7 +2785,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2654,7 +2804,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2701,7 +2853,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2718,7 +2872,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2738,7 +2894,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2755,7 +2913,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast index 59817d3be8b..dcb4ead34f3 100644 --- a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast +++ b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast @@ -38,7 +38,9 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -46,7 +48,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -76,12 +78,14 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -126,7 +130,7 @@ ;; CHECK-NEXT: (local $9 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -154,7 +158,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -186,17 +190,21 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -206,7 +214,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -281,7 +289,7 @@ ;; CHECK-NEXT: (local $5 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -309,7 +317,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -340,17 +348,21 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -360,8 +372,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -438,7 +452,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -455,7 +471,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -475,7 +493,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -492,7 +512,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast index b9ee2146368..7d53b6cbb9d 100644 --- a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast +++ b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast @@ -89,7 +89,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -106,7 +108,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -126,7 +130,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast b/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast index 6e0e5885c4e..1ac962eb91e 100644 --- a/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast +++ b/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast @@ -41,7 +41,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -52,7 +54,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -82,12 +84,14 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -135,7 +139,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -166,7 +170,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -198,17 +202,21 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -218,7 +226,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -296,7 +304,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -327,7 +335,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -358,17 +366,21 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -378,8 +390,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -456,7 +470,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -473,7 +489,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -493,7 +511,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -510,7 +530,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast b/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast index ec16b6d9c2e..112d750ba37 100644 --- a/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast +++ b/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast @@ -51,7 +51,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -67,11 +67,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import @@ -105,7 +109,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -122,7 +128,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -142,7 +150,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_optimize-level=1.wast b/test/lit/passes/asyncify_optimize-level=1.wast index d745c4bc49b..0eefc7ffa82 100644 --- a/test/lit/passes/asyncify_optimize-level=1.wast +++ b/test/lit/passes/asyncify_optimize-level=1.wast @@ -50,7 +50,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -66,11 +66,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -113,7 +115,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -145,7 +147,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -161,11 +163,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -187,8 +191,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) @@ -246,7 +252,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -262,11 +268,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -321,7 +329,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -347,7 +355,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -370,15 +378,17 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $l - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $l + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -393,7 +403,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -410,8 +420,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) @@ -487,7 +499,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -503,12 +515,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -542,7 +556,9 @@ ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) - (call $import) + (then + (call $import) + ) ) ) ;; CHECK: (func $calls-import2-if-else (param $0 i32) @@ -560,7 +576,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -576,7 +592,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__asyncify_state) @@ -594,7 +612,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -623,7 +641,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -648,26 +666,28 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (br_if $__asyncify_unwind + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_if $__asyncify_unwind ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -710,8 +730,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $0 i32) (result i32) @@ -724,7 +748,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -761,8 +785,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -785,7 +811,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) @@ -804,8 +830,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) @@ -830,8 +858,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) - (return (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (return (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) (return (i32.const 3)) ) @@ -850,7 +882,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -866,7 +898,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (global.get $__asyncify_state) @@ -888,7 +922,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -904,12 +938,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -939,16 +975,20 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) @@ -988,8 +1028,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (return (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (return (i32.const 2)) + ) ) (return (i32.const 3)) ) @@ -1000,7 +1044,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1026,7 +1070,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1055,7 +1099,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import3 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -1074,11 +1118,13 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1138,7 +1184,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1164,7 +1210,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1193,7 +1239,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -1271,7 +1317,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1294,7 +1340,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1305,7 +1353,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -1322,7 +1370,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1334,7 +1384,7 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -1385,7 +1435,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1408,7 +1458,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1419,7 +1471,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -1436,7 +1488,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1448,7 +1502,7 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -1507,7 +1561,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.sub @@ -1523,11 +1577,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $__asyncify_unwind @@ -1580,7 +1636,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1597,7 +1655,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1617,7 +1677,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1634,7 +1696,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast index 3c67158d3af..6a002645923 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast @@ -37,7 +37,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (block $__asyncify_unwind @@ -48,7 +50,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -72,7 +74,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $nothing) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $nothing) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) @@ -130,7 +134,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -147,7 +153,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -167,7 +175,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -184,7 +194,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast index adaea8343fd..217feb3581a 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast @@ -43,7 +43,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -54,7 +56,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -79,7 +81,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $nothing) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $nothing) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -92,7 +96,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call_indirect (type $t) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -101,8 +105,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -169,7 +175,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -186,7 +194,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -206,7 +216,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -223,7 +235,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast b/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast index b7edc038cd7..e86fe988e41 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast @@ -55,7 +55,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -78,7 +80,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -105,7 +109,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -132,7 +138,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -159,7 +167,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -176,7 +186,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -196,7 +208,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -213,7 +227,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast b/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast index dcc86471357..d89ff3a1a5b 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast @@ -50,7 +50,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -61,7 +63,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -91,15 +93,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -145,7 +149,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -156,7 +162,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -186,15 +192,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $baz) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -244,7 +252,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -261,7 +271,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -281,7 +293,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -298,7 +312,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast index 05fccc63fef..dc99a09d037 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast @@ -55,18 +55,26 @@ ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) ) ;; CHECK: (func $calls-indirect (param $x i32) @@ -80,7 +88,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -111,7 +119,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -136,8 +144,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -151,7 +161,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call_indirect (type $f) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -160,8 +170,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -233,7 +245,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -250,7 +264,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -270,7 +286,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -287,7 +305,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast index 0811e2a9e3e..519c6ea2f60 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast @@ -46,7 +46,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -57,7 +59,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -87,15 +89,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -139,7 +143,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -170,7 +174,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -201,7 +205,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -210,11 +214,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -224,8 +232,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -287,7 +297,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -318,7 +328,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -343,8 +353,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -353,8 +365,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -365,30 +379,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -402,30 +420,34 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -476,8 +498,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) ) ;; CHECK: (func $calls-indirect (param $x i32) @@ -508,7 +534,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -525,7 +553,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -545,7 +575,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -562,7 +594,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast b/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast index fd214582efb..ba781e12a07 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast @@ -40,7 +40,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $sleeping) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -48,7 +48,7 @@ ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (global.set $sleeping ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -59,14 +59,18 @@ (func $do_sleep (if (i32.eqz (global.get $sleeping)) - (block - (global.set $sleeping (i32.const 1)) - ;; we should set up the data at address 4 around here - (call $asyncify_start_unwind (i32.const 4)) + (then + (block + (global.set $sleeping (i32.const 1)) + ;; we should set up the data at address 4 around here + (call $asyncify_start_unwind (i32.const 4)) + ) ) - (block - (global.set $sleeping (i32.const 0)) - (call $asyncify_stop_rewind) + (else + (block + (global.set $sleeping (i32.const 0)) + (call $asyncify_stop_rewind) + ) ) ) ) @@ -79,7 +83,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -90,7 +96,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -115,7 +121,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -128,15 +136,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $do_sleep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -146,7 +156,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $stuff) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -191,7 +203,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -202,7 +216,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -232,15 +246,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $work) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -314,7 +330,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -331,7 +349,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -351,7 +371,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -368,7 +390,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -415,7 +439,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -426,7 +452,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -456,15 +482,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -512,7 +540,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -543,7 +571,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -575,7 +603,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -584,11 +612,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -598,7 +630,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -676,7 +708,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -707,7 +739,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -738,7 +770,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -747,11 +779,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -761,8 +797,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -841,7 +879,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -872,7 +910,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -898,36 +936,38 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $l - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $l + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $y + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $y - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -942,15 +982,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -960,7 +1002,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) @@ -1040,7 +1082,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1051,7 +1095,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1076,8 +1120,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -1088,28 +1134,32 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (global.get $__asyncify_state) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1140,34 +1190,48 @@ ;; CHECK-NEXT: ) (func $calls-import2-if (param $x i32) (if (local.get $x) - (call $import) + (then + (call $import) + ) ) ) ;; CHECK: (func $calls-import2-if-else (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $calls-import2-if-else (param $x i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) ) ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return @@ -1176,19 +1240,27 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside (param $x i32) (result i32) (if (local.get $x) - (return (i32.const 1)) - (call $import3 (i32.const 2)) + (then + (return (i32.const 1)) + ) + (else + (call $import3 (i32.const 2)) + ) ) (return (i32.const 3)) ) ;; CHECK: (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $import3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return @@ -1197,8 +1269,12 @@ ;; CHECK-NEXT: ) (func $calls-import2-if-else-oneside2 (param $x i32) (result i32) (if (local.get $x) - (call $import3 (i32.const 1)) - (return (i32.const 2)) + (then + (call $import3 (i32.const 1)) + ) + (else + (return (i32.const 2)) + ) ) (return (i32.const 3)) ) @@ -1241,7 +1317,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1272,7 +1348,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1303,7 +1379,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call $import2) ;; CHECK-NEXT: ) @@ -1312,11 +1388,15 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1326,8 +1406,10 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $l - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $l + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1389,7 +1471,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1400,7 +1484,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1425,7 +1509,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1438,15 +1524,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1456,7 +1544,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1469,15 +1559,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1525,7 +1617,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1536,7 +1630,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1561,7 +1655,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring-deep) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1574,15 +1670,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import-deep) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1592,7 +1690,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $boring) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or @@ -1605,15 +1705,17 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1663,7 +1765,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -1674,7 +1778,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -1704,15 +1808,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1762,7 +1868,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1779,7 +1887,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1799,7 +1909,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1816,7 +1928,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast b/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast index ba5c59cd1ec..d5dd3775aeb 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast @@ -38,7 +38,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -49,7 +51,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -79,15 +81,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -127,7 +131,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -138,7 +144,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -168,15 +174,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -244,7 +252,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -261,7 +271,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -281,7 +293,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -298,7 +312,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-side-module.wast b/test/lit/passes/asyncify_pass-arg=asyncify-side-module.wast index 5afc9a83ba5..9dee0f8c011 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-side-module.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-side-module.wast @@ -43,7 +43,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -60,7 +62,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -80,7 +84,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -97,7 +103,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast b/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast index 8e932d4943e..035c460597b 100644 --- a/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast +++ b/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast @@ -37,7 +37,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -48,7 +50,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -78,15 +80,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -126,7 +130,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -137,7 +143,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -167,15 +173,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $calls-import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -215,7 +223,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (block $__asyncify_unwind (result i32) @@ -226,7 +236,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -256,15 +266,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $calls-calls-import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -320,7 +332,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -337,7 +351,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -357,7 +373,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -374,7 +392,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/asyncify_pass-arg=in-secondary-memory.wast b/test/lit/passes/asyncify_pass-arg=in-secondary-memory.wast index e1f8178a0c1..7772d68f55b 100644 --- a/test/lit/passes/asyncify_pass-arg=in-secondary-memory.wast +++ b/test/lit/passes/asyncify_pass-arg=in-secondary-memory.wast @@ -58,7 +58,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store $asyncify_memory ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -94,7 +94,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store $asyncify_memory ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: (i32.add @@ -119,7 +119,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $dead0) ;; CHECK-NEXT: ) @@ -148,15 +148,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__asyncify_unwind - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__asyncify_unwind + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -166,7 +168,7 @@ ;; CHECK-NEXT: (global.get $__asyncify_state) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $live0) ;; CHECK-NEXT: ) @@ -266,7 +268,7 @@ ;; SIZE-NEXT: (global.get $__asyncify_state) ;; SIZE-NEXT: (i32.const 2) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (block + ;; SIZE-NEXT: (then ;; SIZE-NEXT: (i32.store $asyncify_memory ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: (i32.add @@ -302,7 +304,7 @@ ;; SIZE-NEXT: (global.get $__asyncify_state) ;; SIZE-NEXT: (i32.const 2) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (block + ;; SIZE-NEXT: (then ;; SIZE-NEXT: (i32.store $asyncify_memory ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: (i32.add @@ -327,7 +329,7 @@ ;; SIZE-NEXT: (global.get $__asyncify_state) ;; SIZE-NEXT: (i32.const 0) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (block + ;; SIZE-NEXT: (then ;; SIZE-NEXT: (local.set $4 ;; SIZE-NEXT: (local.get $dead0) ;; SIZE-NEXT: ) @@ -356,15 +358,17 @@ ;; SIZE-NEXT: (i32.const 0) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (block + ;; SIZE-NEXT: (then ;; SIZE-NEXT: (call $import) ;; SIZE-NEXT: (if ;; SIZE-NEXT: (i32.eq ;; SIZE-NEXT: (global.get $__asyncify_state) ;; SIZE-NEXT: (i32.const 1) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (br $__asyncify_unwind - ;; SIZE-NEXT: (i32.const 0) + ;; SIZE-NEXT: (then + ;; SIZE-NEXT: (br $__asyncify_unwind + ;; SIZE-NEXT: (i32.const 0) + ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) @@ -374,7 +378,7 @@ ;; SIZE-NEXT: (global.get $__asyncify_state) ;; SIZE-NEXT: (i32.const 0) ;; SIZE-NEXT: ) - ;; SIZE-NEXT: (block + ;; SIZE-NEXT: (then ;; SIZE-NEXT: (local.set $6 ;; SIZE-NEXT: (local.get $live0) ;; SIZE-NEXT: ) @@ -466,7 +470,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -483,7 +489,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -503,7 +511,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -520,7 +530,9 @@ ;; CHECK-NEXT: (global.get $__asyncify_data) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (unreachable) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -544,7 +556,9 @@ ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) -;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: (then +;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) @@ -561,7 +575,9 @@ ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) -;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: (then +;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) @@ -581,7 +597,9 @@ ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) -;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: (then +;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) @@ -598,7 +616,9 @@ ;; SIZE-NEXT: (global.get $__asyncify_data) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) -;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: (then +;; SIZE-NEXT: (unreachable) +;; SIZE-NEXT: ) ;; SIZE-NEXT: ) ;; SIZE-NEXT: ) diff --git a/test/lit/passes/catch-pop-fixup-eh.wast b/test/lit/passes/catch-pop-fixup-eh.wast index 685a0768536..5aba0f73df0 100644 --- a/test/lit/passes/catch-pop-fixup-eh.wast +++ b/test/lit/passes/catch-pop-fixup-eh.wast @@ -250,8 +250,12 @@ ;; CHECK-NEXT: (catch $e-i32 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (pop i32) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -287,8 +291,12 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l0) diff --git a/test/lit/passes/cfp.wast b/test/lit/passes/cfp.wast index b61f2c6a681..7fb2a7f1391 100644 --- a/test/lit/passes/cfp.wast +++ b/test/lit/passes/cfp.wast @@ -417,8 +417,12 @@ ;; CHECK-NEXT: (local.get $struct) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (f32.const 42) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (f32.const 42) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -428,8 +432,12 @@ ;; Fall though a 42 via an if. (if (result f32) (local.get $x) - (unreachable) - (f32.const 42) + (then + (unreachable) + ) + (else + (f32.const 42) + ) ) ) ) diff --git a/test/lit/passes/coalesce-locals-gc.wast b/test/lit/passes/coalesce-locals-gc.wast index 8af0d218743..f5ec6bc39ad 100644 --- a/test/lit/passes/coalesce-locals-gc.wast +++ b/test/lit/passes/coalesce-locals-gc.wast @@ -293,16 +293,20 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (tuple.make 2 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (tuple.make 2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (tuple.make 2 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (tuple.make 2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -311,25 +315,29 @@ ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (type $1) (result (ref any) i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (tuple.make 2 - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (tuple.extract 2 0 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (tuple.make 2 + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (tuple.extract 2 0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (tuple.extract 2 1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (tuple.extract 2 1 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (tuple.make 2 - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (tuple.extract 2 0 + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (tuple.make 2 + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (tuple.extract 2 0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (tuple.extract 2 1 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (tuple.extract 2 1 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -369,16 +377,20 @@ (if (i32.const 0) ;; These two sets will remain. - (local.set $x - (tuple.make 2 - (local.get $any) - (i32.const 1) + (then + (local.set $x + (tuple.make 2 + (local.get $any) + (i32.const 1) + ) ) ) - (local.set $x - (tuple.make 2 - (local.get $any) - (i32.const 2) + (else + (local.set $x + (tuple.make 2 + (local.get $any) + (i32.const 2) + ) ) ) ) @@ -388,8 +400,12 @@ (if (result (ref any) i32) (i32.const 0) ;; These gets will be invalid, so the local will have to be made nullable. - (local.get $x) - (local.get $x) + (then + (local.get $x) + ) + (else + (local.get $x) + ) ) ) ) diff --git a/test/lit/passes/coalesce-locals-learning.wast b/test/lit/passes/coalesce-locals-learning.wast index b8871ddf52a..aa20e87c5a2 100644 --- a/test/lit/passes/coalesce-locals-learning.wast +++ b/test/lit/passes/coalesce-locals-learning.wast @@ -342,11 +342,15 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -355,11 +359,15 @@ (local $y i32) (if (i32.const 0) - (drop - (local.get $x) + (then + (drop + (local.get $x) + ) ) - (drop - (local.get $y) + (else + (drop + (local.get $y) + ) ) ) ) @@ -367,20 +375,24 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -390,20 +402,24 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) ) ) - (block $block3 - (local.set $y - (i32.const 1) - ) - (drop - (local.get $y) + (else + (block $block3 + (local.set $y + (i32.const 1) + ) + (drop + (local.get $y) + ) ) ) ) @@ -413,11 +429,15 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -432,11 +452,15 @@ (local $y i32) (if (i32.const 0) - (local.set $x - (i32.const 0) + (then + (local.set $x + (i32.const 0) + ) ) - (local.set $y - (i32.const 1) + (else + (local.set $y + (i32.const 1) + ) ) ) (drop @@ -457,11 +481,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -482,11 +510,15 @@ ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (drop @@ -507,8 +539,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -529,8 +563,10 @@ ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (drop @@ -548,8 +584,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -567,8 +605,10 @@ ) (if (i32.const 0) - (local.set $y - (i32.const 1) + (then + (local.set $y + (i32.const 1) + ) ) ) (drop @@ -586,12 +626,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -604,12 +646,14 @@ ) (if (i32.const 0) - (block $block1 - (drop - (local.get $x) - ) - (drop - (local.get $y) + (then + (block $block1 + (drop + (local.get $x) + ) + (drop + (local.get $y) + ) ) ) ) @@ -621,12 +665,14 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -638,12 +684,14 @@ (local.tee $x (i32.const 1) ) - (block $block1 - (drop - (local.get $x) - ) - (drop - (local.get $y) + (then + (block $block1 + (drop + (local.get $x) + ) + (drop + (local.get $y) + ) ) ) ) @@ -653,12 +701,14 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -671,12 +721,14 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) ) ) ) @@ -688,15 +740,17 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -709,15 +763,17 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) - ) - (local.set $y - (i32.const 1) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) + (local.set $y + (i32.const 1) + ) ) ) ) @@ -729,12 +785,14 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -747,12 +805,14 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (drop - (local.get $x) - ) - (local.set $y - (i32.const 1) + (then + (block $block1 + (drop + (local.get $x) + ) + (local.set $y + (i32.const 1) + ) ) ) ) @@ -983,102 +1043,122 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 101) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block5 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block5 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 103) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block8 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 104) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 105) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block10 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 106) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 107) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (block $block8 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 104) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 105) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block13 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 108) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 109) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block10 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 106) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 107) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block15 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 110) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 111) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: (block $block13 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 108) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 109) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block15 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 110) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 111) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-happy (type $2) @@ -1090,102 +1170,122 @@ (local $y3 i32) (if (i32.const 0) - (if - (i32.const 1) + (then (if - (i32.const 2) - (block $block3 - (local.set $x1 - (i32.const 100) - ) - (local.set $y2 - (i32.const 101) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y2) + (i32.const 1) + (then + (if + (i32.const 2) + (then + (block $block3 + (local.set $x1 + (i32.const 100) + ) + (local.set $y2 + (i32.const 101) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y2) + ) + ) + ) + (else + (block $block5 + (local.set $x1 + (i32.const 102) + ) + (local.set $y3 + (i32.const 103) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) - (block $block5 - (local.set $x1 - (i32.const 102) - ) - (local.set $y3 - (i32.const 103) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y3) + (else + (if + (i32.const 3) + (then + (block $block8 + (local.set $x2 + (i32.const 104) + ) + (local.set $y1 + (i32.const 105) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y1) + ) + ) + ) + (else + (block $block10 + (local.set $x2 + (i32.const 106) + ) + (local.set $y3 + (i32.const 107) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) ) + ) + (else (if - (i32.const 3) - (block $block8 - (local.set $x2 - (i32.const 104) - ) - (local.set $y1 - (i32.const 105) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y1) + (i32.const 4) + (then + (block $block13 + (local.set $x3 + (i32.const 108) + ) + (local.set $y1 + (i32.const 109) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y1) + ) ) ) - (block $block10 - (local.set $x2 - (i32.const 106) - ) - (local.set $y3 - (i32.const 107) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y3) + (else + (block $block15 + (local.set $x3 + (i32.const 110) + ) + (local.set $y2 + (i32.const 111) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y2) + ) ) ) ) ) - (if - (i32.const 4) - (block $block13 - (local.set $x3 - (i32.const 108) - ) - (local.set $y1 - (i32.const 109) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y1) - ) - ) - (block $block15 - (local.set $x3 - (i32.const 110) - ) - (local.set $y2 - (i32.const 111) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y2) - ) - ) - ) ) ) ;; CHECK: (func $greedy-can-be-sad @@ -1193,102 +1293,122 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 101) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block5 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block5 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 103) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block8 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 104) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 105) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block10 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 106) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 107) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (block $block8 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 104) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 105) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block13 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 108) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 109) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block10 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 106) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 107) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block15 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 110) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 111) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: (block $block13 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 108) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 109) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block15 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 110) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 111) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-sad (type $2) @@ -1300,102 +1420,122 @@ (local $y3 i32) (if (i32.const 0) - (if - (i32.const 1) + (then (if - (i32.const 2) - (block $block3 - (local.set $x1 - (i32.const 100) - ) - (local.set $y2 - (i32.const 101) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y2) + (i32.const 1) + (then + (if + (i32.const 2) + (then + (block $block3 + (local.set $x1 + (i32.const 100) + ) + (local.set $y2 + (i32.const 101) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y2) + ) + ) + ) + (else + (block $block5 + (local.set $x1 + (i32.const 102) + ) + (local.set $y3 + (i32.const 103) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) - (block $block5 - (local.set $x1 - (i32.const 102) - ) - (local.set $y3 - (i32.const 103) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y3) + (else + (if + (i32.const 3) + (then + (block $block8 + (local.set $x2 + (i32.const 104) + ) + (local.set $y1 + (i32.const 105) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y1) + ) + ) + ) + (else + (block $block10 + (local.set $x2 + (i32.const 106) + ) + (local.set $y3 + (i32.const 107) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) ) + ) + (else (if - (i32.const 3) - (block $block8 - (local.set $x2 - (i32.const 104) - ) - (local.set $y1 - (i32.const 105) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y1) + (i32.const 4) + (then + (block $block13 + (local.set $x3 + (i32.const 108) + ) + (local.set $y1 + (i32.const 109) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y1) + ) ) ) - (block $block10 - (local.set $x2 - (i32.const 106) - ) - (local.set $y3 - (i32.const 107) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y3) + (else + (block $block15 + (local.set $x3 + (i32.const 110) + ) + (local.set $y2 + (i32.const 111) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y2) + ) ) ) ) ) - (if - (i32.const 4) - (block $block13 - (local.set $x3 - (i32.const 108) - ) - (local.set $y1 - (i32.const 109) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y1) - ) - ) - (block $block15 - (local.set $x3 - (i32.const 110) - ) - (local.set $y2 - (i32.const 111) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y2) - ) - ) - ) ) ) ;; CHECK: (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -1405,8 +1545,10 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 @@ -1423,93 +1565,101 @@ ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block2 - ;; CHECK-NEXT: (block $while-out$0 - ;; CHECK-NEXT: (loop $while-in$1 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block4 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block2 + ;; CHECK-NEXT: (block $while-out$0 + ;; CHECK-NEXT: (loop $while-in$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (block $block4 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $while-out$2 - ;; CHECK-NEXT: (loop $while-in$3 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (block $while-out$2 + ;; CHECK-NEXT: (loop $while-in$3 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block7 - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (block $block7 + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1523,7 +1673,9 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block9 ;; CHECK-NEXT: (i32.store8 @@ -1565,8 +1717,10 @@ (local.get $i3) (i32.const 4096) ) - (drop - (local.get $i1) + (then + (drop + (local.get $i1) + ) ) ) (local.set $i4 @@ -1583,93 +1737,101 @@ (i32.const 3) ) ) - (block $block2 - (block $while-out$0 - (loop $while-in$1 - (if - (i32.eqz - (i32.and - (local.get $i1) - (i32.const 3) - ) - ) - (br $while-out$0) - ) - (block $block4 + (then + (block $block2 + (block $while-out$0 + (loop $while-in$1 (if (i32.eqz - (local.get $i3) + (i32.and + (local.get $i1) + (i32.const 3) + ) ) - (return - (local.get $i4) + (then + (br $while-out$0) ) ) - (i32.store8 - (local.get $i1) - (i32.load8_s - (local.get $i2) + (block $block4 + (if + (i32.eqz + (local.get $i3) + ) + (then + (return + (local.get $i4) + ) + ) ) - ) - (local.set $i1 - (i32.add + (i32.store8 (local.get $i1) - (i32.const 1) + (i32.load8_s + (local.get $i2) + ) ) - ) - (local.set $i2 - (i32.add - (local.get $i2) - (i32.const 1) + (local.set $i1 + (i32.add + (local.get $i1) + (i32.const 1) + ) ) - ) - (local.set $i3 - (i32.sub - (local.get $i3) - (i32.const 1) + (local.set $i2 + (i32.add + (local.get $i2) + (i32.const 1) + ) + ) + (local.set $i3 + (i32.sub + (local.get $i3) + (i32.const 1) + ) ) ) + (br $while-in$1) ) - (br $while-in$1) ) - ) - (block $while-out$2 - (loop $while-in$3 - (if - (i32.eqz - (i32.ge_s - (local.get $i3) - (i32.const 4) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (local.get $i3) + (i32.const 4) + ) ) - ) - (br $while-out$2) - ) - (block $block7 - (i32.store - (local.get $i1) - (i32.load - (local.get $i2) + (then + (br $while-out$2) ) ) - (local.set $i1 - (i32.add + (block $block7 + (i32.store (local.get $i1) - (i32.const 4) + (i32.load + (local.get $i2) + ) ) - ) - (local.set $i2 - (i32.add - (local.get $i2) - (i32.const 4) + (local.set $i1 + (i32.add + (local.get $i1) + (i32.const 4) + ) ) - ) - (local.set $i3 - (i32.sub - (local.get $i3) - (i32.const 4) + (local.set $i2 + (i32.add + (local.get $i2) + (i32.const 4) + ) + ) + (local.set $i3 + (i32.sub + (local.get $i3) + (i32.const 4) + ) ) ) + (br $while-in$3) ) - (br $while-in$3) ) ) ) @@ -1683,7 +1845,9 @@ (i32.const 0) ) ) - (br $while-out$4) + (then + (br $while-out$4) + ) ) (block $block9 (i32.store8 @@ -1721,16 +1885,22 @@ ;; CHECK: (func $this-is-effective-i-tell-you (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) @@ -1739,16 +1909,22 @@ (func $this-is-effective-i-tell-you (type $4) (param $x i32) (if (i32.const -1) - (block $block1 - (if - (i32.const 0) - (nop) - ) - (local.set $x - (i32.const 1) + (then + (block $block1 + (if + (i32.const 0) + (then + (nop) + ) + ) + (local.set $x + (i32.const 1) + ) ) ) - (nop) + (else + (nop) + ) ) (drop (local.get $x) diff --git a/test/lit/passes/coalesce-locals.wast b/test/lit/passes/coalesce-locals.wast index aa76ca82373..9666c02fa6b 100644 --- a/test/lit/passes/coalesce-locals.wast +++ b/test/lit/passes/coalesce-locals.wast @@ -359,11 +359,15 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -372,11 +376,15 @@ (local $y i32) (if (i32.const 0) - (drop - (local.get $x) + (then + (drop + (local.get $x) + ) ) - (drop - (local.get $y) + (else + (drop + (local.get $y) + ) ) ) ) @@ -384,20 +392,24 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -407,20 +419,24 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) ) ) - (block $block3 - (local.set $y - (i32.const 1) - ) - (drop - (local.get $y) + (else + (block $block3 + (local.set $y + (i32.const 1) + ) + (drop + (local.get $y) + ) ) ) ) @@ -430,11 +446,15 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -449,11 +469,15 @@ (local $y i32) (if (i32.const 0) - (local.set $x - (i32.const 0) + (then + (local.set $x + (i32.const 0) + ) ) - (local.set $y - (i32.const 1) + (else + (local.set $y + (i32.const 1) + ) ) ) (drop @@ -474,11 +498,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -499,11 +527,15 @@ ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (drop @@ -524,8 +556,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -546,8 +580,10 @@ ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (drop @@ -565,8 +601,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -584,8 +622,10 @@ ) (if (i32.const 0) - (local.set $y - (i32.const 1) + (then + (local.set $y + (i32.const 1) + ) ) ) (drop @@ -603,12 +643,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -621,12 +663,14 @@ ) (if (i32.const 0) - (block $block1 - (drop - (local.get $x) - ) - (drop - (local.get $y) + (then + (block $block1 + (drop + (local.get $x) + ) + (drop + (local.get $y) + ) ) ) ) @@ -638,12 +682,14 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -655,12 +701,14 @@ (local.tee $x (i32.const 1) ) - (block $block1 - (drop - (local.get $x) - ) - (drop - (local.get $y) + (then + (block $block1 + (drop + (local.get $x) + ) + (drop + (local.get $y) + ) ) ) ) @@ -670,12 +718,14 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -688,12 +738,14 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) ) ) ) @@ -705,15 +757,17 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -726,15 +780,17 @@ (local $y i32) (if (i32.const 0) - (block $block1 - (local.set $x - (i32.const 0) - ) - (drop - (local.get $x) - ) - (local.set $y - (i32.const 1) + (then + (block $block1 + (local.set $x + (i32.const 0) + ) + (drop + (local.get $x) + ) + (local.set $y + (i32.const 1) + ) ) ) ) @@ -746,12 +802,14 @@ ;; CHECK-NEXT: (local $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -764,15 +822,17 @@ (local $y i32) (if (i32.const 0) - (block $block1 - ;; These locals can be coalesced together: $x's live range ends here, - ;; and $y's begins right after it, so they do not have an overlap with - ;; a different value. - (drop - (local.get $x) - ) - (local.set $y - (i32.const 1) + (then + (block $block1 + ;; These locals can be coalesced together: $x's live range ends here, + ;; and $y's begins right after it, so they do not have an overlap with + ;; a different value. + (drop + (local.get $x) + ) + (local.set $y + (i32.const 1) + ) ) ) ) @@ -785,12 +845,14 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -803,13 +865,15 @@ (local $y i32) (if (i32.const 0) - (block $block1 - ;; As above, but flipping these two instructions causes a conflict. - (local.set $y - (i32.const 1) - ) - (drop - (local.get $x) + (then + (block $block1 + ;; As above, but flipping these two instructions causes a conflict. + (local.set $y + (i32.const 1) + ) + (drop + (local.get $x) + ) ) ) ) @@ -1036,102 +1100,122 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 101) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block5 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block5 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 103) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block8 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 104) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 105) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block10 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 106) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 107) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (block $block8 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 104) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 105) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block13 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 108) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 109) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block10 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 106) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 107) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block15 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 110) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 111) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: (block $block13 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 108) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 109) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block15 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 110) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 111) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $greedy-can-be-happy (type $2) @@ -1143,102 +1227,122 @@ (local $y3 i32) (if (i32.const 0) - (if - (i32.const 1) + (then (if - (i32.const 2) - (block $block3 - (local.set $x1 - (i32.const 100) - ) - (local.set $y2 - (i32.const 101) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y2) + (i32.const 1) + (then + (if + (i32.const 2) + (then + (block $block3 + (local.set $x1 + (i32.const 100) + ) + (local.set $y2 + (i32.const 101) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y2) + ) + ) + ) + (else + (block $block5 + (local.set $x1 + (i32.const 102) + ) + (local.set $y3 + (i32.const 103) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) - (block $block5 - (local.set $x1 - (i32.const 102) - ) - (local.set $y3 - (i32.const 103) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y3) + (else + (if + (i32.const 3) + (then + (block $block8 + (local.set $x2 + (i32.const 104) + ) + (local.set $y1 + (i32.const 105) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y1) + ) + ) + ) + (else + (block $block10 + (local.set $x2 + (i32.const 106) + ) + (local.set $y3 + (i32.const 107) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) ) + ) + (else (if - (i32.const 3) - (block $block8 - (local.set $x2 - (i32.const 104) - ) - (local.set $y1 - (i32.const 105) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y1) + (i32.const 4) + (then + (block $block13 + (local.set $x3 + (i32.const 108) + ) + (local.set $y1 + (i32.const 109) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y1) + ) ) ) - (block $block10 - (local.set $x2 - (i32.const 106) - ) - (local.set $y3 - (i32.const 107) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y3) + (else + (block $block15 + (local.set $x3 + (i32.const 110) + ) + (local.set $y2 + (i32.const 111) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y2) + ) ) ) ) ) - (if - (i32.const 4) - (block $block13 - (local.set $x3 - (i32.const 108) - ) - (local.set $y1 - (i32.const 109) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y1) - ) - ) - (block $block15 - (local.set $x3 - (i32.const 110) - ) - (local.set $y2 - (i32.const 111) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y2) - ) - ) - ) ) ) ;; CHECK: (func $greedy-can-be-sad @@ -1247,99 +1351,119 @@ ;; CHECK-NEXT: (local $2 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (block $block3 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block5 - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 103) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (block $block8 - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 104) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 105) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 101) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block5 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block10 - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 106) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 107) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block8 + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 104) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 105) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block10 + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 106) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 107) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: (block $block13 - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 108) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 109) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block15 - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 110) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 111) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block13 + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 108) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 109) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block15 + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 110) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 111) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1354,102 +1478,122 @@ (local $y3 i32) (if (i32.const 0) - (if - (i32.const 1) + (then (if - (i32.const 2) - (block $block3 - (local.set $x1 - (i32.const 100) - ) - (local.set $y2 - (i32.const 101) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y2) + (i32.const 1) + (then + (if + (i32.const 2) + (then + (block $block3 + (local.set $x1 + (i32.const 100) + ) + (local.set $y2 + (i32.const 101) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y2) + ) + ) + ) + (else + (block $block5 + (local.set $x1 + (i32.const 102) + ) + (local.set $y3 + (i32.const 103) + ) + (drop + (local.get $x1) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) - (block $block5 - (local.set $x1 - (i32.const 102) - ) - (local.set $y3 - (i32.const 103) - ) - (drop - (local.get $x1) - ) - (drop - (local.get $y3) + (else + (if + (i32.const 3) + (then + (block $block8 + (local.set $x2 + (i32.const 104) + ) + (local.set $y1 + (i32.const 105) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y1) + ) + ) + ) + (else + (block $block10 + (local.set $x2 + (i32.const 106) + ) + (local.set $y3 + (i32.const 107) + ) + (drop + (local.get $x2) + ) + (drop + (local.get $y3) + ) + ) + ) ) ) ) + ) + (else (if - (i32.const 3) - (block $block8 - (local.set $x2 - (i32.const 104) - ) - (local.set $y1 - (i32.const 105) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y1) + (i32.const 4) + (then + (block $block13 + (local.set $x3 + (i32.const 108) + ) + (local.set $y1 + (i32.const 109) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y1) + ) ) ) - (block $block10 - (local.set $x2 - (i32.const 106) - ) - (local.set $y3 - (i32.const 107) - ) - (drop - (local.get $x2) - ) - (drop - (local.get $y3) + (else + (block $block15 + (local.set $x3 + (i32.const 110) + ) + (local.set $y2 + (i32.const 111) + ) + (drop + (local.get $x3) + ) + (drop + (local.get $y2) + ) ) ) ) ) - (if - (i32.const 4) - (block $block13 - (local.set $x3 - (i32.const 108) - ) - (local.set $y1 - (i32.const 109) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y1) - ) - ) - (block $block15 - (local.set $x3 - (i32.const 110) - ) - (local.set $y2 - (i32.const 111) - ) - (drop - (local.get $x3) - ) - (drop - (local.get $y2) - ) - ) - ) ) ) ;; CHECK: (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -1459,8 +1603,10 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 @@ -1477,93 +1623,101 @@ ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block2 - ;; CHECK-NEXT: (block $while-out$0 - ;; CHECK-NEXT: (loop $while-in$1 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block4 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block2 + ;; CHECK-NEXT: (block $while-out$0 + ;; CHECK-NEXT: (loop $while-in$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (block $block4 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $while-out$2 - ;; CHECK-NEXT: (loop $while-in$3 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (block $while-out$2 + ;; CHECK-NEXT: (loop $while-in$3 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $block7 - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (block $block7 + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1577,7 +1731,9 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out$4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $while-out$4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $block9 ;; CHECK-NEXT: (i32.store8 @@ -1619,8 +1775,10 @@ (local.get $i3) (i32.const 4096) ) - (drop - (local.get $i1) + (then + (drop + (local.get $i1) + ) ) ) (local.set $i4 @@ -1637,93 +1795,101 @@ (i32.const 3) ) ) - (block $block2 - (block $while-out$0 - (loop $while-in$1 - (if - (i32.eqz - (i32.and - (local.get $i1) - (i32.const 3) - ) - ) - (br $while-out$0) - ) - (block $block4 + (then + (block $block2 + (block $while-out$0 + (loop $while-in$1 (if (i32.eqz - (local.get $i3) + (i32.and + (local.get $i1) + (i32.const 3) + ) ) - (return - (local.get $i4) + (then + (br $while-out$0) ) ) - (i32.store8 - (local.get $i1) - (i32.load8_s - (local.get $i2) + (block $block4 + (if + (i32.eqz + (local.get $i3) + ) + (then + (return + (local.get $i4) + ) + ) ) - ) - (local.set $i1 - (i32.add + (i32.store8 (local.get $i1) - (i32.const 1) + (i32.load8_s + (local.get $i2) + ) ) - ) - (local.set $i2 - (i32.add - (local.get $i2) - (i32.const 1) + (local.set $i1 + (i32.add + (local.get $i1) + (i32.const 1) + ) ) - ) - (local.set $i3 - (i32.sub - (local.get $i3) - (i32.const 1) + (local.set $i2 + (i32.add + (local.get $i2) + (i32.const 1) + ) + ) + (local.set $i3 + (i32.sub + (local.get $i3) + (i32.const 1) + ) ) ) + (br $while-in$1) ) - (br $while-in$1) ) - ) - (block $while-out$2 - (loop $while-in$3 - (if - (i32.eqz - (i32.ge_s - (local.get $i3) - (i32.const 4) + (block $while-out$2 + (loop $while-in$3 + (if + (i32.eqz + (i32.ge_s + (local.get $i3) + (i32.const 4) + ) ) - ) - (br $while-out$2) - ) - (block $block7 - (i32.store - (local.get $i1) - (i32.load - (local.get $i2) + (then + (br $while-out$2) ) ) - (local.set $i1 - (i32.add + (block $block7 + (i32.store (local.get $i1) - (i32.const 4) + (i32.load + (local.get $i2) + ) ) - ) - (local.set $i2 - (i32.add - (local.get $i2) - (i32.const 4) + (local.set $i1 + (i32.add + (local.get $i1) + (i32.const 4) + ) ) - ) - (local.set $i3 - (i32.sub - (local.get $i3) - (i32.const 4) + (local.set $i2 + (i32.add + (local.get $i2) + (i32.const 4) + ) + ) + (local.set $i3 + (i32.sub + (local.get $i3) + (i32.const 4) + ) ) ) + (br $while-in$3) ) - (br $while-in$3) ) ) ) @@ -1737,7 +1903,9 @@ (i32.const 0) ) ) - (br $while-out$4) + (then + (br $while-out$4) + ) ) (block $block9 (i32.store8 @@ -1775,16 +1943,22 @@ ;; CHECK: (func $this-is-effective-i-tell-you (param $0 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: (block $block1 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block1 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) @@ -1793,16 +1967,22 @@ (func $this-is-effective-i-tell-you (type $4) (param $x i32) (if (i32.const -1) - (block $block1 - (if - (i32.const 0) - (nop) - ) - (local.set $x - (i32.const 1) + (then + (block $block1 + (if + (i32.const 0) + (then + (nop) + ) + ) + (local.set $x + (i32.const 1) + ) ) ) - (nop) + (else + (nop) + ) ) (drop (local.get $x) @@ -2004,8 +2184,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $get) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $out @@ -2037,7 +2219,9 @@ ) ) (if (call $get) - (local.set $2 (local.get $1)) ;; copy for 1/2 + (then + (local.set $2 (local.get $1)) ;; copy for 1/2 + ) ) (br_if $out (local.get $2)) (local.set $1 (i32.const 100)) @@ -2053,8 +2237,12 @@ ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2073,8 +2261,12 @@ (local.set $x (if (result i32) (i32.const 1) - (local.get $x) - (local.get $y) + (then + (local.get $x) + ) + (else + (local.get $y) + ) ) ) (drop (local.get $x)) @@ -2089,8 +2281,12 @@ ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2109,8 +2305,12 @@ (local.set $x (if (result i32) (i32.const 1) - (local.get $y) - (local.get $x) + (then + (local.get $y) + ) + (else + (local.get $x) + ) ) ) (drop (local.get $x)) @@ -2125,8 +2325,12 @@ ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2145,8 +2349,12 @@ (local.set $x (if (result i32) (i32.const 1) - (unreachable) - (local.get $x) + (then + (unreachable) + ) + (else + (local.get $x) + ) ) ) (drop (local.get $x)) @@ -2161,8 +2369,12 @@ ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2181,8 +2393,12 @@ (local.set $x (if (result i32) (i32.const 1) - (unreachable) - (local.get $y) + (then + (unreachable) + ) + (else + (local.get $y) + ) ) ) (drop (local.get $x)) @@ -2198,8 +2414,12 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2220,8 +2440,12 @@ (local.tee $x (if (result i32) (i32.const 1) - (local.get $x) - (i32.const 2) + (then + (local.get $x) + ) + (else + (i32.const 2) + ) ) ) ) @@ -2253,7 +2477,9 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (br $label$0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2264,7 +2490,9 @@ (local.tee $0 (if (br $label$0) - (nop) + (then + (nop) + ) ) ) ) @@ -2275,8 +2503,12 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.lt @@ -2290,8 +2522,12 @@ (local.tee $0 (if (result f64) (local.get $1) - (local.get $0) - (unreachable) + (then + (local.get $0) + ) + (else + (unreachable) + ) ) ) (f64.lt @@ -2305,8 +2541,12 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f64.lt @@ -2320,8 +2560,12 @@ (local.tee $0 (if (result f64) (local.get $1) - (unreachable) - (local.get $0) + (then + (unreachable) + ) + (else + (local.get $0) + ) ) ) (f64.lt @@ -2335,8 +2579,10 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -2347,7 +2593,9 @@ (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) @@ -2357,8 +2605,10 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -2369,7 +2619,9 @@ (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) @@ -2382,15 +2634,19 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -2402,8 +2658,10 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -2424,11 +2682,15 @@ (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -2436,7 +2698,9 @@ (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -2797,11 +3061,15 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2840,11 +3108,15 @@ ;; next testcase for more on this.) (if (local.get $0) - (local.set $3 - (local.get $1) + (then + (local.set $3 + (local.get $1) + ) ) - (local.set $3 - (local.get $2) + (else + (local.set $3 + (local.get $2) + ) ) ) (drop @@ -2868,8 +3140,12 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) @@ -2901,11 +3177,15 @@ (nop) (if (local.get $0) - (local.set $1 - (local.get $0) + (then + (local.set $1 + (local.get $0) + ) ) - (local.set $1 - (local.get $0) + (else + (local.set $1 + (local.get $0) + ) ) ) (drop diff --git a/test/lit/passes/code-folding_enable-threads.wast b/test/lit/passes/code-folding_enable-threads.wast index 487fbd3acda..b07000278ed 100644 --- a/test/lit/passes/code-folding_enable-threads.wast +++ b/test/lit/passes/code-folding_enable-threads.wast @@ -19,7 +19,7 @@ ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (call_indirect (type $13) ;; CHECK-NEXT: (block $label$4 @@ -37,15 +37,17 @@ (block $label$1 (if (i32.const 1) - (block $label$3 - (call_indirect (type $13) - (block $label$4 (result f32) ;; but this type may change dangerously - (nop) ;; fold this - (br $label$3) + (then + (block $label$3 + (call_indirect (type $13) + (block $label$4 (result f32) ;; but this type may change dangerously + (nop) ;; fold this + (br $label$3) + ) + (i32.const 105) ) - (i32.const 105) + (nop) ;; with this ) - (nop) ;; with this ) ) ) @@ -53,22 +55,30 @@ ;; CHECK: (func $negative-zero (result f32) ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $label$0 (result f32) - ;; CHECK-NEXT: (f32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$0 (result f32) + ;; CHECK-NEXT: (f32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$1 (result f32) - ;; CHECK-NEXT: (f32.const -0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $label$1 (result f32) + ;; CHECK-NEXT: (f32.const -0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $negative-zero (result f32) (if (result f32) (i32.const 0) - (block $label$0 (result f32) - (f32.const 0) + (then + (block $label$0 (result f32) + (f32.const 0) + ) ) - (block $label$1 (result f32) - (f32.const -0) + (else + (block $label$1 (result f32) + (f32.const -0) + ) ) ) ) @@ -83,11 +93,15 @@ (func $negative-zero-b (result f32) (if (result f32) (i32.const 0) - (block $label$0 (result f32) - (f32.const -0) + (then + (block $label$0 (result f32) + (f32.const -0) + ) ) - (block $label$1 (result f32) - (f32.const -0) + (else + (block $label$1 (result f32) + (f32.const -0) + ) ) ) ) @@ -102,11 +116,15 @@ (func $negative-zero-c (result f32) (if (result f32) (i32.const 0) - (block $label$0 (result f32) - (f32.const 0) + (then + (block $label$0 (result f32) + (f32.const 0) + ) ) - (block $label$1 (result f32) - (f32.const 0) + (else + (block $label$1 (result f32) + (f32.const 0) + ) ) ) ) @@ -114,23 +132,29 @@ ;; CHECK-NEXT: (block $label$A ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $label$B - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (br_table $label$A $label$B + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $label$B + ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_table $label$A $label$B + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block $label$C ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (br_table $label$A $label$C - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_table $label$A $label$C + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -143,29 +167,37 @@ (block $label$A (if (unreachable) - (block + (then (block - (block $label$B - (if - (unreachable) - (br_table $label$A $label$B + (block + (block $label$B + (if (unreachable) + (then + (br_table $label$A $label$B + (unreachable) + ) + ) ) ) + (return) ) - (return) ) ) - (block - (block $label$C - (if - (unreachable) - (br_table $label$A $label$C ;; this all looks mergeable, but $label$A is outside + (else + (block + (block $label$C + (if (unreachable) + (then + (br_table $label$A $label$C ;; this all looks mergeable, but $label$A is outside + (unreachable) + ) + ) ) ) + (return) ) - (return) ) ) ) @@ -175,18 +207,24 @@ ;; CHECK-NEXT: (block $label$A ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $folding-inner0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $folding-inner0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $label$B ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (br_table $label$B $label$B - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_table $label$B $label$B + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -196,29 +234,37 @@ (block $label$A (if (unreachable) - (block + (then (block - (block $label$B - (if - (unreachable) - (br_table $label$B $label$B + (block + (block $label$B + (if (unreachable) + (then + (br_table $label$B $label$B + (unreachable) + ) + ) ) ) + (return) ) - (return) ) ) - (block - (block $label$C - (if - (unreachable) - (br_table $label$C $label$C ;; this all looks mergeable, and is, B ~~ C + (else + (block + (block $label$C + (if (unreachable) + (then + (br_table $label$C $label$C ;; this all looks mergeable, and is, B ~~ C + (unreachable) + ) + ) ) ) + (return) ) - (return) ) ) ) @@ -270,11 +316,15 @@ ;; CHECK-NEXT: (local $var$0 i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.load offset=22 - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.load offset=22 + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.atomic.load offset=22 - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.atomic.load offset=22 + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -282,11 +332,15 @@ (local $var$0 i32) (if (result i32) (i32.const 0) - (i32.load offset=22 - (local.get $var$0) + (then + (i32.load offset=22 + (local.get $var$0) + ) ) - (i32.atomic.load offset=22 - (local.get $var$0) + (else + (i32.atomic.load offset=22 + (local.get $var$0) + ) ) ) ) @@ -313,13 +367,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (br $folding-inner0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $folding-inner0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (br $folding-inner0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $folding-inner0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -351,28 +409,32 @@ ) (if (global.get $global$0) - (block - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (then + (block + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) + (unreachable) ) - (unreachable) ) ) (unreachable) ) (if (global.get $global$0) - (block - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (then + (block + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) + (unreachable) ) - (unreachable) ) ) (unreachable) diff --git a/test/lit/passes/code-pushing-eh.wast b/test/lit/passes/code-pushing-eh.wast index 60d9f907ff3..bfda0dd16b7 100644 --- a/test/lit/passes/code-pushing-eh.wast +++ b/test/lit/passes/code-pushing-eh.wast @@ -329,8 +329,10 @@ ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $param) - ;; CHECK-NEXT: (throw $e - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (throw $e + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x @@ -351,7 +353,9 @@ (local.set $x (i32.const 1)) (if (local.get $param) - (throw $e (i32.const 0)) + (then + (throw $e (i32.const 0)) + ) ) (drop (local.get $x)) ) @@ -365,8 +369,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $param) - ;; CHECK-NEXT: (throw $e - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (throw $e + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -385,7 +391,9 @@ (local.set $x (i32.const 1)) (if (local.get $param) - (throw $e (i32.const 0)) + (then + (throw $e (i32.const 0)) + ) ) (drop (local.get $x)) ) diff --git a/test/lit/passes/code-pushing_ignore-implicit-traps.wast b/test/lit/passes/code-pushing_ignore-implicit-traps.wast index d8fadefd77b..b275e58e25a 100644 --- a/test/lit/passes/code-pushing_ignore-implicit-traps.wast +++ b/test/lit/passes/code-pushing_ignore-implicit-traps.wast @@ -200,7 +200,9 @@ ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -214,7 +216,7 @@ (local $x i32) (block $out (local.set $x (i32.const 1)) - (if (i32.const 2) (nop)) + (if (i32.const 2) (then (nop))) (drop (local.get $x)) ) ) @@ -510,7 +512,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $value-interferes) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $value-interferes) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) @@ -522,7 +526,9 @@ (block $out (local.set $x (i32.load (i32.const 0))) (if (i32.const 1) - (call $value-interferes) + (then + (call $value-interferes) + ) ) (drop (local.get $x)) ) @@ -696,7 +702,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -707,7 +715,9 @@ (br_if $out (i32.const 1)) (if (local.get $x) - (nop) + (then + (nop) + ) ) ) ) diff --git a/test/lit/passes/code-pushing_into_if.wast b/test/lit/passes/code-pushing_into_if.wast index 3ef905dd518..ec10bb226dd 100644 --- a/test/lit/passes/code-pushing_into_if.wast +++ b/test/lit/passes/code-pushing_into_if.wast @@ -12,7 +12,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-nop (param $p i32) @@ -21,7 +23,9 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (nop) + (then + (nop) + ) ) ) @@ -32,8 +36,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-nop-nop (param $p i32) @@ -41,8 +49,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (nop) - (nop) ;; add a nop here compared to the last testcase (no output change) + (then + (nop) + ) + (else + (nop) ;; add a nop here compared to the last testcase (no output change) + ) ) ) @@ -51,7 +63,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -67,7 +79,9 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -76,7 +90,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -84,7 +98,9 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-use-nop (param $p i32) @@ -92,8 +108,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) - (nop) ;; add a nop here compared to the last testcase (no output change) + (then + (drop (local.get $x)) + ) + (else + (nop) ;; add a nop here compared to the last testcase (no output change) + ) ) ) @@ -102,8 +122,10 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -119,8 +141,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (nop) - (drop (local.get $x)) + (then + (nop) + ) + (else + (drop (local.get $x)) + ) ) ) @@ -135,8 +161,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -150,7 +178,9 @@ (local.set $y (local.get $x)) (if (local.get $p) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -161,11 +191,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -175,8 +209,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) + (else + (drop (local.get $x)) + ) ) ) @@ -187,8 +225,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -201,7 +241,9 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) (drop (local.get $x)) ) @@ -213,10 +255,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) @@ -227,8 +273,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) - (nop) ;; add a nop here compared to the last testcase (no output change) + (then + (drop (local.get $x)) + ) + (else + (nop) ;; add a nop here compared to the last testcase (no output change) + ) ) (drop (local.get $x)) ) @@ -240,9 +290,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -254,8 +308,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (nop) - (drop (local.get $x)) ;; now the use in the if is in the else arm + (then + (nop) + ) + (else + (drop (local.get $x)) ;; now the use in the if is in the else arm + ) ) (drop (local.get $x)) ) @@ -265,7 +323,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -273,7 +331,9 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) @@ -285,8 +345,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (drop (local.get $x)) - (return) + (then + (drop (local.get $x)) + ) + (else + (return) + ) ) (drop (local.get $x)) ) @@ -296,8 +360,10 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -315,8 +381,12 @@ (local.set $x (i32.const 1)) (if (local.get $p) - (return) ;; as above, but with arms flipped - (drop (local.get $x)) + (then + (return) ;; as above, but with arms flipped + ) + (else + (drop (local.get $x)) + ) ) (drop (local.get $x)) ) @@ -330,7 +400,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -344,7 +414,7 @@ ;; CHECK-NEXT: (local.get $z) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) @@ -364,11 +434,15 @@ (local.set $z (i32.const 3)) (if (local.get $p) - (block - (drop (local.get $x)) - (drop (local.get $z)) + (then + (block + (drop (local.get $x)) + (drop (local.get $z)) + ) + ) + (else + (drop (local.get $y)) ) - (drop (local.get $y)) ) ) @@ -381,7 +455,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $t) ;; CHECK-NEXT: ) @@ -399,7 +473,9 @@ (drop (i32.const 2)) (if (local.get $p) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -416,8 +492,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -429,7 +507,9 @@ (drop (local.tee $t (i32.const 2))) (if (local.get $p) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -443,8 +523,10 @@ ;; CHECK-NEXT: (local.tee $t ;; CHECK-NEXT: (local.get $p) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -455,7 +537,9 @@ (local.set $x (local.get $t)) (if (local.tee $t (local.get $p)) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -467,8 +551,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -479,7 +565,9 @@ (local.set $x (local.get $t)) (if (local.get $x) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -493,8 +581,10 @@ ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (local.get $p) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -505,7 +595,9 @@ (local.set $x (local.get $t)) (if (local.tee $x (local.get $p)) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -517,7 +609,7 @@ ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (local.get $p) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -537,7 +629,9 @@ ;; anyhow. (local.get $p) ) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) ) @@ -552,8 +646,10 @@ ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: (local.get $p) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) @@ -573,7 +669,9 @@ (br $out) (local.get $p) ) - (drop (local.get $x)) + (then + (drop (local.get $x)) + ) ) (return) ) @@ -589,10 +687,12 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -611,8 +711,12 @@ (local.set $y (local.get $x)) (if (local.get $p) - (drop (local.get $x)) - (drop (local.get $y)) + (then + (drop (local.get $x)) + ) + (else + (drop (local.get $y)) + ) ) ) @@ -625,7 +729,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $y ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -633,8 +737,10 @@ ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -647,8 +753,12 @@ (local.set $y (local.get $x)) (if (local.get $p) - (drop (local.get $y)) - (drop (local.get $x)) + (then + (drop (local.get $y)) + ) + (else + (drop (local.get $x)) + ) ) ) @@ -657,7 +767,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (i32.const 1234) @@ -684,8 +794,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (i32.const 0) @@ -701,8 +813,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $temp) @@ -721,8 +835,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (local.get $temp) ;; this line changed. @@ -738,8 +854,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -758,8 +876,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (nop) ;; this line was added. @@ -776,8 +896,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -800,8 +922,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (nop) @@ -817,7 +941,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (call $call.without.effects ;; CHECK-NEXT: (i32.const 1234) @@ -850,8 +974,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (nop) @@ -875,8 +1001,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $temp) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -897,8 +1025,10 @@ ) (if (local.get $p) - (return - (local.get $temp) + (then + (return + (local.get $temp) + ) ) ) (i32.const 0) @@ -909,14 +1039,18 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (block $label$3 - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $label$3 + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -938,10 +1072,14 @@ ) (if (i32.const 1) - (unreachable) - (block $label$3 - (drop - (local.get $1) + (then + (unreachable) + ) + (else + (block $label$3 + (drop + (local.get $1) + ) ) ) ) diff --git a/test/lit/passes/code-pushing_tnh.wast b/test/lit/passes/code-pushing_tnh.wast index 1dcf725ad57..74791aca91c 100644 --- a/test/lit/passes/code-pushing_tnh.wast +++ b/test/lit/passes/code-pushing_tnh.wast @@ -13,7 +13,9 @@ ;; CHECK-NEXT: (block $block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $temp ;; CHECK-NEXT: (i32.div_u @@ -39,7 +41,9 @@ ) (if (local.get $y) - (return) + (then + (return) + ) ) (drop (local.get $temp) @@ -54,8 +58,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -68,8 +74,10 @@ ) (if (i32.const 0) - (drop - (local.get $x) + (then + (drop + (local.get $x) + ) ) ) ) diff --git a/test/lit/passes/dae-gc-refine-return.wast b/test/lit/passes/dae-gc-refine-return.wast index aa474d7f393..11638b62faa 100644 --- a/test/lit/passes/dae-gc-refine-return.wast +++ b/test/lit/passes/dae-gc-refine-return.wast @@ -78,8 +78,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i31ref) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $refine-return-flow) - ;; CHECK-NEXT: (call $refine-return-flow) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $refine-return-flow) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $refine-return-flow) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $call-refine-return-flow (result anyref) @@ -91,8 +95,12 @@ ;; function's return value. (if (result anyref) (i32.const 1) - (call $refine-return-flow) - (call $refine-return-flow) + (then + (call $refine-return-flow) + ) + (else + (call $refine-return-flow) + ) ) ) @@ -125,14 +133,18 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i31) @@ -145,11 +157,15 @@ (if (i32.const 1) - (return (local.get $i31)) + (then + (return (local.get $i31)) + ) ) (if (i32.const 2) - (return (local.get $i31)) + (then + (return (local.get $i31)) + ) ) (local.get $i31) ) @@ -163,14 +179,18 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $i31) @@ -184,12 +204,16 @@ (if (i32.const 1) - (return (local.get $i31)) + (then + (return (local.get $i31)) + ) ) (if (i32.const 2) ;; The refined return type has to be a supertype of struct. - (return (local.get $struct)) + (then + (return (local.get $struct)) + ) ) (local.get $i31) ) @@ -203,14 +227,18 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $i31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $struct) @@ -224,11 +252,15 @@ (if (i32.const 1) - (return (local.get $i31)) + (then + (return (local.get $i31)) + ) ) (if (i32.const 2) - (return (local.get $i31)) + (then + (return (local.get $i31)) + ) ) ;; The refined return type has to be a supertype of struct. (local.get $struct) @@ -301,8 +333,10 @@ ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call $tail-callee) @@ -313,7 +347,9 @@ ;; This function's return type cannot be refined because of another return ;; whose type prevents it. (if (i32.const 1) - (return (local.get $any)) + (then + (return (local.get $any)) + ) ) (return_call $tail-callee) ) @@ -354,8 +390,10 @@ ;; CHECK-NEXT: (local $any anyref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call_indirect $0 (type $return_{}) @@ -366,7 +404,9 @@ (local $any anyref) (if (i32.const 1) - (return (local.get $any)) + (then + (return (local.get $any)) + ) ) (return_call_indirect (type $return_{}) (i32.const 0)) ) @@ -410,8 +450,10 @@ ;; CHECK-NEXT: (local $"return_{}" (ref null $return_{})) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return_call_ref $return_{} @@ -423,7 +465,9 @@ (local $return_{} (ref null $return_{})) (if (i32.const 1) - (return (local.get $any)) + (then + (return (local.get $any)) + ) ) (return_call_ref $return_{} (local.get $return_{})) ) @@ -466,18 +510,26 @@ ;; CHECK: (func $update-null (type $10) (param $x i32) (param $y i32) (result (ref null ${i32})) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (struct.new_default ${i32_f32}) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (struct.new_default ${i32_f32}) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (struct.new_default ${i32_i64}) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (struct.new_default ${i32_i64}) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $update-null (param $x i32) (param $y i32) (result anyref) @@ -485,12 +537,20 @@ ;; determined by the other two, and is their shared parent ${}. (if (local.get $x) - (if - (local.get $y) - (return (struct.new ${i32_f32})) - (return (ref.null any)) + (then + (if + (local.get $y) + (then + (return (struct.new ${i32_f32})) + ) + (else + (return (ref.null any)) + ) + ) + ) + (else + (return (struct.new ${i32_i64})) ) - (return (struct.new ${i32_i64})) ) ) diff --git a/test/lit/passes/dae-optimizing.wast b/test/lit/passes/dae-optimizing.wast index ddffbacfe46..cb15d55cb07 100644 --- a/test/lit/passes/dae-optimizing.wast +++ b/test/lit/passes/dae-optimizing.wast @@ -20,25 +20,31 @@ ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.const 33554432) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $label$2 (result f32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $label$2 (result f32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (global.get $global$0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$2 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -11) @@ -50,33 +56,39 @@ (local.tee $7 (i32.const 33554432) ) - (drop - (loop $label$2 (result f32) - (if - (global.get $global$0) - (return - (local.get $7) + (then + (drop + (loop $label$2 (result f32) + (if + (global.get $global$0) + (then + (return + (local.get $7) + ) + ) ) - ) - (local.set $8 - (block $label$4 (result i32) - (drop - (local.tee $7 - (local.get $8) + (local.set $8 + (block $label$4 (result i32) + (drop + (local.tee $7 + (local.get $8) + ) ) + (i32.const 0) ) - (i32.const 0) ) + (br_if $label$2 + (local.get $7) + ) + (f32.const 1) ) - (br_if $label$2 - (local.get $7) - ) - (f32.const 1) ) ) - (drop - (call $1 - (f32.const 1) + (else + (drop + (call $1 + (f32.const 1) + ) ) ) ) diff --git a/test/lit/passes/dce-eh.wast b/test/lit/passes/dce-eh.wast index f05f5122e45..123f7a42d72 100644 --- a/test/lit/passes/dce-eh.wast +++ b/test/lit/passes/dce-eh.wast @@ -94,7 +94,9 @@ (throw $e) ) ) - (nop) + (then + (nop) + ) ) (ref.null extern) ) diff --git a/test/lit/passes/dce_all-features.wast b/test/lit/passes/dce_all-features.wast index 255ca82fd51..3eb683676f2 100644 --- a/test/lit/passes/dce_all-features.wast +++ b/test/lit/passes/dce_all-features.wast @@ -43,12 +43,16 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $out3 - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $out3 + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out4 @@ -66,25 +70,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block4 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block4 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out16 ;; CHECK-NEXT: (block $in @@ -96,14 +112,16 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block11 - ;; CHECK-NEXT: (block $out18 - ;; CHECK-NEXT: (block $in19 - ;; CHECK-NEXT: (br_if $in19 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block11 + ;; CHECK-NEXT: (block $out18 + ;; CHECK-NEXT: (block $in19 + ;; CHECK-NEXT: (br_if $in19 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -125,32 +143,38 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block13 - ;; CHECK-NEXT: (block $out25 - ;; CHECK-NEXT: (block $in26 - ;; CHECK-NEXT: (br_table $in26 $in26 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block13 + ;; CHECK-NEXT: (block $out25 + ;; CHECK-NEXT: (block $in26 + ;; CHECK-NEXT: (br_table $in26 $in26 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block15 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block15 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $out29 ;; CHECK-NEXT: (loop $in30 @@ -162,18 +186,20 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block $block20 - ;; CHECK-NEXT: (loop $in32 - ;; CHECK-NEXT: (br_if $in32 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $block20 + ;; CHECK-NEXT: (loop $in32 + ;; CHECK-NEXT: (br_if $in32 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) @@ -182,15 +208,19 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) @@ -202,7 +232,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 139) ;; CHECK-NEXT: ) @@ -211,7 +241,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 246) ;; CHECK-NEXT: ) @@ -220,19 +250,25 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -4) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 22) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 33) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -241,23 +277,31 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 44) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 55) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 66) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 77) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 88) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -266,11 +310,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 99) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) @@ -282,7 +328,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 123) ;; CHECK-NEXT: ) @@ -291,7 +337,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1337) @@ -306,8 +354,10 @@ ) (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) ) (br_table $out $out $out $out @@ -317,19 +367,23 @@ ) (if (i32.const 0) - (block $out - (unreachable) - (drop - (i32.const 0) + (then + (block $out + (unreachable) + (drop + (i32.const 0) + ) ) ) ) (if (i32.const 0) - (block $out - (return) - (drop - (i32.const 0) + (then + (block $out + (return) + (drop + (i32.const 0) + ) ) ) ) @@ -351,68 +405,80 @@ ) (if (i32.const 0) - (block $block4 - (if - (i32.const 0) - (block $out - (unreachable) - (drop - (i32.const 0) + (then + (block $block4 + (if + (i32.const 0) + (then + (block $out + (unreachable) + (drop + (i32.const 0) + ) + ) ) - ) - (block $out - (unreachable) - (drop - (i32.const 0) + (else + (block $out + (unreachable) + (drop + (i32.const 0) + ) + ) ) ) - ) - (drop - (i32.const 0) + (drop + (i32.const 0) + ) ) ) ) (if (i32.const 0) - (drop - (block $out (result i32) - (br $out + (then + (drop + (block $out (result i32) + (br $out + (unreachable) + ) + (drop + (i32.const 0) + ) (unreachable) ) - (drop - (i32.const 0) - ) - (unreachable) ) ) ) (if (i32.const 0) - (drop - (block $out (result i32) - (br_if $out + (then + (drop + (block $out (result i32) + (br_if $out + (unreachable) + (i32.const 0) + ) + (drop + (i32.const 0) + ) (unreachable) - (i32.const 0) ) - (drop - (i32.const 0) - ) - (unreachable) ) ) ) (if (i32.const 0) - (drop - (block $out (result i32) - (br_if $out - (unreachable) + (then + (drop + (block $out (result i32) + (br_if $out + (unreachable) + (unreachable) + ) + (drop + (i32.const 0) + ) (unreachable) ) - (drop - (i32.const 0) - ) - (unreachable) ) ) ) @@ -426,17 +492,19 @@ ) (if (i32.const 0) - (block $block11 - (block $out - (block $in - (br_if $in - (i32.const 1) + (then + (block $block11 + (block $out + (block $in + (br_if $in + (i32.const 1) + ) ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) @@ -458,41 +526,47 @@ ) (if (i32.const 0) - (block $block13 - (block $out - (block $in - (br_table $in $in - (i32.const 1) + (then + (block $block13 + (block $out + (block $in + (br_table $in $in + (i32.const 1) + ) ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) (if (i32.const 0) - (block $block15 - (drop - (i32.const 10) - ) - (drop - (i32.const 42) - ) - (unreachable) - (return + (then + (block $block15 + (drop + (i32.const 10) + ) + (drop + (i32.const 42) + ) (unreachable) + (return + (unreachable) + ) + (unreachable) + (return) ) - (unreachable) - (return) ) ) (if (i32.const 0) - (loop $loop-in18 - (unreachable) + (then + (loop $loop-in18 + (unreachable) + ) ) ) (block $out @@ -505,166 +579,206 @@ ) (if (i32.const 0) - (block $block20 - (loop $in - (br_if $in - (i32.const 1) + (then + (block $block20 + (loop $in + (br_if $in + (i32.const 1) + ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) (if (i32.const 1) - (call $call-me - (i32.const 123) - (unreachable) + (then + (call $call-me + (i32.const 123) + (unreachable) + ) ) ) (if (i32.const 2) - (call $call-me - (unreachable) - (i32.const 0) + (then + (call $call-me + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const 3) - (call $call-me - (unreachable) - (unreachable) + (then + (call $call-me + (unreachable) + (unreachable) + ) ) ) (if (i32.const -1) - (call_indirect (type $ii) - (i32.const 123) - (i32.const 456) - (unreachable) + (then + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (unreachable) + ) ) ) (if (i32.const -2) - (call_indirect (type $ii) - (i32.const 139) - (unreachable) - (i32.const 0) + (then + (call_indirect (type $ii) + (i32.const 139) + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const -3) - (call_indirect (type $ii) - (i32.const 246) - (unreachable) - (unreachable) + (then + (call_indirect (type $ii) + (i32.const 246) + (unreachable) + (unreachable) + ) ) ) (if (i32.const -4) - (call_indirect (type $ii) - (unreachable) - (unreachable) - (unreachable) + (then + (call_indirect (type $ii) + (unreachable) + (unreachable) + (unreachable) + ) ) ) (if (i32.const 11) - (local.set $x - (unreachable) + (then + (local.set $x + (unreachable) + ) ) ) (if (i32.const 22) - (drop - (i32.load - (unreachable) + (then + (drop + (i32.load + (unreachable) + ) ) ) ) (if (i32.const 33) - (i32.store - (i32.const 0) - (unreachable) + (then + (i32.store + (i32.const 0) + (unreachable) + ) ) ) (if (i32.const 44) - (i32.store - (unreachable) - (i32.const 0) + (then + (i32.store + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const 55) - (i32.store - (unreachable) - (unreachable) + (then + (i32.store + (unreachable) + (unreachable) + ) ) ) (if (i32.const 66) - (drop - (i32.eqz - (unreachable) + (then + (drop + (i32.eqz + (unreachable) + ) ) ) ) (if (i32.const 77) - (drop - (i32.add - (unreachable) - (i32.const 0) + (then + (drop + (i32.add + (unreachable) + (i32.const 0) + ) ) ) ) (if (i32.const 88) - (drop - (i32.add - (i32.const 0) - (unreachable) + (then + (drop + (i32.add + (i32.const 0) + (unreachable) + ) ) ) ) (if (i32.const 99) - (i32.add - (unreachable) - (unreachable) + (then + (i32.add + (unreachable) + (unreachable) + ) ) ) (if (i32.const 100) - (drop - (select - (i32.const 123) - (i32.const 456) - (unreachable) + (then + (drop + (select + (i32.const 123) + (i32.const 456) + (unreachable) + ) ) ) ) (if (i32.const 101) - (drop - (select - (i32.const 123) - (unreachable) - (i32.const 456) + (then + (drop + (select + (i32.const 123) + (unreachable) + (i32.const 456) + ) ) ) ) (if (i32.const 102) - (drop - (select - (unreachable) - (i32.const 123) - (i32.const 456) + (then + (drop + (select + (unreachable) + (i32.const 123) + (i32.const 456) + ) ) ) ) @@ -898,28 +1012,32 @@ ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$0 (result i64) - ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$0 (result i64) + ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$1 - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i64.sub - ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (i64.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result i64) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (i64.sub + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (i64.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -931,24 +1049,28 @@ (i64.eqz (local.get $var$0) ) - (block $label$0 (result i64) - (local.get $var$1) + (then + (block $label$0 (result i64) + (local.get $var$1) + ) ) - (block $label$1 (result i64) - (call $call-unreach - (i64.sub - (local.get $var$0) - (i64.const 1) - ) - (i64.mul - (block (result i64) - (local.set $2 - (local.get $var$0) + (else + (block $label$1 (result i64) + (call $call-unreach + (i64.sub + (local.get $var$0) + (i64.const 1) + ) + (i64.mul + (block (result i64) + (local.set $2 + (local.get $var$0) + ) + (nop) + (local.get $2) ) - (nop) - (local.get $2) + (unreachable) ) - (unreachable) ) ) ) @@ -1033,8 +1155,10 @@ (unreachable) (if (unreachable) - (br_if $label$0 - (local.get $var$1) + (then + (br_if $label$0 + (local.get $var$1) + ) ) ) ) @@ -1061,8 +1185,12 @@ ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1071,8 +1199,12 @@ (br $label$0 (if (result i32) (local.get $var$0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -1157,8 +1289,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1177,8 +1313,12 @@ ) (i32.const 1) ) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -1227,8 +1367,12 @@ (i32.load16_s offset=22 align=1 (i32.const 0) ) - (br $top) ;; this keeps the block none after the inner block gets unreachable. but it will vanish into unreachable itself - (unreachable) + (then + (br $top) ;; this keeps the block none after the inner block gets unreachable. but it will vanish into unreachable itself + ) + (else + (unreachable) + ) ) ) ) @@ -1248,16 +1392,24 @@ ;; CHECK: (func $0 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (global.set $global (if (result f64) (i32.const 0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -1269,8 +1421,12 @@ ;; CHECK-NEXT: (local $local f64) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 @@ -1278,8 +1434,12 @@ (local.set $local (if (result f64) (i32.const 0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -1318,17 +1478,25 @@ ;; CHECK: (func $unnecessary-concrete-if (type $0) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $unnecessary-concrete-if (result i32) (if (result i32) ;; unnecessary type (i32.const 0) - (return (i32.const 1)) - (unreachable) + (then + (return (i32.const 1)) + ) + (else + (unreachable) + ) ) ) ;; CHECK: (func $unnecessary-concrete-try (type $0) (result i32) @@ -1368,8 +1536,12 @@ (nop) (unreachable) ) - (unreachable) - (br $label$1) + (then + (unreachable) + ) + (else + (br $label$1) + ) ) ) ) @@ -1436,9 +1608,13 @@ ;; CHECK-NEXT: (ref.cast i31ref ;; CHECK-NEXT: (if (result i31ref) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (ref.i31 - ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.i31 + ;; CHECK-NEXT: (i32.const 42) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1454,11 +1630,15 @@ (ref.cast i31ref (if (result i31ref) (i32.const 0) - (block (result i31ref) - (unreachable) + (then + (block (result i31ref) + (unreachable) + ) ) - (ref.i31 - (i32.const 42) + (else + (ref.i31 + (i32.const 42) + ) ) ) ) diff --git a/test/lit/passes/dce_vacuum_remove-unused-names.wast b/test/lit/passes/dce_vacuum_remove-unused-names.wast index b7a53d61b1e..492029191ff 100644 --- a/test/lit/passes/dce_vacuum_remove-unused-names.wast +++ b/test/lit/passes/dce_vacuum_remove-unused-names.wast @@ -49,8 +49,12 @@ ;; CHECK-NEXT: (local.get $var$1) ;; CHECK-NEXT: (i64.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $set-unreachable (param $var$0 i64) (result i64) @@ -64,11 +68,15 @@ (local.get $var$1) (i64.const 0) ) - (unreachable) - (local.set $var$2 - (i64.mul - (unreachable) - (local.get $var$2) + (then + (unreachable) + ) + (else + (local.set $var$2 + (i64.mul + (unreachable) + (local.get $var$2) + ) ) ) ) diff --git a/test/lit/passes/denan.wast b/test/lit/passes/denan.wast index 1932ce534aa..7baabc36977 100644 --- a/test/lit/passes/denan.wast +++ b/test/lit/passes/denan.wast @@ -186,8 +186,12 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (local.get $0) -;; CHECK-NEXT: (f32.const 0) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (local.get $0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (f32.const 0) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -197,8 +201,12 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (local.get $0) -;; CHECK-NEXT: (f64.const 0) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (local.get $0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (f64.const 0) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (module @@ -255,8 +263,12 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (local.get $0) -;; CHECK-NEXT: (f32.const 0) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (local.get $0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (f32.const 0) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -266,7 +278,11 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (local.get $0) -;; CHECK-NEXT: (f64.const 0) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (local.get $0) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (f64.const 0) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/directize_all-features.wast b/test/lit/passes/directize_all-features.wast index 53ff29ab6e7..c560baf0e8c 100644 --- a/test/lit/passes/directize_all-features.wast +++ b/test/lit/passes/directize_all-features.wast @@ -785,13 +785,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (call $foo1 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $foo1 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $foo2 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $foo2 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -806,13 +810,17 @@ ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: (if ;; IMMUT-NEXT: (local.get $z) - ;; IMMUT-NEXT: (call $foo1 - ;; IMMUT-NEXT: (local.get $3) - ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: (then + ;; IMMUT-NEXT: (call $foo1 + ;; IMMUT-NEXT: (local.get $3) + ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) - ;; IMMUT-NEXT: (call $foo2 - ;; IMMUT-NEXT: (local.get $3) - ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: (else + ;; IMMUT-NEXT: (call $foo2 + ;; IMMUT-NEXT: (local.get $3) + ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) @@ -908,10 +916,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (call $foo2 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $foo2 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -926,10 +938,14 @@ ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: (if ;; IMMUT-NEXT: (local.get $z) - ;; IMMUT-NEXT: (unreachable) - ;; IMMUT-NEXT: (call $foo2 - ;; IMMUT-NEXT: (local.get $3) - ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: (then + ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: ) + ;; IMMUT-NEXT: (else + ;; IMMUT-NEXT: (call $foo2 + ;; IMMUT-NEXT: (local.get $3) + ;; IMMUT-NEXT: (local.get $4) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) @@ -957,8 +973,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; IMMUT: (func $select-both-out-of-range (type $0) (param $x i32) (param $y i32) (param $z i32) @@ -972,8 +992,12 @@ ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: (if ;; IMMUT-NEXT: (local.get $z) - ;; IMMUT-NEXT: (unreachable) - ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: (then + ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: ) + ;; IMMUT-NEXT: (else + ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) (func $select-both-out-of-range (param $x i32) (param $y i32) (param $z i32) @@ -1060,15 +1084,23 @@ ;; CHECK: (func $select-bad-type (type $2) (param $z i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; IMMUT: (func $select-bad-type (type $2) (param $z i32) ;; IMMUT-NEXT: (if ;; IMMUT-NEXT: (local.get $z) - ;; IMMUT-NEXT: (unreachable) - ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: (then + ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: ) + ;; IMMUT-NEXT: (else + ;; IMMUT-NEXT: (unreachable) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) (func $select-bad-type (param $z i32) @@ -1129,11 +1161,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $foo-ref - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $foo-ref + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $foo-ref - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $foo-ref + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1144,11 +1180,15 @@ ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: (if ;; IMMUT-NEXT: (local.get $x) - ;; IMMUT-NEXT: (call $foo-ref - ;; IMMUT-NEXT: (local.get $1) + ;; IMMUT-NEXT: (then + ;; IMMUT-NEXT: (call $foo-ref + ;; IMMUT-NEXT: (local.get $1) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) - ;; IMMUT-NEXT: (call $foo-ref - ;; IMMUT-NEXT: (local.get $1) + ;; IMMUT-NEXT: (else + ;; IMMUT-NEXT: (call $foo-ref + ;; IMMUT-NEXT: (local.get $1) + ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) ;; IMMUT-NEXT: ) diff --git a/test/lit/passes/flatten_all-features.wast b/test/lit/passes/flatten_all-features.wast index 3ce8496863e..fd73326090b 100644 --- a/test/lit/passes/flatten_all-features.wast +++ b/test/lit/passes/flatten_all-features.wast @@ -568,14 +568,18 @@ ;; CHECK: (func $a11 (type $1) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a11 (if (i32.const 0) - (drop (i32.const 1)) + (then + (drop (i32.const 1)) + ) ) ) ;; CHECK: (func $a12 (type $2) (result i32) @@ -583,11 +587,15 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 @@ -599,8 +607,12 @@ ;; CHECK-NEXT: ) (func $a12 (result i32) (if (result i32) (i32.const 0) - (i32.const 1) - (i32.const 2) + (then + (i32.const 1) + ) + (else + (i32.const 2) + ) ) ) ;; CHECK: (func $a13 (type $2) (result i32) @@ -622,11 +634,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -648,8 +664,12 @@ (block $x i32 (if i32 (br_table $x (i32.const 2) (i32.const 0)) - (i32.const 0) - (i32.const 1) + (then + (i32.const 0) + ) + (else + (i32.const 1) + ) ) ) ) @@ -700,11 +720,11 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -725,10 +745,14 @@ (i32.load16_u (i32.const 53) ) - (unreachable) - (drop - (block $label$3 (result f32) - (unreachable) + (then + (unreachable) + ) + (else + (drop + (block $label$3 (result f32) + (unreachable) + ) ) ) ) @@ -955,8 +979,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_table $out $out $out $out @@ -967,7 +993,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out1 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -980,7 +1006,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out3 ;; CHECK-NEXT: (return) ;; CHECK-NEXT: (unreachable) @@ -1010,11 +1036,11 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $block4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out8 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1024,7 +1050,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block $out9 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1045,7 +1071,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out11 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1066,7 +1092,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out13 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1087,7 +1113,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $out15 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1118,7 +1144,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $block11 ;; CHECK-NEXT: (block $out18 ;; CHECK-NEXT: (block $in19 @@ -1159,7 +1185,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $block13 ;; CHECK-NEXT: (block $out25 ;; CHECK-NEXT: (block $in26 @@ -1181,7 +1207,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $block15 ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) @@ -1206,7 +1232,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (loop $loop-in18 ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1229,7 +1255,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $block20 ;; CHECK-NEXT: (loop $in32 ;; CHECK-NEXT: (block @@ -1251,7 +1277,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me ;; CHECK-NEXT: (i32.const 123) @@ -1262,7 +1288,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me ;; CHECK-NEXT: (unreachable) @@ -1273,7 +1299,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call $call-me @@ -1285,7 +1311,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (i32.const 123) @@ -1297,7 +1323,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) ;; CHECK-NEXT: (i32.const 139) @@ -1309,7 +1335,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (call_indirect $0 (type $ii) @@ -1322,7 +1348,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -4) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1336,7 +1362,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -1344,7 +1370,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 22) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (unreachable) @@ -1357,7 +1383,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 33) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 0) @@ -1368,7 +1394,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 44) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (unreachable) @@ -1379,7 +1405,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 55) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.store @@ -1391,7 +1417,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 66) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) @@ -1404,7 +1430,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 77) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (unreachable) @@ -1418,7 +1444,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 88) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.const 0) @@ -1432,7 +1458,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 99) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (i32.add @@ -1444,7 +1470,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 123) @@ -1459,7 +1485,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 101) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 123) @@ -1474,7 +1500,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 102) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (select ;; CHECK-NEXT: (unreachable) @@ -1500,8 +1526,10 @@ ) (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) ) (br_table $out $out $out $out @@ -1511,19 +1539,23 @@ ) (if (i32.const 0) - (block $out1 - (unreachable) - (drop - (i32.const 0) + (then + (block $out1 + (unreachable) + (drop + (i32.const 0) + ) ) ) ) (if (i32.const 0) - (block $out3 - (return) - (drop - (i32.const 0) + (then + (block $out3 + (return) + (drop + (i32.const 0) + ) ) ) ) @@ -1545,68 +1577,80 @@ ) (if (i32.const 0) - (block $block4 - (if - (i32.const 0) - (block $out8 - (unreachable) - (drop - (i32.const 0) + (then + (block $block4 + (if + (i32.const 0) + (then + (block $out8 + (unreachable) + (drop + (i32.const 0) + ) + ) ) - ) - (block $out9 - (unreachable) - (drop - (i32.const 0) + (else + (block $out9 + (unreachable) + (drop + (i32.const 0) + ) + ) ) ) - ) - (drop - (i32.const 0) + (drop + (i32.const 0) + ) ) ) ) (if (i32.const 0) - (drop - (block $out11 (result i32) - (br $out11 + (then + (drop + (block $out11 (result i32) + (br $out11 + (unreachable) + ) + (drop + (i32.const 0) + ) (unreachable) ) - (drop - (i32.const 0) - ) - (unreachable) ) ) ) (if (i32.const 0) - (drop - (block $out13 (result i32) - (br_if $out13 + (then + (drop + (block $out13 (result i32) + (br_if $out13 + (unreachable) + (i32.const 0) + ) + (drop + (i32.const 0) + ) (unreachable) - (i32.const 0) - ) - (drop - (i32.const 0) ) - (unreachable) ) ) ) (if (i32.const 0) - (drop - (block $out15 (result i32) - (br_if $out15 - (unreachable) + (then + (drop + (block $out15 (result i32) + (br_if $out15 + (unreachable) + (unreachable) + ) + (drop + (i32.const 0) + ) (unreachable) ) - (drop - (i32.const 0) - ) - (unreachable) ) ) ) @@ -1620,17 +1664,19 @@ ) (if (i32.const 0) - (block $block11 - (block $out18 - (block $in19 - (br_if $in19 - (i32.const 1) + (then + (block $block11 + (block $out18 + (block $in19 + (br_if $in19 + (i32.const 1) + ) ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) @@ -1652,41 +1698,47 @@ ) (if (i32.const 0) - (block $block13 - (block $out25 - (block $in26 - (br_table $in26 $in26 - (i32.const 1) + (then + (block $block13 + (block $out25 + (block $in26 + (br_table $in26 $in26 + (i32.const 1) + ) ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) (if (i32.const 0) - (block $block15 - (drop - (i32.const 10) - ) - (drop - (i32.const 42) - ) - (unreachable) - (return + (then + (block $block15 + (drop + (i32.const 10) + ) + (drop + (i32.const 42) + ) (unreachable) + (return + (unreachable) + ) + (unreachable) + (return) ) - (unreachable) - (return) ) ) (if (i32.const 0) - (loop $loop-in18 - (unreachable) + (then + (loop $loop-in18 + (unreachable) + ) ) ) (block $out29 @@ -1699,166 +1751,206 @@ ) (if (i32.const 0) - (block $block20 - (loop $in32 - (br_if $in32 - (i32.const 1) + (then + (block $block20 + (loop $in32 + (br_if $in32 + (i32.const 1) + ) + (unreachable) + ) + (drop + (i32.const 10) ) - (unreachable) - ) - (drop - (i32.const 10) ) ) ) (if (i32.const 1) - (call $call-me - (i32.const 123) - (unreachable) + (then + (call $call-me + (i32.const 123) + (unreachable) + ) ) ) (if (i32.const 2) - (call $call-me - (unreachable) - (i32.const 0) + (then + (call $call-me + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const 3) - (call $call-me - (unreachable) - (unreachable) + (then + (call $call-me + (unreachable) + (unreachable) + ) ) ) (if (i32.const -1) - (call_indirect (type $ii) - (i32.const 123) - (i32.const 456) - (unreachable) + (then + (call_indirect (type $ii) + (i32.const 123) + (i32.const 456) + (unreachable) + ) ) ) (if (i32.const -2) - (call_indirect (type $ii) - (i32.const 139) - (unreachable) - (i32.const 0) + (then + (call_indirect (type $ii) + (i32.const 139) + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const -3) - (call_indirect (type $ii) - (i32.const 246) - (unreachable) - (unreachable) + (then + (call_indirect (type $ii) + (i32.const 246) + (unreachable) + (unreachable) + ) ) ) (if (i32.const -4) - (call_indirect (type $ii) - (unreachable) - (unreachable) - (unreachable) + (then + (call_indirect (type $ii) + (unreachable) + (unreachable) + (unreachable) + ) ) ) (if (i32.const 11) - (local.set $x - (unreachable) + (then + (local.set $x + (unreachable) + ) ) ) (if (i32.const 22) - (drop - (i32.load - (unreachable) + (then + (drop + (i32.load + (unreachable) + ) ) ) ) (if (i32.const 33) - (i32.store - (i32.const 0) - (unreachable) + (then + (i32.store + (i32.const 0) + (unreachable) + ) ) ) (if (i32.const 44) - (i32.store - (unreachable) - (i32.const 0) + (then + (i32.store + (unreachable) + (i32.const 0) + ) ) ) (if (i32.const 55) - (i32.store - (unreachable) - (unreachable) + (then + (i32.store + (unreachable) + (unreachable) + ) ) ) (if (i32.const 66) - (drop - (i32.eqz - (unreachable) + (then + (drop + (i32.eqz + (unreachable) + ) ) ) ) (if (i32.const 77) - (drop - (i32.add - (unreachable) - (i32.const 0) + (then + (drop + (i32.add + (unreachable) + (i32.const 0) + ) ) ) ) (if (i32.const 88) - (drop - (i32.add - (i32.const 0) - (unreachable) + (then + (drop + (i32.add + (i32.const 0) + (unreachable) + ) ) ) ) (if (i32.const 99) - (i32.add - (unreachable) - (unreachable) + (then + (i32.add + (unreachable) + (unreachable) + ) ) ) (if (i32.const 100) - (drop - (select - (i32.const 123) - (i32.const 456) - (unreachable) + (then + (drop + (select + (i32.const 123) + (i32.const 456) + (unreachable) + ) ) ) ) (if (i32.const 101) - (drop - (select - (i32.const 123) - (unreachable) - (i32.const 456) + (then + (drop + (select + (i32.const 123) + (unreachable) + (i32.const 456) + ) ) ) ) (if (i32.const 102) - (drop - (select - (unreachable) - (i32.const 123) - (i32.const 456) + (then + (drop + (select + (unreachable) + (i32.const 123) + (i32.const 456) + ) ) ) ) @@ -2296,7 +2388,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $label$0 ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $var$1) @@ -2312,7 +2404,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $var$0) @@ -2374,24 +2466,28 @@ (i64.eqz (local.get $var$0) ) - (block $label$0 (result i64) - (local.get $var$1) + (then + (block $label$0 (result i64) + (local.get $var$1) + ) ) - (block $label$1 (result i64) - (call $call-unreach - (i64.sub - (local.get $var$0) - (i64.const 1) - ) - (i64.mul - (block $block (result i64) - (local.set $2 - (local.get $var$0) + (else + (block $label$1 (result i64) + (call $call-unreach + (i64.sub + (local.get $var$0) + (i64.const 1) + ) + (i64.mul + (block $block (result i64) + (local.set $2 + (local.get $var$0) + ) + (nop) + (local.get $2) ) - (nop) - (local.get $2) + (unreachable) ) - (unreachable) ) ) ) @@ -2564,11 +2660,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 6) - ;; CHECK-NEXT: (local.set $13 - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $13 - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $14 @@ -2625,11 +2725,15 @@ ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $18 @@ -2647,11 +2751,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 @@ -2669,11 +2777,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (local.set $23 - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $23 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $23 - ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $23 + ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $24 @@ -2691,11 +2803,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (local.set $26 - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $26 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $26 - ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $26 + ;; CHECK-NEXT: (i32.const 13) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $27 @@ -2703,11 +2819,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: (local.set $28 - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $28 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $28 - ;; CHECK-NEXT: (i32.const 17) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $28 + ;; CHECK-NEXT: (i32.const 17) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $29 @@ -2744,11 +2864,15 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 5) - ;; CHECK-NEXT: (local.set $31 - ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $31 + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $31 - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $31 + ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $32 @@ -2756,17 +2880,23 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $32) - ;; CHECK-NEXT: (local.set $35 - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $35 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: (local.set $33 - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $33 + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $33 - ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $33 + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $34 @@ -2838,8 +2968,12 @@ (drop (i32.add (i32.const 1) (if (result i32) (i32.const 6) - (i32.const 7) - (i32.const 8) + (then + (i32.const 7) + ) + (else + (i32.const 8) + ) ) )) (drop @@ -2874,8 +3008,12 @@ (select (if (result i32) (i32.const 11) - (i32.const 12) - (i32.const 13) + (then + (i32.const 12) + ) + (else + (i32.const 13) + ) ) (i32.const 9) (i32.const 10) @@ -2886,8 +3024,12 @@ (i32.const 9) (if (result i32) (i32.const 11) - (i32.const 12) - (i32.const 13) + (then + (i32.const 12) + ) + (else + (i32.const 13) + ) ) (i32.const 10) ) @@ -2898,8 +3040,12 @@ (i32.const 10) (if (result i32) (i32.const 11) - (i32.const 12) - (i32.const 13) + (then + (i32.const 12) + ) + (else + (i32.const 13) + ) ) ) ) @@ -2907,14 +3053,22 @@ (select (if (result i32) (i32.const 11) - (i32.const 12) - (i32.const 13) + (then + (i32.const 12) + ) + (else + (i32.const 13) + ) ) (i32.const 14) (if (result i32) (i32.const 15) - (i32.const 16) - (i32.const 17) + (then + (i32.const 16) + ) + (else + (i32.const 17) + ) ) ) ) @@ -2924,14 +3078,26 @@ (if (result i32) (if (result i32) (i32.const 5) - (i32.const 6) - (i32.const 7) + (then + (i32.const 6) + ) + (else + (i32.const 7) + ) ) - (i32.const 8) - (if (result i32) - (i32.const 9) - (i32.const 10) - (i32.const 11) + (then + (i32.const 8) + ) + (else + (if (result i32) + (i32.const 9) + (then + (i32.const 10) + ) + (else + (i32.const 11) + ) + ) ) ) ) @@ -3012,7 +3178,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $label$78 ;; CHECK-NEXT: (local.set $430 ;; CHECK-NEXT: (i32.const 0) @@ -3025,7 +3191,7 @@ ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block $label$79 ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (local.get $9) @@ -3113,35 +3279,39 @@ (local.get $12) (i32.const 65535) ) - (block - (block $label$78 - (local.set $430 - (i32.const 0) + (then + (block + (block $label$78 + (local.set $430 + (i32.const 0) + ) + ) + (local.set $432 + (local.get $430) ) - ) - (local.set $432 - (local.get $430) ) ) - (block - (block $label$79 - (local.set $431 - (i32.lt_u - (local.get $9) - (i32.load16_u offset=2 - (i32.add - (local.get $5) - (i32.mul - (local.get $12) - (i32.const 12) + (else + (block + (block $label$79 + (local.set $431 + (i32.lt_u + (local.get $9) + (i32.load16_u offset=2 + (i32.add + (local.get $5) + (i32.mul + (local.get $12) + (i32.const 12) + ) ) ) ) ) ) - ) - (local.set $432 - (local.get $431) + (local.set $432 + (local.get $431) + ) ) ) ) diff --git a/test/lit/passes/flatten_dfo_O3_enable-threads.wast b/test/lit/passes/flatten_dfo_O3_enable-threads.wast index ccb029060be..34142b73f58 100644 --- a/test/lit/passes/flatten_dfo_O3_enable-threads.wast +++ b/test/lit/passes/flatten_dfo_O3_enable-threads.wast @@ -67,39 +67,43 @@ (nop) (if (i32.const 0) - (i32.store8 - (i32.const 8) - (block $label$2 (result i32) - (drop - (br_if $label$2 - (i32.const 1) - (i32.const 0) - ) - ) - (if - (i32.const 0) + (then + (i32.store8 + (i32.const 8) + (block $label$2 (result i32) (drop (br_if $label$2 (i32.const 1) - (i32.const 1) + (i32.const 0) ) ) - ) - (block $label$4 - (br_if $label$4 - (i32.const 0) - ) - (br_if $label$4 + (if (i32.const 0) + (then + (drop + (br_if $label$2 + (i32.const 1) + (i32.const 1) + ) + ) + ) ) - (drop - (br_if $label$2 - (i32.const 1) + (block $label$4 + (br_if $label$4 + (i32.const 0) + ) + (br_if $label$4 (i32.const 0) ) + (drop + (br_if $label$2 + (i32.const 1) + (i32.const 0) + ) + ) ) + (i32.const 6704) ) - (i32.const 6704) ) ) ) @@ -121,44 +125,58 @@ (i32.wrap_i64 (if (result i64) (i32.const 0) - (i64.const 1) - (if (result i64) - (if (result i32) - (i32.const 0) - (unreachable) - (block $label$6 (result i32) - (block $label$7 - (loop $label$8 - (br_if $label$8 - (br_if $label$6 - (local.tee $var$2 - (block $label$9 (result i32) - (local.get $var$1) + (then + (i64.const 1) + ) + (else + (if (result i64) + (if (result i32) + (i32.const 0) + (then + (unreachable) + ) + (else + (block $label$6 (result i32) + (block $label$7 + (loop $label$8 + (br_if $label$8 + (br_if $label$6 + (local.tee $var$2 + (block $label$9 (result i32) + (local.get $var$1) + ) + ) + (i32.const 0) ) ) - (i32.const 0) - ) - ) - (loop $label$10 - (if - (i32.const 0) - (local.set $var$2 - (local.get $var$1) + (loop $label$10 + (if + (i32.const 0) + (then + (local.set $var$2 + (local.get $var$1) + ) + ) + ) + ) + (drop + (i32.eqz + (local.get $var$2) + ) ) ) ) - (drop - (i32.eqz - (local.get $var$2) - ) - ) + (unreachable) ) ) + ) + (then (unreachable) ) + (else + (i64.const 1) + ) ) - (unreachable) - (i64.const 1) ) ) ) @@ -180,27 +198,31 @@ (local.set $var$4 (if (result i32) (i32.const 0) - (block (result i32) - (local.set $var$4 - (local.tee $var$2 - (i32.xor - (i32.const 0) - (i32.const -1) + (then + (block (result i32) + (local.set $var$4 + (local.tee $var$2 + (i32.xor + (i32.const 0) + (i32.const -1) + ) ) ) + (i32.const 0) ) - (i32.const 0) ) - (block (result i32) - (local.set $var$4 - (local.tee $var$2 - (i32.xor - (i32.const 0) - (i32.const -1) + (else + (block (result i32) + (local.set $var$4 + (local.tee $var$2 + (i32.xor + (i32.const 0) + (i32.const -1) + ) ) ) + (i32.const 0) ) - (i32.const 0) ) ) ) @@ -230,14 +252,18 @@ (local.get $var$1) ) ) - (if - (local.get $var$2) - (i64.atomic.store32 offset=3 - (i32.and - (local.get $var$1) ;; only dfo can figure out that this is 0 - (i32.const 15) + (then + (if + (local.get $var$2) + (then + (i64.atomic.store32 offset=3 + (i32.and + (local.get $var$1) ;; only dfo can figure out that this is 0 + (i32.const 15) + ) + (i64.const -32768) + ) ) - (i64.const -32768) ) ) ) @@ -253,14 +279,18 @@ (local.tee $0 (i32.const 1) ) - (loop $label$2 (result i32) - (select - (i32.const 1) - (i32.const -1709605511) - (local.get $0) + (then + (loop $label$2 (result i32) + (select + (i32.const 1) + (i32.const -1709605511) + (local.get $0) + ) ) ) - (unreachable) + (else + (unreachable) + ) ) ) ) diff --git a/test/lit/passes/flatten_i64-to-i32-lowering.wast b/test/lit/passes/flatten_i64-to-i32-lowering.wast index 16ebaf8829b..d2fc16a58b2 100644 --- a/test/lit/passes/flatten_i64-to-i32-lowering.wast +++ b/test/lit/passes/flatten_i64-to-i32-lowering.wast @@ -62,10 +62,12 @@ ;; CHECK-NEXT: (local.get $i64toi32_i32$4) ;; CHECK-NEXT: (local.get $i64toi32_i32$3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $i64toi32_i32$5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $i64toi32_i32$5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $i64toi32_i32$5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $i64toi32_i32$5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/flatten_rereloop.wast b/test/lit/passes/flatten_rereloop.wast index 17a8e8125d1..07230ca47a4 100644 --- a/test/lit/passes/flatten_rereloop.wast +++ b/test/lit/passes/flatten_rereloop.wast @@ -29,19 +29,23 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f64.const -nan:0xfffffd63e4e5a) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f64.const -nan:0xfffffd63e4e5a) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -50,8 +54,10 @@ (func $0 (result f64) (if (i32.const 0) - (loop $label$2 - (unreachable) + (then + (loop $label$2 + (unreachable) + ) ) ) (f64.const -nan:0xfffffd63e4e5a) @@ -302,25 +308,29 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (f32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (f32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -329,7 +339,9 @@ (func $skipping (param $0 i32) (result f32) (if (i32.const 0) - (unreachable) + (then + (unreachable) + ) ) ;; branches joining here lead to skip opportunities (loop $label$2 (result f32) (f32.const 1) @@ -346,7 +358,9 @@ (func $merging (if (i32.const 0) - (return) + (then + (return) + ) ;; no else, but the else ends up with a return too, and we can merge them ) ) @@ -377,15 +391,19 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (global.set $global - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: (global.set $global + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -395,8 +413,10 @@ (func $skip-only-empty (if (i32.const 1) - (global.set $global - (i32.const 0) + (then + (global.set $global + (i32.const 0) + ) ) ) ) @@ -412,19 +432,23 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -436,7 +460,9 @@ ) (if (i32.const 1) - (unreachable) ;; blocks a path through + (then + (unreachable) ;; blocks a path through + ) ) (i32.const 0) ) @@ -451,28 +477,32 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f32.const 9223372036854775808) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f32.const 9223372036854775808) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$6$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$6$break) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (f32.const 65505) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$6$break) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.const 65505) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$6$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -491,15 +521,19 @@ (func $multipass-for-skips (result f32) (if (result f32) (i32.const 0) - (block (result f32) - (block $label$2 - (br_if $label$2 - (i32.const 536870912) + (then + (block (result f32) + (block $label$2 + (br_if $label$2 + (i32.const 536870912) + ) ) + (f32.const 9223372036854775808) ) - (f32.const 9223372036854775808) ) - (f32.const 65505) + (else + (f32.const 65505) + ) ) ) ;; CHECK: (func $branch-merge-vs-replace @@ -508,18 +542,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $branch-merge-vs-replace (if (i32.const 0) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $unswitch-amount @@ -529,29 +569,33 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const -23) - ;; CHECK-NEXT: (br $block$2$break) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $block$5$break - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $switch$4$leave - ;; CHECK-NEXT: (block $switch$4$default - ;; CHECK-NEXT: (block $switch$4$case$2 - ;; CHECK-NEXT: (br_table $switch$4$case$2 $switch$4$default - ;; CHECK-NEXT: (i32.const 44064) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $block$2$break) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $block$5$break + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block $switch$4$leave + ;; CHECK-NEXT: (block $switch$4$default + ;; CHECK-NEXT: (block $switch$4$case$2 + ;; CHECK-NEXT: (br_table $switch$4$case$2 $switch$4$default + ;; CHECK-NEXT: (i32.const 44064) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$2$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$2$break) + ;; CHECK-NEXT: (br $block$5$break) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$5$break) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -564,14 +608,18 @@ (block $label$1 (if (i32.const -23) - (nop) - (block - (block $label$4 - (br_table $label$1 $label$4 - (i32.const 44064) + (then + (nop) + ) + (else + (block + (block $label$4 + (br_table $label$1 $label$4 + (i32.const 44064) + ) ) + (unreachable) ) - (unreachable) ) ) ) @@ -665,54 +713,66 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -732,28 +792,34 @@ ) (if (local.get $1) - (block + (then (block - (local.set $2 - (local.get $x) - ) - (if - (local.get $2) - (block - (return - (i32.const 2) - ) - (unreachable) + (block + (local.set $2 + (local.get $x) ) - (block - (return - (i32.const 3) + (if + (local.get $2) + (then + (block + (return + (i32.const 2) + ) + (unreachable) + ) + ) + (else + (block + (return + (i32.const 3) + ) + (unreachable) + ) ) - (unreachable) ) ) + (unreachable) ) - (unreachable) ) ) ) @@ -764,11 +830,13 @@ ) (if (local.get $3) - (block - (return - (i32.const 4) + (then + (block + (return + (i32.const 4) + ) + (unreachable) ) - (unreachable) ) ) ) @@ -810,13 +878,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (loop $shape$2$continue - ;; CHECK-NEXT: (call $trivial) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $shape$2$continue) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $shape$2$continue + ;; CHECK-NEXT: (call $trivial) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $shape$2$continue) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $block$17$break) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$17$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -836,8 +908,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (br $shape$4$continue) - ;; CHECK-NEXT: (br $block$19$break) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $shape$4$continue) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$19$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -858,8 +934,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (br $shape$6$continue) - ;; CHECK-NEXT: (br $block$26$break) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $shape$6$continue) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$26$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -880,17 +960,19 @@ ) (if (local.get $1) - (block - (loop $top - (block - (call $trivial) - (nop) - (br $top) + (then + (block + (loop $top + (block + (call $trivial) + (nop) + (br $top) + (unreachable) + ) (unreachable) ) (unreachable) ) - (unreachable) ) ) ) @@ -920,9 +1002,11 @@ ) (if (local.get $3) - (block - (br $top3) - (unreachable) + (then + (block + (br $top3) + (unreachable) + ) ) ) ) @@ -981,19 +1065,23 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (br $block$2$break) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $block$30$break - ;; CHECK-NEXT: (call $unreachable - ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $block$2$break) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $block$30$break + ;; CHECK-NEXT: (call $unreachable + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$30$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$30$break) + ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1011,20 +1099,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $unreachable - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (call $unreachable + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $unreachable - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (call $unreachable + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1040,46 +1132,52 @@ ) (if (local.get $1) - (block + (then (block - (local.set $2 - (local.get $x) - ) - (if - (local.get $2) - (block - (block $block - (call $unreachable - (i32.const 1) - ) - (nop) - (unreachable) - (unreachable) - (call $unreachable - (i32.const 2) - ) - (nop) - ) - (unreachable) + (block + (local.set $2 + (local.get $x) ) - (block - (block $block4 - (call $unreachable - (i32.const 3) + (if + (local.get $2) + (then + (block + (block $block + (call $unreachable + (i32.const 1) + ) + (nop) + (unreachable) + (unreachable) + (call $unreachable + (i32.const 2) + ) + (nop) + ) + (unreachable) ) - (nop) - (return) - (unreachable) - (call $unreachable - (i32.const 4) + ) + (else + (block + (block $block4 + (call $unreachable + (i32.const 3) + ) + (nop) + (return) + (unreachable) + (call $unreachable + (i32.const 4) + ) + (nop) + ) + (unreachable) ) - (nop) ) - (unreachable) ) ) + (unreachable) ) - (unreachable) ) ) ) @@ -1171,13 +1269,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (br $block$3$break) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $before-and-after - ;; CHECK-NEXT: (i32.const 5) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: (call $before-and-after + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$3$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1220,8 +1322,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (br $shape$4$continue) - ;; CHECK-NEXT: (br $block$8$break) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $shape$4$continue) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$8$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1246,15 +1352,19 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $before-and-after - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$10$break) + ;; CHECK-NEXT: (call $before-and-after + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$10$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $block$10$break) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$10$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -1275,20 +1385,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $13) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $before-and-after - ;; CHECK-NEXT: (i32.const 14) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$13$break) + ;; CHECK-NEXT: (call $before-and-after + ;; CHECK-NEXT: (i32.const 14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$13$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $before-and-after - ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$13$break) + ;; CHECK-NEXT: (call $before-and-after + ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$13$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1308,15 +1422,19 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $before-and-after - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$16$break) + ;; CHECK-NEXT: (call $before-and-after + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$16$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $block$16$break) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$16$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block @@ -1472,11 +1590,13 @@ ) (if (local.get $3) - (block - (call $before-and-after - (i32.const 12) + (then + (block + (call $before-and-after + (i32.const 12) + ) + (nop) ) - (nop) ) ) ) @@ -1491,17 +1611,21 @@ ) (if (local.get $4) - (block - (call $before-and-after - (i32.const 14) + (then + (block + (call $before-and-after + (i32.const 14) + ) + (nop) ) - (nop) ) - (block - (call $before-and-after - (i32.const 15) + (else + (block + (call $before-and-after + (i32.const 15) + ) + (nop) ) - (nop) ) ) ) @@ -1512,14 +1636,16 @@ ) (if (local.get $5) - (block - (block $block8 - (call $before-and-after - (i32.const 16) + (then + (block + (block $block8 + (call $before-and-after + (i32.const 16) + ) + (nop) ) (nop) ) - (nop) ) ) ) @@ -1703,20 +1829,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$4$break) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$4$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$4$break) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$4$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1728,17 +1858,21 @@ (func $no-return (; 11 ;) (type $0) (if (i32.const 1) - (block - (drop - (i32.const 2) + (then + (block + (drop + (i32.const 2) + ) + (nop) ) - (nop) ) - (block - (drop - (i32.const 3) + (else + (block + (drop + (i32.const 3) + ) + (nop) ) - (nop) ) ) (nop) @@ -1769,31 +1903,39 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $if-br-wat - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br $block$12$break) + ;; CHECK-NEXT: (call $if-br-wat + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (br $block$12$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $block$2$break) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $block$12$break) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (br $block$2$break) - ;; CHECK-NEXT: (br $block$12$break) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1830,26 +1972,32 @@ ) (if (local.get $1) - (block - (call $if-br-wat - (i32.const 1) + (then + (block + (call $if-br-wat + (i32.const 1) + ) + (nop) ) - (nop) ) - (block + (else (block - (local.set $2 - (local.get $x) - ) - (if - (local.get $2) - (block - (br $label$2) - (unreachable) + (block + (local.set $2 + (local.get $x) + ) + (if + (local.get $2) + (then + (block + (br $label$2) + (unreachable) + ) + ) ) ) + (nop) ) - (nop) ) ) ) diff --git a/test/lit/passes/flatten_simplify-locals-nonesting_dfo_O3.wast b/test/lit/passes/flatten_simplify-locals-nonesting_dfo_O3.wast index 011ea86e9e5..4f1aa8ec382 100644 --- a/test/lit/passes/flatten_simplify-locals-nonesting_dfo_O3.wast +++ b/test/lit/passes/flatten_simplify-locals-nonesting_dfo_O3.wast @@ -38,8 +38,12 @@ (i32.const 1) (local.get $var$0) ) - (i32.const -2405046) - (i32.const 1) + (then + (i32.const -2405046) + ) + (else + (i32.const 1) + ) ) ) ) @@ -51,7 +55,9 @@ (i32.eqz (i32.const 0) ) - (unreachable) + (then + (unreachable) + ) ) (f64.const -9223372036854775808) ) @@ -63,22 +69,28 @@ (block $label$2 (if (i32.const 1) - (block - (drop - (loop $label$5 (result i64) - (if (result i64) - (i32.const 0) - (i64.load offset=22 - (i32.and - (br_if $label$1 - (i32.const 0) - (i32.const 0) + (then + (block + (drop + (loop $label$5 (result i64) + (if (result i64) + (i32.const 0) + (then + (i64.load offset=22 + (i32.and + (br_if $label$1 + (i32.const 0) + (i32.const 0) + ) + (i32.const 15) + ) + (i64.const 1) ) - (i32.const 15) ) - (i64.const 1) + (else + (i64.const 1) + ) ) - (i64.const 1) ) ) ) @@ -102,8 +114,12 @@ (i32.eqz (if (result i32) (i32.const 0) - (i32.const 0) - (local.get $var$2) + (then + (i32.const 0) + ) + (else + (local.get $var$2) + ) ) ) ) @@ -122,7 +138,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -2147483648) ;; CHECK-NEXT: ) @@ -149,15 +165,17 @@ (i32.eqz (local.get $var$4) ) - (block - (local.set $var$4 - (select - (local.get $var$3) - (i32.const -2147483648) - (local.get $var$2) + (then + (block + (local.set $var$4 + (select + (local.get $var$3) + (i32.const -2147483648) + (local.get $var$2) + ) ) + (br $label$1) ) - (br $label$1) ) ) ) diff --git a/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast b/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast index ea693d50230..76b4e6e51f0 100644 --- a/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast +++ b/test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast @@ -143,7 +143,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -180,7 +180,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -197,28 +197,32 @@ (local.get $x) (local.get $y) ) - (block - (local.set $i - (i64.eq - (local.get $a) - (local.get $x) + (then + (block + (local.set $i + (i64.eq + (local.get $a) + (local.get $x) + ) ) - ) - (local.set $j - (i64.ne - (local.get $a) - (local.get $y) + (local.set $j + (i64.ne + (local.get $a) + (local.get $y) + ) ) - ) - (local.set $r - (i32.and - (local.get $i) - (local.get $j) + (local.set $r + (i32.and + (local.get $i) + (local.get $j) + ) ) + (return (local.get $r)) ) - (return (local.get $r)) ) - (unreachable) + (else + (unreachable) + ) ) ) ;; Figure 3, simplified to an if @@ -244,7 +248,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -254,7 +258,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -289,16 +293,20 @@ (local.get $x) (i32.const 1) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (else + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -377,7 +385,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -392,10 +400,12 @@ (func $various-conditions-1 (param $x i32) (if (local.get $x) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) ) @@ -414,7 +424,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -432,10 +442,12 @@ (local.get $x) (i32.const 0) ) - (local.set $x - (i32.sub - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.sub + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -451,7 +463,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -466,10 +478,12 @@ (func $various-conditions-3 (param $x i32) (if (i32.reinterpret_f32 (f32.const 0)) - (local.set $x - (i32.sub - (local.get $x) - (i32.const 4) + (then + (local.set $x + (i32.sub + (local.get $x) + (i32.const 4) + ) ) ) ) @@ -481,7 +495,7 @@ ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -498,10 +512,12 @@ (func $various-conditions-4 (param $x i32) (if (unreachable) - (local.set $x - (i32.add - (local.get $x) - (i32.const 3) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 3) + ) ) ) ) @@ -525,7 +541,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.ctz @@ -565,18 +581,20 @@ (i32.eqz (local.get $x) ) - (local.set $x - (i32.add - (i32.ctz - (local.get $y) - ) - (i32.sub - (i32.clz - (local.get $x) - ) - (i32.popcnt + (then + (local.set $x + (i32.add + (i32.ctz (local.get $y) ) + (i32.sub + (i32.clz + (local.get $x) + ) + (i32.popcnt + (local.get $y) + ) + ) ) ) ) @@ -602,7 +620,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -622,10 +640,12 @@ (i32.const 1) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -650,7 +670,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -670,10 +690,12 @@ (i32.const 1) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -700,7 +722,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -710,7 +732,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -745,16 +767,20 @@ (local.get $x) (i32.const 1) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (else + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -818,7 +844,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load @@ -826,18 +852,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -850,13 +882,21 @@ (if (result i32) (if (result i32) (i32.const 1) - (i32.load + (then + (i32.load + (i32.const 0) + ) + ) + (else (i32.const 0) ) + ) + (then (i32.const 0) ) - (i32.const 0) - (i32.const 1) + (else + (i32.const 1) + ) ) ) ;; CHECK: (func $bad-phi-value-2 (param $x i32) (result i32) @@ -870,7 +910,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load @@ -878,18 +918,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -905,13 +951,21 @@ (if (if (result i32) (i32.const 1) - (i32.load + (then + (i32.load + (i32.const 0) + ) + ) + (else (i32.const 0) ) - (i32.const 0) ) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 2)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 2)) + ) ) (local.get $x) ) @@ -1123,8 +1177,10 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -1139,8 +1195,10 @@ (local $x f64) (if (i32.const 0) - (local.set $x - (f64.const 1) + (then + (local.set $x + (f64.const 1) + ) ) ) (local.get $x) @@ -1153,11 +1211,15 @@ ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -1172,8 +1234,12 @@ (block $label$1 (result f64) (if (result f64) (i32.const 0) - (f64.const 0) - (f64.const 1) + (then + (f64.const 0) + ) + (else + (f64.const 1) + ) ) ) ) @@ -1203,7 +1269,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -1214,7 +1280,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -1242,16 +1308,20 @@ (local.get $x) (local.get $y) ) - (local.set $i - (i32.eq - (local.get $x) - (local.get $y) + (then + (local.set $i + (i32.eq + (local.get $x) + (local.get $y) + ) ) ) - (local.set $i - (i32.add - (local.get $x) - (local.get $y) + (else + (local.set $i + (i32.add + (local.get $x) + (local.get $y) + ) ) ) ) @@ -1321,7 +1391,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1334,8 +1404,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1353,14 +1425,18 @@ (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (return (local.get $x)) ) - (return (local.get $x)) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1378,7 +1454,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1388,8 +1464,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1407,14 +1485,18 @@ (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (unreachable) ) - (unreachable) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1434,7 +1516,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1444,8 +1526,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1470,14 +1554,18 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (br $out) ) - (br $out) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1501,7 +1589,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1513,8 +1601,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1539,14 +1629,18 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (br_table $out $out $out (i32.const 1)) ) - (br_table $out $out $out (i32.const 1)) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1571,7 +1665,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -1580,8 +1674,10 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1606,16 +1702,20 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) - ) - (br_if $out - (local.get $x) + (then + (block + (local.set $x + (i32.const 1) + ) + (br_if $out + (local.get $x) + ) ) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; there *IS* a phi here since it was a br_if @@ -1639,12 +1739,12 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) @@ -1654,7 +1754,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) @@ -1703,19 +1803,25 @@ (block $label$3 (if (local.get $2) - (if - (local.get $0) - (block - (local.set $1 - (i32.const -8531) + (then + (if + (local.get $0) + (then + (block + (local.set $1 + (i32.const -8531) + ) + (br $label$3) + ) ) - (br $label$3) - ) - (block - (local.set $1 - (i32.const -8531) + (else + (block + (local.set $1 + (i32.const -8531) + ) + (br $label$1) + ) ) - (br $label$1) ) ) ) @@ -1749,11 +1855,15 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1770,11 +1880,15 @@ (unreachable) (if (local.get $x) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) (return @@ -2215,7 +2329,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.eqz @@ -2224,7 +2338,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2235,7 +2349,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2248,7 +2362,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eqz @@ -2257,7 +2371,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2268,7 +2382,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2300,37 +2414,49 @@ (local.get $x) (local.get $y) ) - (if - (i64.eqz - (local.get $x) - ) - (local.set $t - (i64.add + (then + (if + (i64.eqz (local.get $x) - (local.get $y) ) - ) - (local.set $t - (i64.sub - (local.get $x) - (local.get $y) + (then + (local.set $t + (i64.add + (local.get $x) + (local.get $y) + ) + ) + ) + (else + (local.set $t + (i64.sub + (local.get $x) + (local.get $y) + ) + ) ) ) ) - (if - (i64.eqz - (local.get $y) - ) - (local.set $t - (i64.mul - (local.get $x) + (else + (if + (i64.eqz (local.get $y) ) - ) - (local.set $t - (i64.div_s - (local.get $x) - (local.get $y) + (then + (local.set $t + (i64.mul + (local.get $x) + (local.get $y) + ) + ) + ) + (else + (local.set $t + (i64.div_s + (local.get $x) + (local.get $y) + ) + ) ) ) ) @@ -3376,14 +3502,14 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3396,7 +3522,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3423,23 +3549,29 @@ (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) (if (local.get $var$2) - (drop - (loop $label$2 (result f64) - (if - (block $label$3 (result i32) - (if + (then + (drop + (loop $label$2 (result f64) + (if + (block $label$3 (result i32) + (if + (i32.const 0) + (then + (unreachable) + ) + ) + (nop) (i32.const 0) + ) + (then (unreachable) ) - (nop) - (i32.const 0) ) - (unreachable) - ) - (br_if $label$2 - (local.get $var$2) + (br_if $label$2 + (local.get $var$2) + ) + (f64.const 0) ) - (f64.const 0) ) ) ) @@ -3466,7 +3598,7 @@ ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1337) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3532,7 +3664,9 @@ (block $label$4 (result i32) (if (i32.const 1337) - (unreachable) + (then + (unreachable) + ) ) (local.get $var$0) ) @@ -3594,11 +3728,11 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$3 @@ -3624,7 +3758,9 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -3658,22 +3794,28 @@ (i32.const 0) ) ) - (unreachable) - (block (result f32) - (if - (loop $label$3 (result i32) - (block $label$4 (result i32) - (i32.clz - (br_if $label$4 - (local.get $var$0) - (i32.const 1) + (then + (unreachable) + ) + (else + (block (result f32) + (if + (loop $label$3 (result i32) + (block $label$4 (result i32) + (i32.clz + (br_if $label$4 + (local.get $var$0) + (i32.const 1) + ) ) ) ) + (then + (nop) + ) ) - (nop) + (f32.const 1) ) - (f32.const 1) ) ) ) @@ -3852,54 +3994,56 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (block $label$2 - ;; CHECK-NEXT: (block $label$3 - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $var$1 - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$2 + ;; CHECK-NEXT: (block $label$3 + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $var$1 + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $label$3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$3 - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (br_if $label$2 + ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$2 - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $13 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $13) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -3914,33 +4058,37 @@ (i32.const -7) ) ) - (block $label$2 - (block $label$3 - (local.set $var$1 - (local.get $var$0) - ) - (br_if $label$3 - (local.tee $var$3 - (i32.const 12) + (then + (block $label$2 + (block $label$3 + (local.set $var$1 + (local.get $var$0) ) + (br_if $label$3 + (local.tee $var$3 + (i32.const 12) + ) + ) + (unreachable) ) - (unreachable) - ) - (br_if $label$2 - (i32.eqz - (local.get $var$1) + (br_if $label$2 + (i32.eqz + (local.get $var$1) + ) ) - ) - (if - (i32.ne - (i32.load - (i32.const 0) + (if + (i32.ne + (i32.load + (i32.const 0) + ) + (local.get $var$0) + ) + (then + (unreachable) ) - (local.get $var$0) ) (unreachable) ) - (unreachable) ) ) ) @@ -4164,7 +4312,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4189,7 +4337,9 @@ ) ) ) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) @@ -4247,7 +4397,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4279,7 +4429,9 @@ (local.get $temp) ) ) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $flipped-needs-right-origin (param $var$0 i32) (result i32) @@ -4320,7 +4472,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4355,7 +4507,9 @@ (i32.const 4) ) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 5) ) @@ -4427,7 +4581,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$2 @@ -4457,14 +4611,16 @@ (loop $label$1 (if (i32.const 0) - (block - (local.set $var$2 - (i32.add - (i32.const 0) - (i32.const 1) + (then + (block + (local.set $var$2 + (i32.add + (i32.const 0) + (i32.const 1) + ) ) + (br $label$1) ) - (br $label$1) ) ) (local.set $var$3 @@ -4497,36 +4653,42 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (loop $label$2 - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $label$2 + ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $var$3 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $var$1 - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.set $var$3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $var$1 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $var$3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$2 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) - ;; CHECK-NEXT: (local.set $var$3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $var$3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4565,28 +4727,34 @@ ) (if (i32.const 0) - (loop $label$2 - (if - (local.get $var$1) - (nop) - ) - (local.set $var$1 - (i32.sub - (i32.const 0) - (local.tee $var$3 - (i32.const 1) + (then + (loop $label$2 + (if + (local.get $var$1) + (then + (nop) ) ) - ) - (br_if $label$2 - (i32.const 0) + (local.set $var$1 + (i32.sub + (i32.const 0) + (local.tee $var$3 + (i32.const 1) + ) + ) + ) + (br_if $label$2 + (i32.const 0) + ) ) ) ) (if (local.get $var$1) - (local.set $var$3 - (i32.const 1) + (then + (local.set $var$3 + (i32.const 1) + ) ) ) (i32.store diff --git a/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast b/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast index e8d423058ac..5c11e34e364 100644 --- a/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast +++ b/test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast @@ -143,7 +143,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -180,7 +180,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -197,28 +197,32 @@ (local.get $x) (local.get $y) ) - (block - (local.set $i - (i64.eq - (local.get $a) - (local.get $x) + (then + (block + (local.set $i + (i64.eq + (local.get $a) + (local.get $x) + ) ) - ) - (local.set $j - (i64.ne - (local.get $a) - (local.get $y) + (local.set $j + (i64.ne + (local.get $a) + (local.get $y) + ) ) - ) - (local.set $r - (i32.and - (local.get $i) - (local.get $j) + (local.set $r + (i32.and + (local.get $i) + (local.get $j) + ) ) + (return (local.get $r)) ) - (return (local.get $r)) ) - (unreachable) + (else + (unreachable) + ) ) ) ;; Figure 3, simplified to an if @@ -244,7 +248,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -254,7 +258,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -289,16 +293,20 @@ (local.get $x) (i32.const 1) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (else + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -445,7 +453,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -460,10 +468,12 @@ (func $various-conditions-1 (param $x i32) (if (local.get $x) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) ) @@ -482,7 +492,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -500,10 +510,12 @@ (local.get $x) (i32.const 0) ) - (local.set $x - (i32.sub - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.sub + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -519,7 +531,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -534,10 +546,12 @@ (func $various-conditions-3 (param $x i32) (if (i32.reinterpret_f32 (f32.const 0)) - (local.set $x - (i32.sub - (local.get $x) - (i32.const 4) + (then + (local.set $x + (i32.sub + (local.get $x) + (i32.const 4) + ) ) ) ) @@ -549,7 +563,7 @@ ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -566,10 +580,12 @@ (func $various-conditions-4 (param $x i32) (if (unreachable) - (local.set $x - (i32.add - (local.get $x) - (i32.const 3) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 3) + ) ) ) ) @@ -593,7 +609,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.ctz @@ -633,18 +649,20 @@ (i32.eqz (local.get $x) ) - (local.set $x - (i32.add - (i32.ctz - (local.get $y) - ) - (i32.sub - (i32.clz - (local.get $x) - ) - (i32.popcnt + (then + (local.set $x + (i32.add + (i32.ctz (local.get $y) ) + (i32.sub + (i32.clz + (local.get $x) + ) + (i32.popcnt + (local.get $y) + ) + ) ) ) ) @@ -670,7 +688,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -690,10 +708,12 @@ (i32.const 1) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -718,7 +738,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -738,10 +758,12 @@ (i32.const 1) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -768,7 +790,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -778,7 +800,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $x @@ -813,16 +835,20 @@ (local.get $x) (i32.const 1) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 1) + (then + (local.set $x + (i32.add + (local.get $x) + (i32.const 1) + ) ) ) - (local.set $x - (i32.add - (local.get $x) - (i32.const 2) + (else + (local.set $x + (i32.add + (local.get $x) + (i32.const 2) + ) ) ) ) @@ -886,7 +912,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load @@ -894,18 +920,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -918,13 +950,21 @@ (if (result i32) (if (result i32) (i32.const 1) - (i32.load + (then + (i32.load + (i32.const 0) + ) + ) + (else (i32.const 0) ) + ) + (then (i32.const 0) ) - (i32.const 0) - (i32.const 1) + (else + (i32.const 1) + ) ) ) ;; CHECK: (func $bad-phi-value-2 (param $x i32) (result i32) @@ -938,7 +978,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load @@ -946,18 +986,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -973,13 +1019,21 @@ (if (if (result i32) (i32.const 1) - (i32.load + (then + (i32.load + (i32.const 0) + ) + ) + (else (i32.const 0) ) - (i32.const 0) ) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 2)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 2)) + ) ) (local.get $x) ) @@ -1191,8 +1245,10 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -1207,8 +1263,10 @@ (local $x f64) (if (i32.const 0) - (local.set $x - (f64.const 1) + (then + (local.set $x + (f64.const 1) + ) ) ) (local.get $x) @@ -1221,11 +1279,15 @@ ;; CHECK-NEXT: (block $label$1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -1240,8 +1302,12 @@ (block $label$1 (result f64) (if (result f64) (i32.const 0) - (f64.const 0) - (f64.const 1) + (then + (f64.const 0) + ) + (else + (f64.const 1) + ) ) ) ) @@ -1271,7 +1337,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -1282,7 +1348,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -1310,16 +1376,20 @@ (local.get $x) (local.get $y) ) - (local.set $i - (i32.eq - (local.get $x) - (local.get $y) + (then + (local.set $i + (i32.eq + (local.get $x) + (local.get $y) + ) ) ) - (local.set $i - (i32.add - (local.get $x) - (local.get $y) + (else + (local.set $i + (i32.add + (local.get $x) + (local.get $y) + ) ) ) ) @@ -1389,7 +1459,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1402,8 +1472,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1421,14 +1493,18 @@ (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32) (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (return (local.get $x)) ) - (return (local.get $x)) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1446,7 +1522,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1456,8 +1532,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1475,14 +1553,18 @@ (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32) (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (unreachable) ) - (unreachable) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1502,7 +1584,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1512,8 +1594,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1538,14 +1622,18 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (br $out) ) - (br $out) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1569,7 +1657,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -1581,8 +1669,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1607,14 +1697,18 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) + (then + (block + (local.set $x + (i32.const 1) + ) + (br_table $out $out $out (i32.const 1)) ) - (br_table $out $out $out (i32.const 1)) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; no phi here! @@ -1639,7 +1733,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -1648,8 +1742,10 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1674,16 +1770,20 @@ (block $out (if (local.get $x) - (block - (local.set $x - (i32.const 1) - ) - (br_if $out - (local.get $x) + (then + (block + (local.set $x + (i32.const 1) + ) + (br_if $out + (local.get $x) + ) ) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) ;; there *IS* a phi here since it was a br_if @@ -1707,12 +1807,12 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) @@ -1722,7 +1822,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.const -8531) @@ -1771,19 +1871,25 @@ (block $label$3 (if (local.get $2) - (if - (local.get $0) - (block - (local.set $1 - (i32.const -8531) + (then + (if + (local.get $0) + (then + (block + (local.set $1 + (i32.const -8531) + ) + (br $label$3) + ) ) - (br $label$3) - ) - (block - (local.set $1 - (i32.const -8531) + (else + (block + (local.set $1 + (i32.const -8531) + ) + (br $label$1) + ) ) - (br $label$1) ) ) ) @@ -1817,11 +1923,15 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1838,11 +1948,15 @@ (unreachable) (if (local.get $x) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) (return @@ -2283,7 +2397,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i64.eqz @@ -2292,7 +2406,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2303,7 +2417,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2316,7 +2430,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (i64.eqz @@ -2325,7 +2439,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2336,7 +2450,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -2368,37 +2482,49 @@ (local.get $x) (local.get $y) ) - (if - (i64.eqz - (local.get $x) - ) - (local.set $t - (i64.add + (then + (if + (i64.eqz (local.get $x) - (local.get $y) ) - ) - (local.set $t - (i64.sub - (local.get $x) - (local.get $y) + (then + (local.set $t + (i64.add + (local.get $x) + (local.get $y) + ) + ) + ) + (else + (local.set $t + (i64.sub + (local.get $x) + (local.get $y) + ) + ) ) ) ) - (if - (i64.eqz - (local.get $y) - ) - (local.set $t - (i64.mul - (local.get $x) + (else + (if + (i64.eqz (local.get $y) ) - ) - (local.set $t - (i64.div_s - (local.get $x) - (local.get $y) + (then + (local.set $t + (i64.mul + (local.get $x) + (local.get $y) + ) + ) + ) + (else + (local.set $t + (i64.div_s + (local.get $x) + (local.get $y) + ) + ) ) ) ) @@ -3444,14 +3570,14 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$2) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (loop $label$2 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $label$3 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3464,7 +3590,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3491,23 +3617,29 @@ (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32) (if (local.get $var$2) - (drop - (loop $label$2 (result f64) - (if - (block $label$3 (result i32) - (if + (then + (drop + (loop $label$2 (result f64) + (if + (block $label$3 (result i32) + (if + (i32.const 0) + (then + (unreachable) + ) + ) + (nop) (i32.const 0) + ) + (then (unreachable) ) - (nop) - (i32.const 0) ) - (unreachable) - ) - (br_if $label$2 - (local.get $var$2) + (br_if $label$2 + (local.get $var$2) + ) + (f64.const 0) ) - (f64.const 0) ) ) ) @@ -3534,7 +3666,7 @@ ;; CHECK-NEXT: (block $label$4 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1337) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -3600,7 +3732,9 @@ (block $label$4 (result i32) (if (i32.const 1337) - (unreachable) + (then + (unreachable) + ) ) (local.get $var$0) ) @@ -3662,11 +3796,11 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block ;; CHECK-NEXT: (loop $label$3 @@ -3692,7 +3826,9 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) @@ -3726,22 +3862,28 @@ (i32.const 0) ) ) - (unreachable) - (block (result f32) - (if - (loop $label$3 (result i32) - (block $label$4 (result i32) - (i32.clz - (br_if $label$4 - (local.get $var$0) - (i32.const 1) + (then + (unreachable) + ) + (else + (block (result f32) + (if + (loop $label$3 (result i32) + (block $label$4 (result i32) + (i32.clz + (br_if $label$4 + (local.get $var$0) + (i32.const 1) + ) ) ) ) + (then + (nop) + ) ) - (nop) + (f32.const 1) ) - (f32.const 1) ) ) ) @@ -3920,54 +4062,56 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$0) - ;; CHECK-NEXT: (block $label$2 - ;; CHECK-NEXT: (block $label$3 - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $var$1 - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$2 + ;; CHECK-NEXT: (block $label$3 + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $var$1 + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $label$3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$3 - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (br_if $label$2 + ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$2 - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $13 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $var$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $13) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -3982,33 +4126,37 @@ (i32.const -7) ) ) - (block $label$2 - (block $label$3 - (local.set $var$1 - (local.get $var$0) - ) - (br_if $label$3 - (local.tee $var$3 - (i32.const 12) + (then + (block $label$2 + (block $label$3 + (local.set $var$1 + (local.get $var$0) ) + (br_if $label$3 + (local.tee $var$3 + (i32.const 12) + ) + ) + (unreachable) ) - (unreachable) - ) - (br_if $label$2 - (i32.eqz - (local.get $var$1) + (br_if $label$2 + (i32.eqz + (local.get $var$1) + ) ) - ) - (if - (i32.ne - (i32.load - (i32.const 0) + (if + (i32.ne + (i32.load + (i32.const 0) + ) + (local.get $var$0) + ) + (then + (unreachable) ) - (local.get $var$0) ) (unreachable) ) - (unreachable) ) ) ) @@ -4232,7 +4380,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4257,7 +4405,9 @@ ) ) ) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32) @@ -4315,7 +4465,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4347,7 +4497,9 @@ (local.get $temp) ) ) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $flipped-needs-right-origin (param $var$0 i32) (result i32) @@ -4388,7 +4540,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -4423,7 +4575,9 @@ (i32.const 4) ) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 5) ) @@ -4495,7 +4649,7 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $var$2 @@ -4525,14 +4679,16 @@ (loop $label$1 (if (i32.const 0) - (block - (local.set $var$2 - (i32.add - (i32.const 0) - (i32.const 1) + (then + (block + (local.set $var$2 + (i32.add + (i32.const 0) + (i32.const 1) + ) ) + (br $label$1) ) - (br $label$1) ) ) (local.set $var$3 @@ -4565,36 +4721,42 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (loop $label$2 - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $label$2 + ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $var$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $var$3 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (local.set $var$1 - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.set $var$3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.set $var$1 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $var$3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $label$2 ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $var$3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$2 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $var$1) - ;; CHECK-NEXT: (local.set $var$3 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $var$3 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4633,28 +4795,34 @@ ) (if (i32.const 0) - (loop $label$2 - (if - (local.get $var$1) - (nop) - ) - (local.set $var$1 - (i32.sub - (i32.const 0) - (local.tee $var$3 - (i32.const 1) + (then + (loop $label$2 + (if + (local.get $var$1) + (then + (nop) ) ) - ) - (br_if $label$2 - (i32.const 0) + (local.set $var$1 + (i32.sub + (i32.const 0) + (local.tee $var$3 + (i32.const 1) + ) + ) + ) + (br_if $label$2 + (i32.const 0) + ) ) ) ) (if (local.get $var$1) - (local.set $var$3 - (i32.const 1) + (then + (local.set $var$3 + (i32.const 1) + ) ) ) (i32.store diff --git a/test/lit/passes/global-effects.wast b/test/lit/passes/global-effects.wast index 06660467948..00c9a77ff71 100644 --- a/test/lit/passes/global-effects.wast +++ b/test/lit/passes/global-effects.wast @@ -330,8 +330,12 @@ ;; WITHOUT-NEXT: (do ;; WITHOUT-NEXT: (if ;; WITHOUT-NEXT: (local.get $x) - ;; WITHOUT-NEXT: (call $throw) - ;; WITHOUT-NEXT: (call $unreachable) + ;; WITHOUT-NEXT: (then + ;; WITHOUT-NEXT: (call $throw) + ;; WITHOUT-NEXT: ) + ;; WITHOUT-NEXT: (else + ;; WITHOUT-NEXT: (call $unreachable) + ;; WITHOUT-NEXT: ) ;; WITHOUT-NEXT: ) ;; WITHOUT-NEXT: ) ;; WITHOUT-NEXT: (catch_all @@ -344,8 +348,12 @@ ;; INCLUDE-NEXT: (do ;; INCLUDE-NEXT: (if ;; INCLUDE-NEXT: (local.get $x) - ;; INCLUDE-NEXT: (call $throw) - ;; INCLUDE-NEXT: (call $unreachable) + ;; INCLUDE-NEXT: (then + ;; INCLUDE-NEXT: (call $throw) + ;; INCLUDE-NEXT: ) + ;; INCLUDE-NEXT: (else + ;; INCLUDE-NEXT: (call $unreachable) + ;; INCLUDE-NEXT: ) ;; INCLUDE-NEXT: ) ;; INCLUDE-NEXT: ) ;; INCLUDE-NEXT: (catch_all @@ -358,8 +366,12 @@ ;; DISCARD-NEXT: (do ;; DISCARD-NEXT: (if ;; DISCARD-NEXT: (local.get $x) - ;; DISCARD-NEXT: (call $throw) - ;; DISCARD-NEXT: (call $unreachable) + ;; DISCARD-NEXT: (then + ;; DISCARD-NEXT: (call $throw) + ;; DISCARD-NEXT: ) + ;; DISCARD-NEXT: (else + ;; DISCARD-NEXT: (call $unreachable) + ;; DISCARD-NEXT: ) ;; DISCARD-NEXT: ) ;; DISCARD-NEXT: ) ;; DISCARD-NEXT: (catch_all @@ -374,8 +386,12 @@ (do (if (local.get $x) - (call $throw) - (call $unreachable) + (then + (call $throw) + ) + (else + (call $unreachable) + ) ) ) (catch_all) @@ -407,8 +423,12 @@ (func $throw-and-import (if (i32.const 1) - (throw $tag) - (call $import) + (then + (throw $tag) + ) + (else + (call $import) + ) ) ) diff --git a/test/lit/passes/gufa-refs.wast b/test/lit/passes/gufa-refs.wast index 6aa741eb1b7..6d997dfa547 100644 --- a/test/lit/passes/gufa-refs.wast +++ b/test/lit/passes/gufa-refs.wast @@ -1396,11 +1396,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $parent - ;; CHECK-NEXT: (local.tee $child - ;; CHECK-NEXT: (struct.new $child - ;; CHECK-NEXT: (i32.const 20) - ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $parent + ;; CHECK-NEXT: (local.tee $child + ;; CHECK-NEXT: (struct.new $child + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1432,11 +1434,13 @@ ;; Another, optional, set to $parent. (if (local.get $x) - (local.set $parent - (local.tee $child - (struct.new $child - (i32.const 20) - (i32.const 30) + (then + (local.set $parent + (local.tee $child + (struct.new $child + (i32.const 20) + (i32.const 30) + ) ) ) ) @@ -3308,8 +3312,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $ref-null - ;; CHECK-NEXT: (local.get $ref) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $ref-null + ;; CHECK-NEXT: (local.get $ref) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -3330,8 +3336,10 @@ ) (if (local.get $x) - (local.set $ref-null - (local.get $ref) + (then + (local.set $ref-null + (local.get $ref) + ) ) ) ;; If the |if| executed they are equal, but otherwise not, so we can't diff --git a/test/lit/passes/gufa-ssa.wast b/test/lit/passes/gufa-ssa.wast index c97e30a62b9..355999f6171 100644 --- a/test/lit/passes/gufa-ssa.wast +++ b/test/lit/passes/gufa-ssa.wast @@ -40,8 +40,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 30) - ;; CHECK-NEXT: (local.set $y - ;; CHECK-NEXT: (i32.const 50) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $y + ;; CHECK-NEXT: (i32.const 50) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -89,8 +91,10 @@ ) (if (local.get $x) - (local.set $y - (i32.const 50) + (then + (local.set $y + (i32.const 50) + ) ) ) ;; x is the same but y is no longer optimizable, since it might contain 50. diff --git a/test/lit/passes/gufa-tnh.wast b/test/lit/passes/gufa-tnh.wast index b3d5b122b67..cb363c567ea 100644 --- a/test/lit/passes/gufa-tnh.wast +++ b/test/lit/passes/gufa-tnh.wast @@ -465,7 +465,9 @@ ;; CHECK-NEXT: (local $local (ref null $A)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.cast (ref $B) @@ -478,7 +480,9 @@ ;; Control flow before the cast *does* stop us from optimizing. (if (i32.const 0) - (return) + (then + (return) + ) ) (drop (ref.cast (ref $B) @@ -689,7 +693,9 @@ ;; CHECK-NEXT: (block (result (ref $B)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast (ref $B) ;; CHECK-NEXT: (local.get $any) @@ -717,7 +723,9 @@ (block (result (ref $A)) (if (i32.const 0) - (return) + (then + (return) + ) ) (ref.cast (ref $A) (local.get $any) @@ -788,7 +796,9 @@ ;; CHECK-NEXT: (block (result (ref $A)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast (ref $A) ;; CHECK-NEXT: (local.get $any) @@ -814,7 +824,9 @@ (block (result (ref $A)) (if (i32.const 0) - (return) + (then + (return) + ) ) (ref.cast (ref $A) (local.get $any) @@ -976,9 +988,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result (ref $A)) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (ref.cast (ref $A) - ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.cast (ref $A) + ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (ref.cast (ref $B) @@ -997,9 +1013,13 @@ ;; very last cast. (if (result (ref $A)) (i32.const 0) - (return) - (ref.cast (ref $A) - (local.get $any) + (then + (return) + ) + (else + (ref.cast (ref $A) + (local.get $any) + ) ) ) (ref.cast (ref $A) diff --git a/test/lit/passes/gufa-vs-cfp.wast b/test/lit/passes/gufa-vs-cfp.wast index eb365c5d12e..eb95c6bed03 100644 --- a/test/lit/passes/gufa-vs-cfp.wast +++ b/test/lit/passes/gufa-vs-cfp.wast @@ -381,8 +381,12 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result f32) ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (f32.const 42) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (f32.const 42) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (f32.const 42) @@ -395,8 +399,12 @@ ;; Fall though a 42 via an if. (if (result f32) (call $import) - (unreachable) - (f32.const 42) + (then + (unreachable) + ) + (else + (f32.const 42) + ) ) ) ) diff --git a/test/lit/passes/gufa.wast b/test/lit/passes/gufa.wast index b97e620ab62..fcb60310ad4 100644 --- a/test/lit/passes/gufa.wast +++ b/test/lit/passes/gufa.wast @@ -104,8 +104,10 @@ ;; CHECK: (func $return (type $0) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) @@ -116,8 +118,10 @@ ;; below. (if (i32.const 0) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (i32.const 2) @@ -139,8 +143,10 @@ ;; CHECK: (func $return-same (type $0) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) @@ -152,8 +158,10 @@ ;; but see the caller below. (if (i32.const 0) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (i32.const 1) @@ -180,8 +188,10 @@ ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) @@ -190,8 +200,10 @@ (local $x i32) (if (call $import) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) ) ;; $x has two possible values, 1 and the default 0, so we cannot optimize @@ -203,8 +215,10 @@ ;; CHECK-NEXT: (local $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $import) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) @@ -213,10 +227,12 @@ (local $x i32) (if (call $import) - (local.set $x - ;; As above, but now we set 0 here. We can optimize the local.get to 0 - ;; in this case. - (i32.const 0) + (then + (local.set $x + ;; As above, but now we set 0 here. We can optimize the local.get to 0 + ;; in this case. + (i32.const 0) + ) ) ) (local.get $x) @@ -225,8 +241,10 @@ ;; CHECK: (func $param-no (type $3) (param $param i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $param) - ;; CHECK-NEXT: (local.set $param - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $param + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $param) @@ -234,8 +252,10 @@ (func $param-no (export "param-no") (param $param i32) (result i32) (if (local.get $param) - (local.set $param - (i32.const 1) + (then + (local.set $param + (i32.const 1) + ) ) ) ;; $x has two possible values, the incoming param value and 1, so we cannot @@ -247,8 +267,10 @@ ;; CHECK: (func $param-yes (type $3) (param $param i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (local.set $param - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $param + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) @@ -260,8 +282,10 @@ ;; local.set in the if, so we'll optimize it to 1. (if (local.get $param) - (local.set $param - (i32.const 1) + (then + (local.set $param + (i32.const 1) + ) ) ) (local.get $param) @@ -523,8 +547,10 @@ ;; CHECK-NEXT: (block $named (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $named - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $named + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) @@ -537,8 +563,10 @@ ;; CHECK-NEXT: (block $named0 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $named0 - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $named0 + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) @@ -551,8 +579,10 @@ (block $named (result i32) (if (i32.const 0) - (br $named - (i32.const 1) + (then + (br $named + (i32.const 1) + ) ) ) (i32.const 1) @@ -564,8 +594,10 @@ (block $named (result i32) (if (i32.const 0) - (br $named - (i32.const 2) ;; this changed + (then + (br $named + (i32.const 2) ;; this changed + ) ) ) (i32.const 1) diff --git a/test/lit/passes/heap2local.wast b/test/lit/passes/heap2local.wast index 37a9e791905..286bfdc19b2 100644 --- a/test/lit/passes/heap2local.wast +++ b/test/lit/passes/heap2local.wast @@ -646,8 +646,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block (result f64) @@ -666,8 +668,10 @@ ;; that as a result of this the final local.get has two sets that send it ;; values, but we know they are both the same allocation. (if (local.get $x) - (local.set $ref - (local.get $ref) + (then + (local.set $ref + (local.get $ref) + ) ) ) (struct.get $struct.A 1 @@ -726,8 +730,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $ref - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $ref + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (struct.get $struct.A 1 @@ -740,8 +746,10 @@ (struct.new_default $struct.A) ) (if (local.get $x) - (local.set $ref - (ref.null $struct.A) + (then + (local.set $ref + (ref.null $struct.A) + ) ) ) ;; A get that receives two different allocations, and so we should not try @@ -985,15 +993,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result f64) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result f64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) @@ -1025,20 +1035,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result f64) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result f64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1062,14 +1076,18 @@ ) ) (if (local.get $x) - (drop - (struct.get $struct.A 1 - (local.get $ref) + (then + (drop + (struct.get $struct.A 1 + (local.get $ref) + ) ) ) - (struct.set $struct.A 1 - (local.get $ref) - (f64.const 42) + (else + (struct.set $struct.A 1 + (local.get $ref) + (f64.const 42) + ) ) ) (loop $inner @@ -1087,14 +1105,18 @@ ) ) (if (local.get $x) - (drop - (struct.get $struct.A 0 - (local.get $ref) + (then + (drop + (struct.get $struct.A 0 + (local.get $ref) + ) ) ) - (drop - (struct.get $struct.A 1 - (local.get $ref) + (else + (drop + (struct.get $struct.A 1 + (local.get $ref) + ) ) ) ) diff --git a/test/lit/passes/inlining-optimizing_optimize-level=3.wast b/test/lit/passes/inlining-optimizing_optimize-level=3.wast index a0e320bd640..fdfbf7b35d6 100644 --- a/test/lit/passes/inlining-optimizing_optimize-level=3.wast +++ b/test/lit/passes/inlining-optimizing_optimize-level=3.wast @@ -175,7 +175,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -204,7 +206,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.get $1) ) @@ -245,7 +249,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $__THREW__) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $__THREW__ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -260,12 +264,14 @@ (i32.eqz (global.get $__THREW__) ) - (block - (global.set $__THREW__ - (local.get $0) - ) - (global.set $threwValue - (local.get $1) + (then + (block + (global.set $__THREW__ + (local.get $0) + ) + (global.set $threwValue + (local.get $1) + ) ) ) ) @@ -315,7 +321,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (global.get $STACKTOP) @@ -331,7 +339,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) @@ -356,7 +366,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add @@ -418,8 +430,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.load offset=76 ;; CHECK-NEXT: (local.get $0) @@ -437,11 +451,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const -33) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const -33) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -454,16 +470,18 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $_printf_core - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 672) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $_printf_core + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 672) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $9 @@ -523,7 +541,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $0) @@ -612,7 +630,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (drop (call $_printf @@ -668,7 +688,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (call $_frexp ;; CHECK-NEXT: (f64.mul @@ -685,7 +705,9 @@ ;; CHECK-NEXT: (i32.const -64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -765,24 +787,28 @@ (local.get $0) (f64.const 0) ) - (block (result i32) - (local.set $0 - (call $_frexp - (f64.mul - (local.get $0) - (f64.const 18446744073709551615) + (then + (block (result i32) + (local.set $0 + (call $_frexp + (f64.mul + (local.get $0) + (f64.const 18446744073709551615) + ) + (local.get $1) ) - (local.get $1) ) - ) - (i32.add - (i32.load - (local.get $1) + (i32.add + (i32.load + (local.get $1) + ) + (i32.const -64) ) - (i32.const -64) ) ) - (i32.const 0) + (else + (i32.const 0) + ) ) ) ) @@ -877,14 +903,18 @@ (i32.load8_s (local.get $0) ) - (block + (then + (block + (local.set $0 + (local.get $2) + ) + (br $while-in3) + ) + ) + (else (local.set $0 (local.get $2) ) - (br $while-in3) - ) - (local.set $0 - (local.get $2) ) ) ) @@ -905,10 +935,14 @@ ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load offset=60 - ;; CHECK-NEXT: (call $_pthread_self) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.load offset=60 + ;; CHECK-NEXT: (call $_pthread_self) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 60) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___errno_location (result i32) @@ -916,10 +950,14 @@ (i32.load (i32.const 16) ) - (i32.load offset=60 - (call $_pthread_self) + (then + (i32.load offset=60 + (call $_pthread_self) + ) + ) + (else + (i32.const 60) ) - (i32.const 60) ) ) ;; CHECK: (func $___stdio_close (param $0 i32) (result i32) @@ -939,7 +977,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $2 @@ -979,7 +1019,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (i32.store (local.tee $2 @@ -1020,7 +1062,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $4) @@ -1044,7 +1088,7 @@ ;; CHECK-NEXT: (i32.const 64) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.load offset=60 @@ -1064,9 +1108,11 @@ ;; CHECK-NEXT: (i32.const 54) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=75 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 offset=75 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1101,7 +1147,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.set $3 (local.get $4) @@ -1125,29 +1173,33 @@ (i32.const 64) ) ) - (block - (i32.store - (local.get $3) - (i32.load offset=60 - (local.get $0) + (then + (block + (i32.store + (local.get $3) + (i32.load offset=60 + (local.get $0) + ) ) - ) - (i32.store offset=4 - (local.get $3) - (i32.const 21505) - ) - (i32.store offset=8 - (local.get $3) - (local.get $5) - ) - (if - (call $___syscall54 - (i32.const 54) + (i32.store offset=4 (local.get $3) + (i32.const 21505) ) - (i32.store8 offset=75 - (local.get $0) - (i32.const -1) + (i32.store offset=8 + (local.get $3) + (local.get $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (local.get $3) + ) + (then + (i32.store8 offset=75 + (local.get $0) + (i32.const -1) + ) + ) ) ) ) @@ -1181,7 +1233,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.tee $3 @@ -1223,15 +1277,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1257,7 +1313,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (i32.store (local.tee $3 @@ -1299,15 +1357,19 @@ ) (i32.const 0) ) - (block (result i32) - (i32.store - (local.get $0) + (then + (block (result i32) + (i32.store + (local.get $0) + (i32.const -1) + ) (i32.const -1) ) - (i32.const -1) ) - (i32.load - (local.get $0) + (else + (i32.load + (local.get $0) + ) ) ) ) @@ -1320,29 +1382,33 @@ ;; CHECK-NEXT: (local $1 i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (block $do-once (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (i32.load offset=76 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (block $do-once (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (i32.load offset=76 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $do-once + ;; CHECK-NEXT: (call $___fflush_unlocked + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once + ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (call $___fflush_unlocked ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (call $___fflush_unlocked - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.tee $0 @@ -1350,10 +1416,14 @@ ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_fflush - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_fflush + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $___lock @@ -1365,34 +1435,38 @@ ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.load offset=76 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (i32.load offset=20 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load offset=28 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=76 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (call $___fflush_unlocked + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (i32.load offset=20 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.load offset=28 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (call $___fflush_unlocked + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load offset=56 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (br_if $while-in + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load offset=56 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1411,121 +1485,145 @@ (block $do-once (if (local.get $0) - (block - (if - (i32.le_s - (i32.load offset=76 - (local.get $0) + (then + (block + (if + (i32.le_s + (i32.load offset=76 + (local.get $0) + ) + (i32.const -1) + ) + (then + (block + (local.set $0 + (call $___fflush_unlocked + (local.get $0) + ) + ) + (br $do-once) + ) ) - (i32.const -1) ) - (block - (local.set $0 - (call $___fflush_unlocked + (local.set $2 + (i32.eqz + (call $___lockfile (local.get $0) ) ) - (br $do-once) ) - ) - (local.set $2 - (i32.eqz - (call $___lockfile + (local.set $1 + (call $___fflush_unlocked (local.get $0) ) ) - ) - (local.set $1 - (call $___fflush_unlocked - (local.get $0) - ) - ) - (local.set $0 - (if (result i32) - (local.get $2) - (local.get $1) - (block (result i32) - (call $___unlockfile - (local.get $0) + (local.set $0 + (if (result i32) + (local.get $2) + (then + (local.get $1) + ) + (else + (block (result i32) + (call $___unlockfile + (local.get $0) + ) + (local.get $1) + ) ) - (local.get $1) ) ) ) ) - (block - (local.set $0 - (if (result i32) - (i32.load - (i32.const 12) - ) - (call $_fflush + (else + (block + (local.set $0 + (if (result i32) (i32.load (i32.const 12) ) - ) - (i32.const 0) - ) - ) - (call $___lock - (i32.const 44) - ) - (if - (local.tee $1 - (i32.load - (i32.const 40) - ) - ) - (loop $while-in - (local.set $2 - (if (result i32) - (i32.gt_s - (i32.load offset=76 - (local.get $1) + (then + (call $_fflush + (i32.load + (i32.const 12) ) - (i32.const -1) - ) - (call $___lockfile - (local.get $1) ) + ) + (else (i32.const 0) ) ) - (if - (i32.gt_u - (i32.load offset=20 - (local.get $1) + ) + (call $___lock + (i32.const 44) + ) + (if + (local.tee $1 + (i32.load + (i32.const 40) + ) + ) + (then + (loop $while-in + (local.set $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (local.get $1) + ) + (i32.const -1) + ) + (then + (call $___lockfile + (local.get $1) + ) + ) + (else + (i32.const 0) + ) + ) ) - (i32.load offset=28 - (local.get $1) + (if + (i32.gt_u + (i32.load offset=20 + (local.get $1) + ) + (i32.load offset=28 + (local.get $1) + ) + ) + (then + (local.set $0 + (i32.or + (call $___fflush_unlocked + (local.get $1) + ) + (local.get $0) + ) + ) + ) ) - ) - (local.set $0 - (i32.or - (call $___fflush_unlocked - (local.get $1) + (if + (local.get $2) + (then + (call $___unlockfile + (local.get $1) + ) ) - (local.get $0) ) - ) - ) - (if - (local.get $2) - (call $___unlockfile - (local.get $1) - ) - ) - (br_if $while-in - (local.tee $1 - (i32.load offset=56 - (local.get $1) + (br_if $while-in + (local.tee $1 + (i32.load offset=56 + (local.get $1) + ) + ) ) ) ) ) - ) - (call $___unlock - (i32.const 44) + (call $___unlock + (i32.const 44) + ) ) ) ) @@ -1549,7 +1647,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (i32.store (local.tee $3 @@ -1604,7 +1704,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.add @@ -1689,7 +1791,7 @@ ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $_pthread_cleanup_push ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: (local.get $0) @@ -1720,7 +1822,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.load @@ -1767,7 +1869,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.tee $7 @@ -1802,13 +1904,13 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add @@ -1825,8 +1927,10 @@ ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $3) @@ -1908,11 +2012,15 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1950,7 +2058,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.set $9 (i32.add @@ -2035,57 +2145,61 @@ (i32.load (i32.const 16) ) - (block - (call $_pthread_cleanup_push - (i32.const 5) - (local.get $0) - ) - (i32.store - (local.get $10) - (i32.load - (local.get $13) + (then + (block + (call $_pthread_cleanup_push + (i32.const 5) + (local.get $0) ) - ) - (i32.store offset=4 - (local.get $10) - (local.get $1) - ) - (i32.store offset=8 - (local.get $10) - (local.get $4) - ) - (local.set $3 - (call $___syscall_ret - (call $___syscall146 - (i32.const 146) - (local.get $10) + (i32.store + (local.get $10) + (i32.load + (local.get $13) ) ) - ) - (call $_pthread_cleanup_pop - (i32.const 0) + (i32.store offset=4 + (local.get $10) + (local.get $1) + ) + (i32.store offset=8 + (local.get $10) + (local.get $4) + ) + (local.set $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (local.get $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) ) ) - (block - (i32.store - (local.get $9) - (i32.load - (local.get $13) + (else + (block + (i32.store + (local.get $9) + (i32.load + (local.get $13) + ) ) - ) - (i32.store offset=4 - (local.get $9) - (local.get $1) - ) - (i32.store offset=8 - (local.get $9) - (local.get $4) - ) - (local.set $3 - (call $___syscall_ret - (call $___syscall146 - (i32.const 146) - (local.get $9) + (i32.store offset=4 + (local.get $9) + (local.get $1) + ) + (i32.store offset=8 + (local.get $9) + (local.get $4) + ) + (local.set $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (local.get $9) + ) ) ) ) @@ -2113,79 +2227,87 @@ ) ) ) - (block (result i32) - (i32.store - (local.get $6) - (local.tee $7 - (i32.load - (local.get $14) + (then + (block (result i32) + (i32.store + (local.get $6) + (local.tee $7 + (i32.load + (local.get $14) + ) ) ) - ) - (i32.store - (local.get $11) - (local.get $7) - ) - (local.set $7 - (i32.load offset=12 - (local.get $1) - ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 8) - ) - ) - (local.set $4 - (i32.add - (local.get $4) - (i32.const -1) - ) - ) - (i32.sub - (local.get $3) - (local.get $5) - ) - ) - (block (result i32) - (if - (i32.eq - (local.get $4) - (i32.const 2) + (i32.store + (local.get $11) + (local.get $7) ) - (block - (i32.store - (local.get $6) - (i32.add - (i32.load - (local.get $6) - ) - (local.get $3) - ) + (local.set $7 + (i32.load offset=12 + (local.get $1) ) - (local.set $7 - (local.get $5) + ) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 8) ) - (local.set $4 - (i32.const 2) + ) + (local.set $4 + (i32.add + (local.get $4) + (i32.const -1) ) ) - (local.set $7 + (i32.sub + (local.get $3) (local.get $5) ) ) - (local.get $3) - ) - ) - ) - (i32.store - (local.get $1) - (i32.add - (i32.load - (local.get $1) ) - (local.get $5) + (else + (block (result i32) + (if + (i32.eq + (local.get $4) + (i32.const 2) + ) + (then + (block + (i32.store + (local.get $6) + (i32.add + (i32.load + (local.get $6) + ) + (local.get $3) + ) + ) + (local.set $7 + (local.get $5) + ) + (local.set $4 + (i32.const 2) + ) + ) + ) + (else + (local.set $7 + (local.get $5) + ) + ) + ) + (local.get $3) + ) + ) + ) + ) + (i32.store + (local.get $1) + (i32.add + (i32.load + (local.get $1) + ) + (local.get $5) ) ) (i32.store offset=4 @@ -2254,11 +2376,15 @@ (local.get $4) (i32.const 2) ) - (i32.const 0) - (i32.sub - (local.get $2) - (i32.load offset=4 - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.sub + (local.get $2) + (i32.load offset=4 + (local.get $1) + ) ) ) ) @@ -2296,7 +2422,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.set $5 (i32.add @@ -2361,217 +2489,235 @@ ) (i32.const 0) ) - (i32.const -1) - (block (result i32) - (local.set $14 - (if (result i32) - (i32.gt_s - (i32.load offset=76 - (local.get $0) + (then + (i32.const -1) + ) + (else + (block (result i32) + (local.set $14 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (local.get $0) + ) + (i32.const -1) ) - (i32.const -1) - ) - (call $___lockfile - (local.get $0) - ) - (i32.const 0) - ) - ) - (local.set $10 - (i32.load - (local.get $0) - ) - ) - (if - (i32.lt_s - (i32.load8_s offset=74 - (local.get $0) - ) - (i32.const 1) - ) - (i32.store - (local.get $0) - (i32.and - (local.get $10) - (i32.const -33) - ) - ) - ) - (if - (i32.load - (local.tee $11 - (i32.add - (local.get $0) - (i32.const 48) + (then + (call $___lockfile + (local.get $0) + ) + ) + (else + (i32.const 0) ) ) ) - (local.set $1 - (call $_printf_core + (local.set $10 + (i32.load (local.get $0) - (local.get $1) - (local.get $5) - (local.get $7) - (local.get $8) ) ) - (block - (local.set $13 - (i32.load - (local.tee $12 - (i32.add - (local.get $0) - (i32.const 44) - ) - ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (local.get $0) ) + (i32.const 1) ) - (i32.store - (local.get $12) - (local.get $6) - ) - (i32.store - (local.tee $9 - (i32.add - (local.get $0) - (i32.const 28) + (then + (i32.store + (local.get $0) + (i32.and + (local.get $10) + (i32.const -33) ) ) - (local.get $6) ) - (i32.store - (local.tee $3 + ) + (if + (i32.load + (local.tee $11 (i32.add (local.get $0) - (i32.const 20) + (i32.const 48) ) ) - (local.get $6) ) - (i32.store - (local.get $11) - (i32.const 80) - ) - (i32.store - (local.tee $2 - (i32.add + (then + (local.set $1 + (call $_printf_core (local.get $0) - (i32.const 16) + (local.get $1) + (local.get $5) + (local.get $7) + (local.get $8) ) ) - (i32.add - (local.get $6) - (i32.const 80) - ) - ) - (local.set $1 - (call $_printf_core - (local.get $0) - (local.get $1) - (local.get $5) - (local.get $7) - (local.get $8) - ) ) - (if - (local.get $13) + (else (block - (drop - (call_indirect (type $FUNCSIG$iiii) - (local.get $0) - (i32.const 0) - (i32.const 0) - (i32.add - (i32.and - (i32.load offset=36 - (local.get $0) - ) - (i32.const 7) + (local.set $13 + (i32.load + (local.tee $12 + (i32.add + (local.get $0) + (i32.const 44) ) - (i32.const 2) - ) - ) - ) - (local.set $1 - (select - (local.get $1) - (i32.const -1) - (i32.load - (local.get $3) ) ) ) (i32.store (local.get $12) - (local.get $13) + (local.get $6) ) (i32.store - (local.get $11) - (i32.const 0) + (local.tee $9 + (i32.add + (local.get $0) + (i32.const 28) + ) + ) + (local.get $6) ) (i32.store - (local.get $2) - (i32.const 0) + (local.tee $3 + (i32.add + (local.get $0) + (i32.const 20) + ) + ) + (local.get $6) ) (i32.store - (local.get $9) - (i32.const 0) + (local.get $11) + (i32.const 80) ) (i32.store - (local.get $3) - (i32.const 0) + (local.tee $2 + (i32.add + (local.get $0) + (i32.const 16) + ) + ) + (i32.add + (local.get $6) + (i32.const 80) + ) ) - ) - ) - ) - ) - (i32.store - (local.get $0) - (i32.or - (local.tee $2 - (i32.load - (local.get $0) - ) - ) - (i32.and - (local.get $10) - (i32.const 32) - ) - ) - ) - (if - (local.get $14) - (call $___unlockfile - (local.get $0) - ) - ) - (select - (i32.const -1) - (local.get $1) - (i32.and - (local.get $2) - (i32.const 32) - ) - ) - ) - ) - ) - (global.set $STACKTOP - (local.get $4) - ) - (local.get $0) - ) - ;; CHECK: (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - ;; CHECK-NEXT: (local $3 i32) - ;; CHECK-NEXT: (local $4 i32) - ;; CHECK-NEXT: (local $5 i32) - ;; CHECK-NEXT: (local $6 i32) - ;; CHECK-NEXT: (block $label$break$L5 - ;; CHECK-NEXT: (block $__rjti$0 - ;; CHECK-NEXT: (br_if $__rjti$0 - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $5 + (local.set $1 + (call $_printf_core + (local.get $0) + (local.get $1) + (local.get $5) + (local.get $7) + (local.get $8) + ) + ) + (if + (local.get $13) + (then + (block + (drop + (call_indirect (type $FUNCSIG$iiii) + (local.get $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (local.get $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (local.set $1 + (select + (local.get $1) + (i32.const -1) + (i32.load + (local.get $3) + ) + ) + ) + (i32.store + (local.get $12) + (local.get $13) + ) + (i32.store + (local.get $11) + (i32.const 0) + ) + (i32.store + (local.get $2) + (i32.const 0) + ) + (i32.store + (local.get $9) + (i32.const 0) + ) + (i32.store + (local.get $3) + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (local.get $0) + (i32.or + (local.tee $2 + (i32.load + (local.get $0) + ) + ) + (i32.and + (local.get $10) + (i32.const 32) + ) + ) + ) + (if + (local.get $14) + (then + (call $___unlockfile + (local.get $0) + ) + ) + ) + (select + (i32.const -1) + (local.get $1) + (i32.and + (local.get $2) + (i32.const 32) + ) + ) + ) + ) + ) + ) + (global.set $STACKTOP + (local.get $4) + ) + (local.get $0) + ) + ;; CHECK: (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (block $label$break$L5 + ;; CHECK-NEXT: (block $__rjti$0 + ;; CHECK-NEXT: (br_if $__rjti$0 + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 16) @@ -2611,7 +2757,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.or @@ -2621,7 +2767,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store offset=8 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) @@ -2654,8 +2800,10 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $5) @@ -2684,7 +2832,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) ;; CHECK-NEXT: (local.get $2) @@ -2712,81 +2860,85 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$break$L10 (result i32) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (br_if $label$break$L10 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$break$L10 (result i32) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_if $label$break$L10 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$break$L5 - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load offset=36 - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (br_if $label$break$L5 + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load offset=36 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -2837,16 +2989,20 @@ (call $___towrite (local.get $2) ) - (local.set $3 - (i32.const 0) - ) - (block + (then (local.set $3 - (i32.load - (local.get $4) + (i32.const 0) + ) + ) + (else + (block + (local.set $3 + (i32.load + (local.get $4) + ) ) + (br $__rjti$0) ) - (br $__rjti$0) ) ) (br $label$break$L5) @@ -2868,24 +3024,26 @@ ) (local.get $1) ) - (block - (local.set $3 - (call_indirect (type $FUNCSIG$iiii) - (local.get $2) - (local.get $0) - (local.get $1) - (i32.add - (i32.and - (i32.load offset=36 - (local.get $2) + (then + (block + (local.set $3 + (call_indirect (type $FUNCSIG$iiii) + (local.get $2) + (local.get $0) + (local.get $1) + (i32.add + (i32.and + (i32.load offset=36 + (local.get $2) + ) + (i32.const 7) ) - (i32.const 7) + (i32.const 2) ) - (i32.const 2) ) ) + (br $label$break$L5) ) - (br $label$break$L5) ) ) (local.set $2 @@ -2897,81 +3055,87 @@ ) (i32.const -1) ) - (block (result i32) - (local.set $3 - (local.get $1) - ) - (loop $while-in - (drop - (br_if $label$break$L10 - (i32.const 0) - (i32.eqz - (local.get $3) - ) - ) + (then + (block (result i32) + (local.set $3 + (local.get $1) ) - (if - (i32.ne - (i32.load8_s - (i32.add - (local.get $0) - (local.tee $6 - (i32.add - (local.get $3) - (i32.const -1) + (loop $while-in + (drop + (br_if $label$break$L10 + (i32.const 0) + (i32.eqz + (local.get $3) + ) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (local.get $0) + (local.tee $6 + (i32.add + (local.get $3) + (i32.const -1) + ) ) ) ) + (i32.const 10) ) - (i32.const 10) - ) - (block - (local.set $3 - (local.get $6) + (then + (block + (local.set $3 + (local.get $6) + ) + (br $while-in) + ) ) - (br $while-in) ) ) - ) - (br_if $label$break$L5 - (i32.lt_u - (call_indirect (type $FUNCSIG$iiii) - (local.get $2) - (local.get $0) - (local.get $3) - (i32.add - (i32.and - (i32.load offset=36 - (local.get $2) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect (type $FUNCSIG$iiii) + (local.get $2) + (local.get $0) + (local.get $3) + (i32.add + (i32.and + (i32.load offset=36 + (local.get $2) + ) + (i32.const 7) ) - (i32.const 7) + (i32.const 2) ) - (i32.const 2) ) + (local.get $3) ) - (local.get $3) ) - ) - (local.set $4 - (i32.load - (local.get $5) + (local.set $4 + (i32.load + (local.get $5) + ) ) - ) - (local.set $1 - (i32.sub - (local.get $1) - (local.get $3) + (local.set $1 + (i32.sub + (local.get $1) + (local.get $3) + ) ) - ) - (local.set $0 - (i32.add - (local.get $0) - (local.get $3) + (local.set $0 + (i32.add + (local.get $0) + (local.get $3) + ) ) + (local.get $3) ) - (local.get $3) ) - (i32.const 0) + (else + (i32.const 0) + ) ) ) ) @@ -3033,47 +3197,51 @@ ) (i32.const 8) ) - (block (result i32) - (i32.store - (local.get $0) - (i32.or - (local.get $1) - (i32.const 32) + (then + (block (result i32) + (i32.store + (local.get $0) + (i32.or + (local.get $1) + (i32.const 32) + ) ) + (i32.const -1) ) - (i32.const -1) ) - (block (result i32) - (i32.store offset=8 - (local.get $0) - (i32.const 0) - ) - (i32.store offset=4 - (local.get $0) - (i32.const 0) - ) - (i32.store offset=28 - (local.get $0) - (local.tee $1 - (i32.load offset=44 - (local.get $0) + (else + (block (result i32) + (i32.store offset=8 + (local.get $0) + (i32.const 0) + ) + (i32.store offset=4 + (local.get $0) + (i32.const 0) + ) + (i32.store offset=28 + (local.get $0) + (local.tee $1 + (i32.load offset=44 + (local.get $0) + ) ) ) - ) - (i32.store offset=20 - (local.get $0) - (local.get $1) - ) - (i32.store offset=16 - (local.get $0) - (i32.add + (i32.store offset=20 + (local.get $0) (local.get $1) - (i32.load offset=48 - (local.get $0) + ) + (i32.store offset=16 + (local.get $0) + (i32.add + (local.get $1) + (i32.load offset=48 + (local.get $0) + ) ) ) + (i32.const 0) ) - (i32.const 0) ) ) ) @@ -3082,365 +3250,391 @@ (block $do-once (result i32) (if (result i32) (local.get $0) - (block (result i32) - (if - (i32.lt_u - (local.get $1) - (i32.const 128) - ) - (block - (i32.store8 - (local.get $0) + (then + (block (result i32) + (if + (i32.lt_u (local.get $1) + (i32.const 128) ) - (br $do-once - (i32.const 1) - ) - ) - ) - (if - (i32.lt_u - (local.get $1) - (i32.const 2048) - ) - (block - (i32.store8 - (local.get $0) - (i32.or - (i32.shr_u + (then + (block + (i32.store8 + (local.get $0) (local.get $1) - (i32.const 6) ) - (i32.const 192) - ) - ) - (i32.store8 offset=1 - (local.get $0) - (i32.or - (i32.and - (local.get $1) - (i32.const 63) + (br $do-once + (i32.const 1) ) - (i32.const 128) ) ) - (br $do-once - (i32.const 2) - ) ) - ) - (if - (i32.or + (if (i32.lt_u (local.get $1) - (i32.const 55296) - ) - (i32.eq - (i32.and - (local.get $1) - (i32.const -8192) - ) - (i32.const 57344) + (i32.const 2048) ) - ) - (block - (i32.store8 - (local.get $0) - (i32.or - (i32.shr_u - (local.get $1) - (i32.const 12) + (then + (block + (i32.store8 + (local.get $0) + (i32.or + (i32.shr_u + (local.get $1) + (i32.const 6) + ) + (i32.const 192) + ) ) - (i32.const 224) - ) - ) - (i32.store8 offset=1 - (local.get $0) - (i32.or - (i32.and - (i32.shr_u - (local.get $1) - (i32.const 6) + (i32.store8 offset=1 + (local.get $0) + (i32.or + (i32.and + (local.get $1) + (i32.const 63) + ) + (i32.const 128) ) - (i32.const 63) ) - (i32.const 128) - ) - ) - (i32.store8 offset=2 - (local.get $0) - (i32.or - (i32.and - (local.get $1) - (i32.const 63) + (br $do-once + (i32.const 2) ) - (i32.const 128) ) ) - (br $do-once - (i32.const 3) - ) ) - ) - (if (result i32) - (i32.lt_u - (i32.add - (local.get $1) - (i32.const -65536) - ) - (i32.const 1048576) - ) - (block (result i32) - (i32.store8 - (local.get $0) - (i32.or - (i32.shr_u + (if + (i32.or + (i32.lt_u + (local.get $1) + (i32.const 55296) + ) + (i32.eq + (i32.and (local.get $1) - (i32.const 18) + (i32.const -8192) ) - (i32.const 240) + (i32.const 57344) ) ) - (i32.store8 offset=1 - (local.get $0) - (i32.or - (i32.and - (i32.shr_u - (local.get $1) - (i32.const 12) + (then + (block + (i32.store8 + (local.get $0) + (i32.or + (i32.shr_u + (local.get $1) + (i32.const 12) + ) + (i32.const 224) ) - (i32.const 63) ) - (i32.const 128) - ) - ) - (i32.store8 offset=2 - (local.get $0) - (i32.or - (i32.and - (i32.shr_u - (local.get $1) - (i32.const 6) + (i32.store8 offset=1 + (local.get $0) + (i32.or + (i32.and + (i32.shr_u + (local.get $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (local.get $0) + (i32.or + (i32.and + (local.get $1) + (i32.const 63) + ) + (i32.const 128) ) - (i32.const 63) ) - (i32.const 128) + (br $do-once + (i32.const 3) + ) ) ) - (i32.store8 offset=3 - (local.get $0) - (i32.or - (i32.and - (local.get $1) - (i32.const 63) + ) + (if (result i32) + (i32.lt_u + (i32.add + (local.get $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (then + (block (result i32) + (i32.store8 + (local.get $0) + (i32.or + (i32.shr_u + (local.get $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (local.get $0) + (i32.or + (i32.and + (i32.shr_u + (local.get $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (local.get $0) + (i32.or + (i32.and + (i32.shr_u + (local.get $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (local.get $0) + (i32.or + (i32.and + (local.get $1) + (i32.const 63) + ) + (i32.const 128) + ) ) - (i32.const 128) + (i32.const 4) ) ) - (i32.const 4) - ) - (block (result i32) - (i32.store - (call $___errno_location) - (i32.const 84) + (else + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) ) - (i32.const -1) ) ) ) - (i32.const 1) + (else + (i32.const 1) + ) ) ) ) ;; CHECK: (func $_wctomb (param $0 i32) (param $1 i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block $do-once (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 128) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 2048) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=1 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: (br $do-once + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const -8192) + ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 57344) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 55296) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 224) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: (i32.const -8192) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: (i32.const 57344) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=2 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: (i32.const 55296) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 65536) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1048576) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 18) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 224) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 240) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=1 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=2 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 63) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: (br $do-once + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 offset=3 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: (i32.const 1048576) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (call $___errno_location) - ;; CHECK-NEXT: (i32.const 84) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - (func $_wctomb (param $0 i32) (param $1 i32) (result i32) - (if (result i32) - (local.get $0) - (call $_wcrtomb - (local.get $0) - (local.get $1) - (i32.const 0) - ) - (i32.const 0) - ) - ) - (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 18) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 240) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 63) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 128) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (call $___errno_location) + ;; CHECK-NEXT: (i32.const 84) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $_wctomb (param $0 i32) (param $1 i32) (result i32) + (if (result i32) + (local.get $0) + (then + (call $_wcrtomb + (local.get $0) + (local.get $1) + (i32.const 0) + ) + ) + (else + (i32.const 0) + ) + ) + ) + (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) (local $4 i32) (local $5 i32) (local.set $5 @@ -3467,69 +3661,73 @@ (i32.const 0) ) ) - (block - (local.set $4 - (i32.and - (local.get $1) - (i32.const 255) + (then + (block + (local.set $4 + (i32.and + (local.get $1) + (i32.const 255) + ) ) - ) - (local.set $3 - (local.get $2) - ) - (local.set $2 - (local.get $0) - ) - (loop $while-in - (br_if $__rjti$2 - (i32.eq - (i32.load8_u - (local.get $2) - ) - (i32.and - (local.get $4) - (i32.const 255) + (local.set $3 + (local.get $2) + ) + (local.set $2 + (local.get $0) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (local.get $2) + ) + (i32.and + (local.get $4) + (i32.const 255) + ) ) ) - ) - (br_if $while-in - (i32.and - (local.tee $0 - (i32.ne - (local.tee $3 - (i32.add - (local.get $3) - (i32.const -1) + (br_if $while-in + (i32.and + (local.tee $0 + (i32.ne + (local.tee $3 + (i32.add + (local.get $3) + (i32.const -1) + ) ) + (i32.const 0) ) - (i32.const 0) ) - ) - (i32.ne - (i32.and - (local.tee $2 - (i32.add - (local.get $2) - (i32.const 1) + (i32.ne + (i32.and + (local.tee $2 + (i32.add + (local.get $2) + (i32.const 1) + ) ) + (i32.const 3) ) - (i32.const 3) + (i32.const 0) ) - (i32.const 0) ) ) ) ) ) - (block - (local.set $3 - (local.get $2) - ) - (local.set $2 - (local.get $0) - ) - (local.set $0 - (local.get $4) + (else + (block + (local.set $3 + (local.get $2) + ) + (local.set $2 + (local.get $0) + ) + (local.set $0 + (local.get $4) + ) ) ) ) @@ -3556,109 +3754,115 @@ ) ) ) - (block - (local.set $3 - (i32.mul - (local.get $5) - (i32.const 16843009) + (then + (block + (local.set $3 + (i32.mul + (local.get $5) + (i32.const 16843009) + ) ) - ) - (block $__rjto$0 - (block $__rjti$0 - (br_if $__rjti$0 - (i32.le_u - (local.get $0) - (i32.const 3) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (local.get $0) + (i32.const 3) + ) ) - ) - (loop $while-in3 - (if - (i32.eqz - (i32.and - (i32.xor - (i32.and - (local.tee $4 - (i32.xor - (i32.load - (local.get $2) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (local.tee $4 + (i32.xor + (i32.load + (local.get $2) + ) + (local.get $3) ) - (local.get $3) ) + (i32.const -2139062144) ) (i32.const -2139062144) ) - (i32.const -2139062144) - ) - (i32.add - (local.get $4) - (i32.const -16843009) - ) - ) - ) - (block - (local.set $2 - (i32.add - (local.get $2) - (i32.const 4) + (i32.add + (local.get $4) + (i32.const -16843009) + ) ) ) - (br_if $while-in3 - (i32.gt_u - (local.tee $0 + (then + (block + (local.set $2 (i32.add - (local.get $0) - (i32.const -4) + (local.get $2) + (i32.const 4) ) ) - (i32.const 3) + (br_if $while-in3 + (i32.gt_u + (local.tee $0 + (i32.add + (local.get $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) ) ) - (br $__rjti$0) ) ) + (br $__rjto$0) ) - (br $__rjto$0) - ) - (if - (i32.eqz - (local.get $0) - ) - (block - (local.set $0 - (i32.const 0) - ) - (br $label$break$L8) - ) - ) - ) - (loop $while-in5 - (br_if $label$break$L8 - (i32.eq - (i32.load8_u - (local.get $2) + (if + (i32.eqz + (local.get $0) ) - (i32.and - (local.get $1) - (i32.const 255) + (then + (block + (local.set $0 + (i32.const 0) + ) + (br $label$break$L8) + ) ) ) ) - (local.set $2 - (i32.add - (local.get $2) - (i32.const 1) - ) - ) - (br_if $while-in5 - (local.tee $0 + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (local.get $2) + ) + (i32.and + (local.get $1) + (i32.const 255) + ) + ) + ) + (local.set $2 (i32.add - (local.get $0) - (i32.const -1) + (local.get $2) + (i32.const 1) ) ) - ) - (local.set $0 - (i32.const 0) + (br_if $while-in5 + (local.tee $0 + (i32.add + (local.get $0) + (i32.const -1) + ) + ) + ) + (local.set $0 + (i32.const 0) + ) ) ) ) @@ -3676,7 +3880,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const -4096) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (call $___errno_location) ;; CHECK-NEXT: (i32.sub @@ -3686,7 +3890,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $___syscall_ret (param $0 i32) (result i32) @@ -3695,17 +3901,21 @@ (local.get $0) (i32.const -4096) ) - (block (result i32) - (i32.store - (call $___errno_location) - (i32.sub - (i32.const 0) - (local.get $0) + (then + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (local.get $0) + ) ) + (i32.const -1) ) - (i32.const -1) ) - (local.get $0) + (else + (local.get $0) + ) ) ) ;; CHECK: (func $___fflush_unlocked (param $0 i32) (result i32) @@ -3786,22 +3996,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load offset=40 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call_indirect (type $FUNCSIG$iiii) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load offset=40 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -3908,22 +4120,24 @@ ) ) ) - (drop - (call_indirect (type $FUNCSIG$iiii) - (local.get $0) - (i32.sub - (local.get $4) - (local.get $6) - ) - (i32.const 1) - (i32.add - (i32.and - (i32.load offset=40 - (local.get $0) + (then + (drop + (call_indirect (type $FUNCSIG$iiii) + (local.get $0) + (i32.sub + (local.get $4) + (local.get $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (local.get $0) + ) + (i32.const 7) ) - (i32.const 7) + (i32.const 2) ) - (i32.const 2) ) ) ) @@ -3966,8 +4180,10 @@ (local.get $0) ) ) - (call $___unlockfile - (local.get $0) + (then + (call $___unlockfile + (local.get $0) + ) ) ) ) @@ -3977,21 +4193,33 @@ (local.get $0) (local.get $0) ) - (i32.const -2147483648) - (if (result i32) - (f64.ge - (local.get $0) - (f64.const 2147483648) - ) + (then (i32.const -2147483648) + ) + (else (if (result i32) - (f64.le + (f64.ge (local.get $0) - (f64.const -2147483649) + (f64.const 2147483648) ) - (i32.const -2147483648) - (i32.trunc_f64_s - (local.get $0) + (then + (i32.const -2147483648) + ) + (else + (if (result i32) + (f64.le + (local.get $0) + (f64.const -2147483649) + ) + (then + (i32.const -2147483648) + ) + (else + (i32.trunc_f64_s + (local.get $0) + ) + ) + ) ) ) ) @@ -4000,44 +4228,60 @@ (func $i32s-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) - (if (result i32) - (i32.and - (i32.eq - (local.get $0) - (i32.const -2147483648) + (then + (if (result i32) + (i32.and + (i32.eq + (local.get $0) + (i32.const -2147483648) + ) + (i32.eq + (local.get $1) + (i32.const -1) + ) ) - (i32.eq - (local.get $1) - (i32.const -1) + (then + (i32.const 0) + ) + (else + (i32.div_s + (local.get $0) + (local.get $1) + ) ) ) + ) + (else (i32.const 0) - (i32.div_s - (local.get $0) - (local.get $1) - ) ) - (i32.const 0) ) ) (func $i32u-rem (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) - (i32.rem_u - (local.get $0) - (local.get $1) + (then + (i32.rem_u + (local.get $0) + (local.get $1) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) (func $i32u-div (param $0 i32) (param $1 i32) (result i32) (if (result i32) (local.get $1) - (i32.div_u - (local.get $0) - (local.get $1) + (then + (i32.div_u + (local.get $0) + (local.get $1) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) ;; CHECK: (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) @@ -4096,7 +4340,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $21 ;; CHECK-NEXT: (i32.add @@ -4222,25 +4468,29 @@ ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 2147483647) - ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 2147483647) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (call $___errno_location) - ;; CHECK-NEXT: (i32.const 75) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (call $___errno_location) + ;; CHECK-NEXT: (i32.const 75) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (local.get $17) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4333,20 +4583,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $29) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4356,7 +4610,7 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) @@ -4386,7 +4640,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.tee $10 @@ -4421,7 +4675,7 @@ ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) @@ -4445,77 +4699,81 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$break$L25 (result i32) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in4 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$break$L25 (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in4 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 75913) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L25 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.extend8_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 75913) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L25 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.extend8_s - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in4 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (br_if $while-in4 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -32) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 @@ -4527,242 +4785,248 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once5 (result i32) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (block $__rjto$0 (result i32) - ;; CHECK-NEXT: (block $__rjti$0 - ;; CHECK-NEXT: (br_if $__rjti$0 - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.tee $9 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once5 (result i32) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (block $__rjto$0 (result i32) + ;; CHECK-NEXT: (block $__rjti$0 + ;; CHECK-NEXT: (br_if $__rjti$0 + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.tee $9 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $__rjti$0 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (i32.load8_s offset=2 - ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (br_if $__rjti$0 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (i32.load8_s offset=2 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 36) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjto$0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (br $__rjto$0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once5 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once5 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 8192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.extend8_s - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.extend8_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in8 - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (loop $while-in8 + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $16 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4775,201 +5039,207 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 46) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $label$break$L46 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $label$break$L46 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 42) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 42) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L46 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in11 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_if $label$break$L46 + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L46 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in11 - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (br_if $label$break$L46 - ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.load8_s offset=3 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 36) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L46 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.load8_s offset=3 - ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 36) + ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $29) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L46 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $29) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 @@ -4991,7 +5261,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 57) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) @@ -5030,7 +5300,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) @@ -5048,7 +5318,7 @@ ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) @@ -5071,20 +5341,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 19) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $__rjti$2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjti$2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $4) @@ -5125,7 +5399,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -5145,7 +5419,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $29) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) @@ -5426,7 +5700,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) @@ -5462,8 +5736,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -5471,7 +5747,7 @@ ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) @@ -5494,8 +5770,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $5 @@ -5523,7 +5801,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.sub @@ -5566,19 +5844,21 @@ ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4092) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 4093) - ;; CHECK-NEXT: (i32.const 4091) - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 4093) + ;; CHECK-NEXT: (i32.const 4091) + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -5652,7 +5932,7 @@ ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (br_if $while-in2 ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.tee $9 @@ -5695,13 +5975,15 @@ ;; CHECK-NEXT: (i32.load8_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $while-in3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -5756,13 +6038,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $__rjti$6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) @@ -5802,7 +6084,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $28 ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -5813,30 +6095,32 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4108) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 2048) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $28 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 2048) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4111) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $28 - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $28 + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4111) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 4114) - ;; CHECK-NEXT: (i32.const 4109) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $28 + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 4114) + ;; CHECK-NEXT: (i32.const 4109) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -5862,2154 +6146,2316 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2146435072) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once49 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (local.tee $25 - ;; CHECK-NEXT: (f64.mul - ;; CHECK-NEXT: (call $_frexp - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once49 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (local.tee $25 + ;; CHECK-NEXT: (f64.mul + ;; CHECK-NEXT: (call $_frexp + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $21) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.tee $26 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.tee $26 + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 97) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 97) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $30) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $30) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $30) - ;; CHECK-NEXT: (local.tee $18 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (local.tee $18 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (if (result f64) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (if (result f64) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $25) - ;; CHECK-NEXT: (block (result f64) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (f64.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in54 + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (f64.mul - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const 16) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in54 - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (loop $while-in54 + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (f64.mul + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (f64.neg - ;; CHECK-NEXT: (f64.add - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.sub - ;; CHECK-NEXT: (f64.neg - ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: (br_if $while-in54 + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.sub - ;; CHECK-NEXT: (f64.add - ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (f64.neg + ;; CHECK-NEXT: (f64.add + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.sub + ;; CHECK-NEXT: (f64.neg + ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.sub + ;; CHECK-NEXT: (f64.add + ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $28) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $28) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (call $_fmt_u - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (call $_fmt_u + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.lt_s ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $38) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $38) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $38) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $38) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 43) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $15 - ;; CHECK-NEXT: (i32.le_s - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i32.le_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $22) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in56 - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.load8_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in56 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $7 ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.ge + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const 2147483648) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -2147483648) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.le - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const -2147483649) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.const -2147483648) - ;; CHECK-NEXT: (i32.trunc_f64_s - ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (f64.ge + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const 2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (f64.le + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const -2147483649) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.trunc_f64_s + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4075) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4075) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (f64.mul - ;; CHECK-NEXT: (f64.sub - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.convert_i32_s - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (f64.mul + ;; CHECK-NEXT: (f64.sub + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.convert_i32_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (f64.eq - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (f64.eq + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 46) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 46) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in56 - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: (br_if $while-in56 + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $42) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $40) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $42) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $40) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $41) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $41) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 65536) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $22) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 65536) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $24) - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 8192) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once49 - ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once49 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (if (result f64) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block (result f64) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $21) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (if (result f64) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.mul + ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: (f64.const 268435456) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.mul - ;; CHECK-NEXT: (local.get $25) - ;; CHECK-NEXT: (f64.const 268435456) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result f64) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $43) - ;; CHECK-NEXT: (local.get $44) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $43) + ;; CHECK-NEXT: (local.get $44) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in60 - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: (loop $while-in60 + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.ge + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const 2147483648) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -2147483648) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (f64.le - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.const -2147483649) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.const -2147483648) - ;; CHECK-NEXT: (i32.trunc_f64_s - ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (f64.ge + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const 2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (f64.le + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.const -2147483649) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const -2147483648) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.trunc_f64_s + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in60 - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (local.tee $14 - ;; CHECK-NEXT: (f64.mul - ;; CHECK-NEXT: (f64.sub - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (f64.convert_i32_u - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (br_if $while-in60 + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (local.tee $14 + ;; CHECK-NEXT: (f64.mul + ;; CHECK-NEXT: (f64.sub + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (f64.convert_i32_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 1e9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 1e9) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in62 - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 29) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.const 29) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (loop $while-in62 + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 29) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 29) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once63 - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in66 - ;; CHECK-NEXT: (global.set $tempRet0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.tee $20 - ;; CHECK-NEXT: (call $_bitshift64Shl - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once63 + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in66 + ;; CHECK-NEXT: (global.set $tempRet0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.tee $20 + ;; CHECK-NEXT: (call $_bitshift64Shl + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $12 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $12 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (call $___uremdi3 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.tee $20 + ;; CHECK-NEXT: (global.get $tempRet0) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1000000000) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.get $tempRet0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (call $___uremdi3 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (local.tee $20 - ;; CHECK-NEXT: (global.get $tempRet0) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (call $___udivmoddi4 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.const 1000000000) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in66 + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1000000000) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (call $___udivmoddi4 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (i32.const 1000000000) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (br_if $do-once63 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in66 - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.tee $5 ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once63 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in68 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in68) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in68 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in68) + ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $21) - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (br_if $while-in62 + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in62 - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $19 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 6) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (i32.const 25) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 25) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $31 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: (local.set $31 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $26) + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (loop $while-in70 (result i32) - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (loop $while-in70 (result i32) + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once71 - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $34 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.const 1000000000) - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in74 - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once71 + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $34 + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.const 1000000000) ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in74 + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $34) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in74 + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $34) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in74 - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $do-once71 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once71 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $31) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (local.tee $11 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $21) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (local.get $18) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $21) - ;; CHECK-NEXT: (local.tee $11 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in70) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in70) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once75 - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once75 + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once75 - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (br_if $do-once75 + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in78 - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in78 - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (loop $while-in78 + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in78 + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $26) + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $31 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $31 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $34 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: (local.tee $34 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $26) + ;; CHECK-NEXT: (i32.const 103) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 9216) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.rem_s + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (i32.const 9216) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.rem_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in80 + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in80 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in80 + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.tee $18 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (br_if $while-in80 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4092) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.rem_u - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $26 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.tee $18 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4092) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once81 - ;; CHECK-NEXT: (local.set $35 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.div_u - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (if (result f64) - ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $26 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.tee $45 - ;; CHECK-NEXT: (i32.div_s - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once81 + ;; CHECK-NEXT: (local.set $35 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.div_u + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 0.5) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (f64.const 1) - ;; CHECK-NEXT: (f64.const 1.5) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (if (result f64) + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $45) + ;; CHECK-NEXT: (local.tee $45 + ;; CHECK-NEXT: (i32.div_s + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (f64.const 0.5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: (f64.const 1.5) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $26) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $45) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $25 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (f64.const 9007199254740994) - ;; CHECK-NEXT: (f64.const 9007199254740992) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $35) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.set $25 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (f64.const 9007199254740994) + ;; CHECK-NEXT: (f64.const 9007199254740992) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $35) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $28) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.load8_s - ;; CHECK-NEXT: (local.get $30) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $28) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.load8_s + ;; CHECK-NEXT: (local.get $30) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 45) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $25 + ;; CHECK-NEXT: (f64.neg + ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (f64.neg + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 45) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $25 - ;; CHECK-NEXT: (f64.neg - ;; CHECK-NEXT: (local.get $25) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (f64.neg + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $do-once81 + ;; CHECK-NEXT: (f64.eq + ;; CHECK-NEXT: (f64.add + ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: (local.get $14) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once81 - ;; CHECK-NEXT: (f64.eq - ;; CHECK-NEXT: (f64.add - ;; CHECK-NEXT: (local.get $25) - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $25) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 999999999) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in86 ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 999999999) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in86 + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in86 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 999999999) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (i32.shr_s ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (br_if $do-once81 + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in86 - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 999999999) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (loop $while-in88 + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once81 - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (br_if $while-in88 + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.tee $12 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in88 - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in88 - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.tee $12 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $35 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.set $35 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (loop $while-in90 (result i32) - ;; CHECK-NEXT: (block $while-out89 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $26 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out89 + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (loop $while-in90 (result i32) + ;; CHECK-NEXT: (block $while-out89 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $26 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-out89 ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $26 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $26 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in90) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in90) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.tee $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $34) - ;; CHECK-NEXT: (block $do-once91 (result i32) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $31) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $34) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once91 (result i32) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const -5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const -5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $19 - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $19 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (br_if $do-once91 - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (local.tee $18 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_if $do-once91 + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (local.tee $18 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: (block $do-once93 ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $15 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.get $26) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $do-once93 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $15 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once93) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once93) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in96 + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in96 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once93) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.rem_u - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once93) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in96 - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in96 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.rem_u - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 102) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $19) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $28) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.tee $19 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $28) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.tee $31 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.tee $19 + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $15 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.tee $31 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 102) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $24) - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (call $_fmt_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $35) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (call $_fmt_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $35) ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in98 - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in98 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in98 + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in98 - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $24) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 43) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $15 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 43) + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $15 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $24) - ;; CHECK-NEXT: (local.get $15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $30) - ;; CHECK-NEXT: (local.get $28) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $30) + ;; CHECK-NEXT: (local.get $28) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 65536) + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 65536) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $31) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.tee $12 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $31) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.tee $12 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in102 - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (call $_fmt_u - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (loop $while-in102 + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (call $_fmt_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once103 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br_if $do-once103 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $27) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $32) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $32) + ;; CHECK-NEXT: (block $do-once103 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br_if $do-once103 - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $do-once103 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in106 ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $32) ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in106 - ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br_if $do-once103 + ;; CHECK-NEXT: (i32.le_u ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in106 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in106 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $27) - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.le_u + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in102) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in102) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $19) ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (i32.const 4143) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (i32.const 4143) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in110 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (call $_fmt_u - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in110 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (call $_fmt_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: (local.get $22) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $22) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in112 - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in112 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in112 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in112 - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.gt_s ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in110) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $do-once99 + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $26) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in110) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once99 - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $20 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $26) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $18 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in114 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (call $_fmt_u - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (loop $while-in114 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (call $_fmt_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $27) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $32) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $27) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.get $32) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $32) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once115 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $do-once115 ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $do-once115 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.le_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $do-once115 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (i32.const 4143) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br_if $do-once115 + ;; CHECK-NEXT: (i32.le_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once115 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: (i32.le_s - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (loop $while-in118 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $while-in118 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once115 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $27) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $0) @@ -8017,143 +8463,99 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (i32.const 4143) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.gt_s + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (br_if $do-once115 - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $22) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in118 - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (br_if $while-in114 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) + ;; CHECK-NEXT: (local.get $20) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in118 - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.ge_s + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $27) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.gt_s - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in114 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ge_s - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 18) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 18) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 18) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 18) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once99 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (br_if $do-once99 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $24) - ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $24) + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_pad - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 32) - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 8192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $16) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (call $_pad + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: (local.get $16) ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (call $_pad ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 32) @@ -8188,7 +8590,7 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $30) @@ -8233,11 +8635,13 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -8299,7 +8703,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $15) @@ -8368,13 +8772,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.const 4091) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shr_s @@ -8389,7 +8793,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) @@ -8433,7 +8837,7 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) @@ -8477,7 +8881,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) @@ -8501,7 +8905,7 @@ ;; CHECK-NEXT: (i32.load8_u ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $__rjto$06 ;; CHECK-NEXT: (block $__rjti$07 ;; CHECK-NEXT: (br_if $__rjti$07 @@ -8531,7 +8935,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $8) @@ -8559,7 +8963,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $9 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -8705,7 +9109,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $17 ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) @@ -8721,7 +9125,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -8771,11 +9175,13 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $33) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $33) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -8794,7 +9200,9 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -8849,27 +9257,29 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $23) - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (local.get $23) ;; CHECK-NEXT: ) @@ -8911,11 +9321,13 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -8945,11 +9357,13 @@ ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $___fwritex - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $15) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $___fwritex + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -8978,96 +9392,104 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in130 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (call $_pop_arg_336 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in130 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in130 - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_pop_arg_336 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L343) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in132 (result i32) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (br_if $while-in130 + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L343) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in132 - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in132 (result i32) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L343) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (br_if $while-in132 + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -9139,7 +9561,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.set $20 (i32.add @@ -9282,25 +9706,31 @@ (local.get $16) (i32.const -1) ) - (local.set $16 - (if (result i32) - (i32.gt_s - (local.get $10) - (i32.sub - (i32.const 2147483647) - (local.get $16) + (then + (local.set $16 + (if (result i32) + (i32.gt_s + (local.get $10) + (i32.sub + (i32.const 2147483647) + (local.get $16) + ) ) - ) - (block (result i32) - (i32.store - (call $___errno_location) - (i32.const 75) + (then + (block (result i32) + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + ) + (else + (i32.add + (local.get $10) + (local.get $16) + ) ) - (i32.const -1) - ) - (i32.add - (local.get $10) - (local.get $16) ) ) ) @@ -9397,20 +9827,24 @@ ) (if (local.get $29) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) + (then + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) ) - (i32.const 32) ) - ) - (drop - (call $___fwritex - (local.get $5) - (local.get $7) - (local.get $0) + (then + (drop + (call $___fwritex + (local.get $5) + (local.get $7) + (local.get $0) + ) + ) ) ) ) @@ -9420,14 +9854,16 @@ (local.get $10) (local.get $5) ) - (block - (local.set $5 - (local.get $6) - ) - (local.set $10 - (local.get $7) + (then + (block + (local.set $5 + (local.get $6) + ) + (local.set $10 + (local.get $7) + ) + (br $label$continue$L1) ) - (br $label$continue$L1) ) ) (local.set $8 @@ -9450,49 +9886,53 @@ ) (i32.const 10) ) - (block (result i32) - (local.set $6 - (i32.load8_s - (local.tee $10 - (select - (i32.add - (local.get $6) - (i32.const 3) - ) - (local.get $10) - (local.tee $11 - (i32.eq - (i32.load8_s offset=2 - (local.get $6) + (then + (block (result i32) + (local.set $6 + (i32.load8_s + (local.tee $10 + (select + (i32.add + (local.get $6) + (i32.const 3) + ) + (local.get $10) + (local.tee $11 + (i32.eq + (i32.load8_s offset=2 + (local.get $6) + ) + (i32.const 36) ) - (i32.const 36) ) ) ) ) ) - ) - (local.set $17 + (local.set $17 + (select + (local.get $8) + (i32.const -1) + (local.get $11) + ) + ) (select - (local.get $8) - (i32.const -1) + (i32.const 1) + (local.get $1) (local.get $11) ) ) - (select - (i32.const 1) - (local.get $1) - (local.get $11) - ) ) - (block (result i32) - (local.set $6 - (local.get $11) - ) - (local.set $17 - (i32.const -1) + (else + (block (result i32) + (local.set $6 + (local.get $11) + ) + (local.set $17 + (i32.const -1) + ) + (local.get $1) ) - (local.get $1) ) ) ) @@ -9513,88 +9953,94 @@ ) (i32.const 32) ) - (block - (local.set $1 - (local.get $6) - ) - (local.set $6 - (local.get $11) - ) - (local.set $11 - (i32.const 0) - ) - (loop $while-in4 - (if - (i32.eqz - (i32.and - (i32.shl - (i32.const 1) - (i32.add - (local.get $6) - (i32.const -32) + (then + (block + (local.set $1 + (local.get $6) + ) + (local.set $6 + (local.get $11) + ) + (local.set $11 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (local.get $6) + (i32.const -32) + ) ) + (i32.const 75913) ) - (i32.const 75913) ) - ) - (block - (local.set $6 - (local.get $1) - ) - (local.set $1 - (local.get $11) + (then + (block + (local.set $6 + (local.get $1) + ) + (local.set $1 + (local.get $11) + ) + (br $label$break$L25) + ) ) - (br $label$break$L25) ) - ) - (local.set $11 - (i32.or - (i32.shl - (i32.const 1) - (i32.add - (i32.shr_s - (i32.shl - (local.get $1) + (local.set $11 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (local.get $1) + (i32.const 24) + ) (i32.const 24) ) - (i32.const 24) + (i32.const -32) ) - (i32.const -32) ) + (local.get $11) ) - (local.get $11) ) - ) - (br_if $while-in4 - (i32.eq - (i32.and - (local.tee $6 - (local.tee $1 - (i32.load8_s - (local.tee $10 - (i32.add - (local.get $10) - (i32.const 1) + (br_if $while-in4 + (i32.eq + (i32.and + (local.tee $6 + (local.tee $1 + (i32.load8_s + (local.tee $10 + (i32.add + (local.get $10) + (i32.const 1) + ) ) ) ) ) + (i32.const -32) ) - (i32.const -32) + (i32.const 32) ) - (i32.const 32) ) - ) - (local.set $6 - (local.get $1) - ) - (local.set $1 - (local.get $11) + (local.set $6 + (local.get $1) + ) + (local.set $1 + (local.get $11) + ) ) ) ) - (local.set $1 - (i32.const 0) + (else + (local.set $1 + (i32.const 0) + ) ) ) ) @@ -9607,230 +10053,263 @@ ) (i32.const 42) ) - (block - (local.set $10 - (block $__rjto$0 (result i32) - (block $__rjti$0 - (br_if $__rjti$0 - (i32.ge_u - (local.tee $11 - (i32.add - (i32.load8_s - (local.tee $6 - (i32.add - (local.get $10) - (i32.const 1) + (then + (block + (local.set $10 + (block $__rjto$0 (result i32) + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (local.tee $11 + (i32.add + (i32.load8_s + (local.tee $6 + (i32.add + (local.get $10) + (i32.const 1) + ) ) ) + (i32.const -48) ) - (i32.const -48) ) + (i32.const 10) ) - (i32.const 10) ) - ) - (br_if $__rjti$0 - (i32.ne - (i32.load8_s offset=2 - (local.get $10) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (local.get $10) + ) + (i32.const 36) ) - (i32.const 36) ) - ) - (i32.store - (i32.add - (local.get $4) - (i32.shl - (local.get $11) - (i32.const 2) + (i32.store + (i32.add + (local.get $4) + (i32.shl + (local.get $11) + (i32.const 2) + ) ) + (i32.const 10) ) - (i32.const 10) - ) - (drop - (i32.load offset=4 - (local.tee $6 - (i32.add - (local.get $3) - (i32.shl - (i32.add - (i32.load8_s - (local.get $6) + (drop + (i32.load offset=4 + (local.tee $6 + (i32.add + (local.get $3) + (i32.shl + (i32.add + (i32.load8_s + (local.get $6) + ) + (i32.const -48) ) - (i32.const -48) + (i32.const 3) ) - (i32.const 3) ) ) ) ) - ) - (local.set $8 - (i32.const 1) - ) - (local.set $14 - (i32.load - (local.get $6) + (local.set $8 + (i32.const 1) ) - ) - (br $__rjto$0 - (i32.add - (local.get $10) - (i32.const 3) + (local.set $14 + (i32.load + (local.get $6) + ) ) - ) - ) - (if - (local.get $8) - (block - (local.set $16 - (i32.const -1) + (br $__rjto$0 + (i32.add + (local.get $10) + (i32.const 3) + ) ) - (br $label$break$L1) - ) - ) - (if - (i32.eqz - (local.get $29) ) - (block - (local.set $11 - (local.get $1) - ) - (local.set $10 - (local.get $6) - ) - (local.set $1 - (i32.const 0) - ) - (local.set $14 - (i32.const 0) + (if + (local.get $8) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) + ) ) - (br $do-once5) ) - ) - (local.set $14 - (i32.load - (local.tee $10 - (i32.and - (i32.add - (i32.load - (local.get $2) + (if + (i32.eqz + (local.get $29) + ) + (then + (block + (local.set $11 + (local.get $1) + ) + (local.set $10 + (local.get $6) + ) + (local.set $1 + (i32.const 0) + ) + (local.set $14 + (i32.const 0) + ) + (br $do-once5) + ) + ) + ) + (local.set $14 + (i32.load + (local.tee $10 + (i32.and + (i32.add + (i32.load + (local.get $2) + ) + (i32.const 3) ) - (i32.const 3) + (i32.const -4) ) - (i32.const -4) ) ) ) - ) - (i32.store - (local.get $2) - (i32.add - (local.get $10) - (i32.const 4) + (i32.store + (local.get $2) + (i32.add + (local.get $10) + (i32.const 4) + ) ) + (local.set $8 + (i32.const 0) + ) + (local.get $6) ) - (local.set $8 - (i32.const 0) - ) - (local.get $6) ) - ) - (local.set $11 - (if (result i32) - (i32.lt_s - (local.get $14) - (i32.const 0) - ) - (block (result i32) - (local.set $14 - (i32.sub - (i32.const 0) - (local.get $14) + (local.set $11 + (if (result i32) + (i32.lt_s + (local.get $14) + (i32.const 0) + ) + (then + (block (result i32) + (local.set $14 + (i32.sub + (i32.const 0) + (local.get $14) + ) + ) + (i32.or + (local.get $1) + (i32.const 8192) + ) ) ) - (i32.or + (else (local.get $1) - (i32.const 8192) ) ) - (local.get $1) ) - ) - (local.set $1 - (local.get $8) + (local.set $1 + (local.get $8) + ) ) ) - (if - (i32.lt_u - (local.tee $6 - (i32.add - (i32.shr_s - (i32.shl - (local.get $6) + (else + (if + (i32.lt_u + (local.tee $6 + (i32.add + (i32.shr_s + (i32.shl + (local.get $6) + (i32.const 24) + ) (i32.const 24) ) - (i32.const 24) + (i32.const -48) ) - (i32.const -48) ) + (i32.const 10) ) - (i32.const 10) - ) - (block - (local.set $11 - (i32.const 0) - ) - (loop $while-in8 - (local.set $6 - (i32.add - (i32.mul - (local.get $11) - (i32.const 10) - ) - (local.get $6) + (then + (block + (local.set $11 + (i32.const 0) ) - ) - (if - (i32.lt_u - (local.tee $9 + (loop $while-in8 + (local.set $6 (i32.add - (i32.load8_s - (local.tee $10 - (i32.add - (local.get $10) - (i32.const 1) + (i32.mul + (local.get $11) + (i32.const 10) + ) + (local.get $6) + ) + ) + (if + (i32.lt_u + (local.tee $9 + (i32.add + (i32.load8_s + (local.tee $10 + (i32.add + (local.get $10) + (i32.const 1) + ) + ) ) + (i32.const -48) ) ) - (i32.const -48) + (i32.const 10) + ) + (then + (block + (local.set $11 + (local.get $6) + ) + (local.set $6 + (local.get $9) + ) + (br $while-in8) + ) ) ) - (i32.const 10) ) - (block - (local.set $11 + (if + (i32.lt_s (local.get $6) + (i32.const 0) ) - (local.set $6 - (local.get $9) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (else + (block + (local.set $11 + (local.get $1) + ) + (local.set $1 + (local.get $8) + ) + (local.set $14 + (local.get $6) + ) + ) ) - (br $while-in8) ) ) ) - (if - (i32.lt_s - (local.get $6) - (i32.const 0) - ) - (block - (local.set $16 - (i32.const -1) - ) - (br $label$break$L1) - ) + (else (block (local.set $11 (local.get $1) @@ -9839,22 +10318,11 @@ (local.get $8) ) (local.set $14 - (local.get $6) + (i32.const 0) ) ) ) ) - (block - (local.set $11 - (local.get $1) - ) - (local.set $1 - (local.get $8) - ) - (local.set $14 - (i32.const 0) - ) - ) ) ) ) @@ -9867,207 +10335,227 @@ ) (i32.const 46) ) - (block (result i32) - (if - (i32.ne - (local.tee $8 - (i32.load8_s - (local.tee $6 - (i32.add - (local.get $10) - (i32.const 1) + (then + (block (result i32) + (if + (i32.ne + (local.tee $8 + (i32.load8_s + (local.tee $6 + (i32.add + (local.get $10) + (i32.const 1) + ) ) ) ) + (i32.const 42) ) - (i32.const 42) - ) - (block - (if - (i32.lt_u - (local.tee $9 - (i32.add - (local.get $8) - (i32.const -48) - ) - ) - (i32.const 10) - ) - (block - (local.set $10 - (local.get $6) - ) - (local.set $8 - (i32.const 0) - ) - (local.set $6 - (local.get $9) - ) - ) + (then (block - (local.set $10 - (local.get $6) - ) - (br $label$break$L46 - (i32.const 0) - ) - ) - ) - (loop $while-in11 - (drop - (br_if $label$break$L46 - (local.tee $6 - (i32.add - (i32.mul - (local.get $8) - (i32.const 10) - ) - (local.get $6) - ) - ) - (i32.ge_u + (if + (i32.lt_u (local.tee $9 (i32.add - (i32.load8_s - (local.tee $10 - (i32.add - (local.get $10) - (i32.const 1) - ) - ) - ) + (local.get $8) (i32.const -48) ) ) (i32.const 10) ) + (then + (block + (local.set $10 + (local.get $6) + ) + (local.set $8 + (i32.const 0) + ) + (local.set $6 + (local.get $9) + ) + ) + ) + (else + (block + (local.set $10 + (local.get $6) + ) + (br $label$break$L46 + (i32.const 0) + ) + ) + ) ) - ) - (local.set $8 - (local.get $6) - ) - (local.set $6 - (local.get $9) - ) - (br $while-in11) - ) - ) - ) - (if - (i32.lt_u - (local.tee $8 - (i32.add - (i32.load8_s - (local.tee $6 - (i32.add - (local.get $10) - (i32.const 2) + (loop $while-in11 + (drop + (br_if $label$break$L46 + (local.tee $6 + (i32.add + (i32.mul + (local.get $8) + (i32.const 10) + ) + (local.get $6) + ) + ) + (i32.ge_u + (local.tee $9 + (i32.add + (i32.load8_s + (local.tee $10 + (i32.add + (local.get $10) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) ) ) + (local.set $8 + (local.get $6) + ) + (local.set $6 + (local.get $9) + ) + (br $while-in11) ) - (i32.const -48) ) ) - (i32.const 10) ) (if - (i32.eq - (i32.load8_s offset=3 - (local.get $10) - ) - (i32.const 36) - ) - (block - (i32.store + (i32.lt_u + (local.tee $8 (i32.add - (local.get $4) - (i32.shl - (local.get $8) - (i32.const 2) + (i32.load8_s + (local.tee $6 + (i32.add + (local.get $10) + (i32.const 2) + ) + ) ) + (i32.const -48) ) - (i32.const 10) ) - (drop - (i32.load offset=4 - (local.tee $6 - (i32.add - (local.get $3) - (i32.shl - (i32.add - (i32.load8_s - (local.get $6) + (i32.const 10) + ) + (then + (if + (i32.eq + (i32.load8_s offset=3 + (local.get $10) + ) + (i32.const 36) + ) + (then + (block + (i32.store + (i32.add + (local.get $4) + (i32.shl + (local.get $8) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (drop + (i32.load offset=4 + (local.tee $6 + (i32.add + (local.get $3) + (i32.shl + (i32.add + (i32.load8_s + (local.get $6) + ) + (i32.const -48) + ) + (i32.const 3) + ) ) - (i32.const -48) ) - (i32.const 3) + ) + ) + (local.set $10 + (i32.add + (local.get $10) + (i32.const 4) + ) + ) + (br $label$break$L46 + (i32.load + (local.get $6) ) ) ) ) ) - (local.set $10 - (i32.add - (local.get $10) - (i32.const 4) - ) - ) - (br $label$break$L46 - (i32.load - (local.get $6) - ) - ) ) ) - ) - (if - (local.get $1) - (block - (local.set $16 - (i32.const -1) + (if + (local.get $1) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) + ) ) - (br $label$break$L1) ) - ) - (if (result i32) - (local.get $29) - (block (result i32) - (local.set $8 - (i32.load - (local.tee $10 - (i32.and - (i32.add - (i32.load - (local.get $2) + (if (result i32) + (local.get $29) + (then + (block (result i32) + (local.set $8 + (i32.load + (local.tee $10 + (i32.and + (i32.add + (i32.load + (local.get $2) + ) + (i32.const 3) + ) + (i32.const -4) ) - (i32.const 3) ) - (i32.const -4) ) ) + (i32.store + (local.get $2) + (i32.add + (local.get $10) + (i32.const 4) + ) + ) + (local.set $10 + (local.get $6) + ) + (local.get $8) ) ) - (i32.store - (local.get $2) - (i32.add - (local.get $10) - (i32.const 4) + (else + (block (result i32) + (local.set $10 + (local.get $6) + ) + (i32.const 0) ) ) - (local.set $10 - (local.get $6) - ) - (local.get $8) - ) - (block (result i32) - (local.set $10 - (local.get $6) - ) - (i32.const 0) ) ) ) - (i32.const -1) + (else + (i32.const -1) + ) ) ) ) @@ -10090,11 +10578,13 @@ ) (i32.const 57) ) - (block - (local.set $16 - (i32.const -1) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) ) - (br $label$break$L1) ) ) (local.set $10 @@ -10129,17 +10619,21 @@ ) (i32.const 8) ) - (block - (local.set $8 - (local.get $10) - ) - (local.set $9 - (local.get $12) + (then + (block + (local.set $8 + (local.get $10) + ) + (local.set $9 + (local.get $12) + ) + (br $while-in13) ) - (br $while-in13) ) - (local.set $18 - (local.get $8) + (else + (local.set $18 + (local.get $8) + ) ) ) ) @@ -10150,11 +10644,13 @@ (i32.const 255) ) ) - (block - (local.set $16 - (i32.const -1) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) ) - (br $label$break$L1) ) ) (local.set $8 @@ -10173,74 +10669,86 @@ ) (i32.const 19) ) - (if - (local.get $8) - (block - (local.set $16 - (i32.const -1) + (then + (if + (local.get $8) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (else + (br $__rjti$2) ) - (br $label$break$L1) ) - (br $__rjti$2) ) - (block - (if - (local.get $8) - (block - (i32.store - (i32.add - (local.get $4) - (i32.shl - (local.get $17) - (i32.const 2) - ) - ) - (local.get $12) - ) - (local.set $13 - (i32.load offset=4 - (local.tee $12 + (else + (block + (if + (local.get $8) + (then + (block + (i32.store (i32.add - (local.get $3) + (local.get $4) (i32.shl (local.get $17) - (i32.const 3) + (i32.const 2) + ) + ) + (local.get $12) + ) + (local.set $13 + (i32.load offset=4 + (local.tee $12 + (i32.add + (local.get $3) + (i32.shl + (local.get $17) + (i32.const 3) + ) + ) ) ) ) + (i32.store + (local.tee $8 + (local.get $19) + ) + (i32.load + (local.get $12) + ) + ) + (i32.store offset=4 + (local.get $8) + (local.get $13) + ) + (br $__rjti$2) ) ) - (i32.store - (local.tee $8 - (local.get $19) - ) - (i32.load - (local.get $12) - ) + ) + (if + (i32.eqz + (local.get $29) ) - (i32.store offset=4 - (local.get $8) - (local.get $13) + (then + (block + (local.set $16 + (i32.const 0) + ) + (br $label$break$L1) + ) ) - (br $__rjti$2) ) - ) - (if - (i32.eqz - (local.get $29) - ) - (block - (local.set $16 - (i32.const 0) - ) - (br $label$break$L1) + (call $_pop_arg_336 + (local.get $19) + (local.get $12) + (local.get $2) ) ) - (call $_pop_arg_336 - (local.get $19) - (local.get $12) - (local.get $2) - ) ) ) (br $__rjto$2) @@ -10249,14 +10757,16 @@ (i32.eqz (local.get $29) ) - (block - (local.set $5 - (local.get $10) - ) - (local.set $10 - (local.get $7) + (then + (block + (local.set $5 + (local.get $10) + ) + (local.set $10 + (local.get $7) + ) + (br $label$continue$L1) ) - (br $label$continue$L1) ) ) ) @@ -10521,50 +11031,54 @@ ) ) ) - (local.set $8 - (local.get $26) - ) - (block - (local.set $5 - (local.get $7) - ) - (local.set $7 - (local.get $8) - ) + (then (local.set $8 (local.get $26) ) - (loop $while-in32 - (i32.store8 - (local.tee $8 - (i32.add - (local.get $8) - (i32.const -1) + ) + (else + (block + (local.set $5 + (local.get $7) + ) + (local.set $7 + (local.get $8) + ) + (local.set $8 + (local.get $26) + ) + (loop $while-in32 + (i32.store8 + (local.tee $8 + (i32.add + (local.get $8) + (i32.const -1) + ) ) - ) - (i32.or - (i32.and - (local.get $5) - (i32.const 7) + (i32.or + (i32.and + (local.get $5) + (i32.const 7) + ) + (i32.const 48) ) - (i32.const 48) ) - ) - (br_if $while-in32 - (i32.eqz - (i32.and - (i32.eqz - (local.tee $5 - (call $_bitshift64Lshr - (local.get $5) - (local.get $7) - (i32.const 3) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (local.tee $5 + (call $_bitshift64Lshr + (local.get $5) + (local.get $7) + (i32.const 3) + ) ) ) - ) - (i32.eqz - (local.tee $7 - (global.get $tempRet0) + (i32.eqz + (local.tee $7 + (global.get $tempRet0) + ) ) ) ) @@ -10579,35 +11093,39 @@ (local.get $11) (i32.const 8) ) - (block (result i32) - (local.set $7 - (local.get $11) - ) - (local.set $6 - (select - (local.tee $11 - (i32.add - (i32.sub - (local.get $39) - (local.get $8) + (then + (block (result i32) + (local.set $7 + (local.get $11) + ) + (local.set $6 + (select + (local.tee $11 + (i32.add + (i32.sub + (local.get $39) + (local.get $8) + ) + (i32.const 1) ) - (i32.const 1) ) - ) - (local.get $6) - (i32.lt_s (local.get $6) - (local.get $11) + (i32.lt_s + (local.get $6) + (local.get $11) + ) ) ) + (local.get $8) ) - (local.get $8) ) - (block (result i32) - (local.set $7 - (local.get $11) + (else + (block (result i32) + (local.set $7 + (local.get $11) + ) + (local.get $8) ) - (local.get $8) ) ) ) @@ -10635,33 +11153,35 @@ ) (i32.const 0) ) - (block - (i32.store - (local.tee $8 - (local.get $19) + (then + (block + (i32.store + (local.tee $8 + (local.get $19) + ) + (local.tee $5 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (local.get $5) + (local.get $7) + ) + ) ) - (local.tee $5 - (call $_i64Subtract - (i32.const 0) - (i32.const 0) - (local.get $5) - (local.get $7) + (i32.store offset=4 + (local.get $8) + (local.tee $7 + (global.get $tempRet0) ) ) - ) - (i32.store offset=4 - (local.get $8) - (local.tee $7 - (global.get $tempRet0) + (local.set $8 + (i32.const 1) ) + (local.set $9 + (i32.const 4091) + ) + (br $__rjti$4) ) - (local.set $8 - (i32.const 1) - ) - (local.set $9 - (i32.const 4091) - ) - (br $__rjti$4) ) ) (local.set $9 @@ -10670,25 +11190,29 @@ (local.get $11) (i32.const 2048) ) - (block (result i32) - (local.set $8 - (i32.const 1) + (then + (block (result i32) + (local.set $8 + (i32.const 1) + ) + (i32.const 4092) ) - (i32.const 4092) ) - (block (result i32) - (local.set $8 - (local.tee $9 - (i32.and - (local.get $11) - (i32.const 1) + (else + (block (result i32) + (local.set $8 + (local.tee $9 + (i32.and + (local.get $11) + (i32.const 1) + ) ) ) - ) - (select - (i32.const 4093) - (i32.const 4091) - (local.get $9) + (select + (i32.const 4093) + (i32.const 4091) + (local.get $9) + ) ) ) ) @@ -10797,24 +11321,28 @@ ) (if (local.get $6) - (block - (local.set $8 - (local.get $6) + (then + (block + (local.set $8 + (local.get $6) + ) + (br $__rjti$6) ) - (br $__rjti$6) ) - (block - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (i32.const 0) - (local.get $11) - ) - (local.set $7 - (i32.const 0) + (else + (block + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) + (i32.const 0) + (local.get $11) + ) + (local.set $7 + (i32.const 0) + ) + (br $__rjti$7) ) - (br $__rjti$7) ) ) ) @@ -10844,41 +11372,49 @@ ) (i32.const 0) ) - (block (result i32) - (local.set $27 - (i32.const 1) - ) - (local.set $15 - (f64.neg - (local.get $15) - ) - ) - (i32.const 4108) - ) - (if (result i32) - (i32.and - (local.get $11) - (i32.const 2048) - ) + (then (block (result i32) (local.set $27 (i32.const 1) ) - (i32.const 4111) - ) - (block (result i32) - (local.set $27 - (local.tee $5 - (i32.and - (local.get $11) + (local.set $15 + (f64.neg + (local.get $15) + ) + ) + (i32.const 4108) + ) + ) + (else + (if (result i32) + (i32.and + (local.get $11) + (i32.const 2048) + ) + (then + (block (result i32) + (local.set $27 (i32.const 1) ) + (i32.const 4111) ) ) - (select - (i32.const 4114) - (i32.const 4109) - (local.get $5) + (else + (block (result i32) + (local.set $27 + (local.tee $5 + (i32.and + (local.get $11) + (i32.const 1) + ) + ) + ) + (select + (i32.const 4114) + (i32.const 4109) + (local.get $5) + ) + ) ) ) ) @@ -10916,2124 +11452,2096 @@ (i32.const 0) ) ) - (block (result i32) - (if - (local.tee $5 - (f64.ne - (local.tee $23 - (f64.mul - (call $_frexp - (local.get $15) - (local.tee $5 - (local.get $20) + (then + (block (result i32) + (if + (local.tee $5 + (f64.ne + (local.tee $23 + (f64.mul + (call $_frexp + (local.get $15) + (local.tee $5 + (local.get $20) + ) ) + (f64.const 2) ) - (f64.const 2) ) + (f64.const 0) ) - (f64.const 0) ) - ) - (i32.store - (local.get $20) - (i32.add - (i32.load + (then + (i32.store (local.get $20) - ) - (i32.const -1) - ) - ) - ) - (if - (i32.eq - (local.tee $24 - (i32.or - (local.get $18) - (i32.const 32) - ) - ) - (i32.const 97) - ) - (block - (local.set $9 - (select (i32.add - (local.get $31) - (i32.const 9) - ) - (local.get $31) - (local.tee $13 - (i32.and - (local.get $18) - (i32.const 32) + (i32.load + (local.get $20) ) + (i32.const -1) ) ) ) - (local.set $15 - (if (result f64) + ) + (if + (i32.eq + (local.tee $24 (i32.or - (i32.gt_u - (local.get $6) - (i32.const 11) - ) - (i32.eqz - (local.tee $5 - (i32.sub - (i32.const 12) - (local.get $6) - ) - ) - ) + (local.get $18) + (i32.const 32) ) - (local.get $23) - (block (result f64) - (local.set $15 - (f64.const 8) - ) - (loop $while-in54 - (local.set $15 - (f64.mul - (local.get $15) - (f64.const 16) - ) + ) + (i32.const 97) + ) + (then + (block + (local.set $9 + (select + (i32.add + (local.get $31) + (i32.const 9) ) - (br_if $while-in54 - (local.tee $5 - (i32.add - (local.get $5) - (i32.const -1) - ) + (local.get $31) + (local.tee $13 + (i32.and + (local.get $18) + (i32.const 32) ) ) ) + ) + (local.set $15 (if (result f64) - (i32.eq - (i32.load8_s - (local.get $9) + (i32.or + (i32.gt_u + (local.get $6) + (i32.const 11) ) - (i32.const 45) - ) - (f64.neg - (f64.add - (local.get $15) - (f64.sub - (f64.neg - (local.get $23) + (i32.eqz + (local.tee $5 + (i32.sub + (i32.const 12) + (local.get $6) ) - (local.get $15) ) ) ) - (f64.sub - (f64.add - (local.get $23) - (local.get $15) + (then + (local.get $23) + ) + (else + (block (result f64) + (local.set $15 + (f64.const 8) + ) + (loop $while-in54 + (local.set $15 + (f64.mul + (local.get $15) + (f64.const 16) + ) + ) + (br_if $while-in54 + (local.tee $5 + (i32.add + (local.get $5) + (i32.const -1) + ) + ) + ) + ) + (if (result f64) + (i32.eq + (i32.load8_s + (local.get $9) + ) + (i32.const 45) + ) + (then + (f64.neg + (f64.add + (local.get $15) + (f64.sub + (f64.neg + (local.get $23) + ) + (local.get $15) + ) + ) + ) + ) + (else + (f64.sub + (f64.add + (local.get $23) + (local.get $15) + ) + (local.get $15) + ) + ) + ) ) - (local.get $15) ) ) ) - ) - ) - (if - (i32.eq - (local.tee $5 - (call $_fmt_u + (if + (i32.eq (local.tee $5 - (select - (i32.sub - (i32.const 0) - (local.tee $7 - (i32.load - (local.get $20) + (call $_fmt_u + (local.tee $5 + (select + (i32.sub + (i32.const 0) + (local.tee $7 + (i32.load + (local.get $20) + ) + ) + ) + (local.get $7) + (i32.lt_s + (local.get $7) + (i32.const 0) ) ) ) - (local.get $7) - (i32.lt_s - (local.get $7) - (i32.const 0) + (i32.shr_s + (i32.shl + (i32.lt_s + (local.get $5) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) ) + (local.get $34) ) ) - (i32.shr_s - (i32.shl - (i32.lt_s - (local.get $5) - (i32.const 0) - ) + (local.get $34) + ) + (then + (block + (i32.store8 + (local.get $42) + (i32.const 48) + ) + (local.set $5 + (local.get $42) + ) + ) + ) + ) + (local.set $12 + (i32.or + (local.get $27) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (local.get $5) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (local.get $7) (i32.const 31) ) - (i32.const 31) + (i32.const 2) ) - (local.get $34) + (i32.const 43) ) ) - (local.get $34) - ) - (block (i32.store8 - (local.get $42) - (i32.const 48) + (local.tee $8 + (i32.add + (local.get $5) + (i32.const -2) + ) + ) + (i32.add + (local.get $18) + (i32.const 15) + ) ) - (local.set $5 - (local.get $42) + (local.set $18 + (i32.lt_s + (local.get $6) + (i32.const 1) + ) ) - ) - ) - (local.set $12 - (i32.or - (local.get $27) - (i32.const 2) - ) - ) - (i32.store8 - (i32.add - (local.get $5) - (i32.const -1) - ) - (i32.add - (i32.and - (i32.shr_s - (local.get $7) - (i32.const 31) + (local.set $17 + (i32.eqz + (i32.and + (local.get $11) + (i32.const 8) + ) ) - (i32.const 2) ) - (i32.const 43) - ) - ) - (i32.store8 - (local.tee $8 - (i32.add - (local.get $5) - (i32.const -2) + (local.set $5 + (local.get $22) ) - ) - (i32.add - (local.get $18) - (i32.const 15) - ) - ) - (local.set $18 - (i32.lt_s - (local.get $6) - (i32.const 1) - ) - ) - (local.set $17 - (i32.eqz - (i32.and - (local.get $11) - (i32.const 8) - ) - ) - ) - (local.set $5 - (local.get $22) - ) - (loop $while-in56 - (i32.store8 - (local.get $5) - (i32.or - (i32.load8_u - (i32.add - (local.tee $7 - (call $f64-to-int - (local.get $15) + (loop $while-in56 + (i32.store8 + (local.get $5) + (i32.or + (i32.load8_u + (i32.add + (local.tee $7 + (call $f64-to-int + (local.get $15) + ) + ) + (i32.const 4075) ) ) - (i32.const 4075) + (local.get $13) ) ) - (local.get $13) - ) - ) - (local.set $15 - (f64.mul - (f64.sub - (local.get $15) - (f64.convert_i32_s - (local.get $7) + (local.set $15 + (f64.mul + (f64.sub + (local.get $15) + (f64.convert_i32_s + (local.get $7) + ) + ) + (f64.const 16) ) ) - (f64.const 16) - ) - ) - (local.set $5 - (block $do-once57 (result i32) - (if (result i32) - (i32.eq - (i32.sub - (local.tee $7 - (i32.add - (local.get $5) - (i32.const 1) + (local.set $5 + (block $do-once57 (result i32) + (if (result i32) + (i32.eq + (i32.sub + (local.tee $7 + (i32.add + (local.get $5) + (i32.const 1) + ) + ) + (local.get $37) + ) + (i32.const 1) + ) + (then + (block (result i32) + (drop + (br_if $do-once57 + (local.get $7) + (i32.and + (local.get $17) + (i32.and + (local.get $18) + (f64.eq + (local.get $15) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (local.get $7) + (i32.const 46) + ) + (i32.add + (local.get $5) + (i32.const 2) + ) ) ) - (local.get $37) + (else + (local.get $7) + ) ) - (i32.const 1) ) - (block (result i32) - (drop - (br_if $do-once57 - (local.get $7) + ) + (br_if $while-in56 + (f64.ne + (local.get $15) + (f64.const 0) + ) + ) + ) + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) + (local.tee $7 + (i32.add + (local.tee $6 + (select + (i32.sub + (i32.add + (local.get $47) + (local.get $6) + ) + (local.get $8) + ) + (i32.add + (i32.sub + (local.get $45) + (local.get $8) + ) + (local.get $5) + ) (i32.and - (local.get $17) - (i32.and - (local.get $18) - (f64.eq - (local.get $15) - (f64.const 0) + (i32.ne + (local.get $6) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (local.get $46) + (local.get $5) ) + (local.get $6) ) ) ) ) - (i32.store8 - (local.get $7) - (i32.const 46) + (local.get $12) + ) + ) + (local.get $11) + ) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) ) - (i32.add - (local.get $5) - (i32.const 2) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $9) + (local.get $12) + (local.get $0) ) ) - (local.get $7) ) ) - ) - (br_if $while-in56 - (f64.ne - (local.get $15) - (f64.const 0) + (call $_pad + (local.get $0) + (i32.const 48) + (local.get $14) + (local.get $7) + (i32.xor + (local.get $11) + (i32.const 65536) + ) ) - ) - ) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (local.tee $7 - (i32.add - (local.tee $6 - (select - (i32.sub - (i32.add - (local.get $47) - (local.get $6) - ) - (local.get $8) + (local.set $5 + (i32.sub + (local.get $5) + (local.get $37) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) ) - (i32.add + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $22) + (local.get $5) + (local.get $0) + ) + ) + ) + ) + (call $_pad + (local.get $0) + (i32.const 48) + (i32.sub + (local.get $6) + (i32.add + (local.get $5) + (local.tee $5 (i32.sub - (local.get $45) + (local.get $28) (local.get $8) ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $8) (local.get $5) + (local.get $0) ) - (i32.and - (i32.ne - (local.get $6) - (i32.const 0) - ) - (i32.lt_s - (i32.add - (local.get $46) - (local.get $5) - ) - (local.get $6) + ) + ) + ) + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) + (local.get $7) + (i32.xor + (local.get $11) + (i32.const 8192) + ) + ) + (br $do-once49 + (select + (local.get $14) + (local.get $7) + (i32.lt_s + (local.get $7) + (local.get $14) + ) + ) + ) + ) + ) + ) + (local.set $15 + (if (result f64) + (local.get $5) + (then + (block (result f64) + (i32.store + (local.get $20) + (local.tee $5 + (i32.add + (i32.load + (local.get $20) ) + (i32.const -28) ) ) ) - (local.get $12) + (f64.mul + (local.get $23) + (f64.const 268435456) + ) ) ) - (local.get $11) - ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) + (else + (block (result f64) + (local.set $5 + (i32.load + (local.get $20) + ) ) - (i32.const 32) + (local.get $23) ) ) - (drop - (call $___fwritex - (local.get $9) - (local.get $12) - (local.get $0) - ) - ) - ) - (call $_pad - (local.get $0) - (i32.const 48) - (local.get $14) - (local.get $7) - (i32.xor - (local.get $11) - (i32.const 65536) - ) - ) - (local.set $5 - (i32.sub - (local.get $5) - (local.get $37) - ) - ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) - ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $22) - (local.get $5) - (local.get $0) - ) - ) - ) - (call $_pad - (local.get $0) - (i32.const 48) - (i32.sub - (local.get $6) - (i32.add - (local.get $5) - (local.tee $5 - (i32.sub - (local.get $28) - (local.get $8) - ) - ) - ) - ) - (i32.const 0) - (i32.const 0) ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) - ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $8) + ) + (local.set $7 + (local.tee $8 + (select + (local.get $48) + (local.get $49) + (i32.lt_s (local.get $5) - (local.get $0) + (i32.const 0) ) ) ) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) + ) + (loop $while-in60 + (i32.store (local.get $7) - (i32.xor - (local.get $11) - (i32.const 8192) + (local.tee $5 + (call $f64-to-int + (local.get $15) + ) ) ) - (br $do-once49 - (select - (local.get $14) + (local.set $7 + (i32.add (local.get $7) - (i32.lt_s - (local.get $7) - (local.get $14) - ) + (i32.const 4) ) ) - ) - ) - (local.set $15 - (if (result f64) - (local.get $5) - (block (result f64) - (i32.store - (local.get $20) - (local.tee $5 - (i32.add - (i32.load - (local.get $20) + (br_if $while-in60 + (f64.ne + (local.tee $15 + (f64.mul + (f64.sub + (local.get $15) + (f64.convert_i32_u + (local.get $5) + ) ) - (i32.const -28) + (f64.const 1e9) ) ) - ) - (f64.mul - (local.get $23) - (f64.const 268435456) + (f64.const 0) ) ) - (block (result f64) - (local.set $5 + ) + (if + (i32.gt_s + (local.tee $9 (i32.load (local.get $20) ) ) - (local.get $23) - ) - ) - ) - (local.set $7 - (local.tee $8 - (select - (local.get $48) - (local.get $49) - (i32.lt_s - (local.get $5) - (i32.const 0) - ) - ) - ) - ) - (loop $while-in60 - (i32.store - (local.get $7) - (local.tee $5 - (call $f64-to-int - (local.get $15) - ) - ) - ) - (local.set $7 - (i32.add - (local.get $7) - (i32.const 4) - ) - ) - (br_if $while-in60 - (f64.ne - (local.tee $15 - (f64.mul - (f64.sub - (local.get $15) - (f64.convert_i32_u - (local.get $5) - ) - ) - (f64.const 1e9) - ) - ) - (f64.const 0) - ) - ) - ) - (if - (i32.gt_s - (local.tee $9 - (i32.load - (local.get $20) - ) - ) - (i32.const 0) - ) - (block - (local.set $5 - (local.get $8) + (i32.const 0) ) - (loop $while-in62 - (local.set $13 - (select - (i32.const 29) - (local.get $9) - (i32.gt_s - (local.get $9) - (i32.const 29) - ) + (then + (block + (local.set $5 + (local.get $8) ) - ) - (block $do-once63 - (if - (i32.ge_u - (local.tee $9 - (i32.add - (local.get $7) - (i32.const -4) + (loop $while-in62 + (local.set $13 + (select + (i32.const 29) + (local.get $9) + (i32.gt_s + (local.get $9) + (i32.const 29) ) ) - (local.get $5) ) - (block - (local.set $12 - (i32.const 0) - ) - (loop $while-in66 - (i32.store - (local.get $9) - (call $___uremdi3 - (local.tee $12 - (call $_i64Add - (call $_bitshift64Shl - (i32.load - (local.get $9) + (block $do-once63 + (if + (i32.ge_u + (local.tee $9 + (i32.add + (local.get $7) + (i32.const -4) + ) + ) + (local.get $5) + ) + (then + (block + (local.set $12 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (local.get $9) + (call $___uremdi3 + (local.tee $12 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (local.get $9) + ) + (i32.const 0) + (local.get $13) + ) + (global.get $tempRet0) + (local.get $12) + (i32.const 0) + ) + ) + (local.tee $17 + (global.get $tempRet0) ) + (i32.const 1000000000) (i32.const 0) - (local.get $13) ) - (global.get $tempRet0) + ) + (local.set $12 + (call $___udivdi3 + (local.get $12) + (local.get $17) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (local.tee $9 + (i32.add + (local.get $9) + (i32.const -4) + ) + ) + (local.get $5) + ) + ) + ) + (br_if $do-once63 + (i32.eqz (local.get $12) - (i32.const 0) ) ) - (local.tee $17 - (global.get $tempRet0) + (i32.store + (local.tee $5 + (i32.add + (local.get $5) + (i32.const -4) + ) + ) + (local.get $12) ) - (i32.const 1000000000) - (i32.const 0) ) ) - (local.set $12 - (call $___udivdi3 - (local.get $12) - (local.get $17) - (i32.const 1000000000) - (i32.const 0) - ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (local.get $7) + (local.get $5) ) - (br_if $while-in66 - (i32.ge_u - (local.tee $9 - (i32.add - (local.get $9) - (i32.const -4) + (then + (if + (i32.eqz + (i32.load + (local.tee $9 + (i32.add + (local.get $7) + (i32.const -4) + ) + ) + ) + ) + (then + (block + (local.set $7 + (local.get $9) + ) + (br $while-in68) ) ) - (local.get $5) ) ) ) - (br_if $do-once63 - (i32.eqz - (local.get $12) - ) - ) - (i32.store - (local.tee $5 - (i32.add - (local.get $5) - (i32.const -4) + ) + (i32.store + (local.get $20) + (local.tee $9 + (i32.sub + (i32.load + (local.get $20) ) + (local.get $13) ) - (local.get $12) ) ) - ) - ) - (loop $while-in68 - (if - (i32.gt_u - (local.get $7) - (local.get $5) - ) - (if - (i32.eqz - (i32.load - (local.tee $9 - (i32.add - (local.get $7) - (i32.const -4) - ) - ) - ) - ) - (block - (local.set $7 - (local.get $9) - ) - (br $while-in68) - ) - ) - ) - ) - (i32.store - (local.get $20) - (local.tee $9 - (i32.sub - (i32.load - (local.get $20) + (br_if $while-in62 + (i32.gt_s + (local.get $9) + (i32.const 0) ) - (local.get $13) ) ) ) - (br_if $while-in62 - (i32.gt_s - (local.get $9) - (i32.const 0) - ) + ) + (else + (local.set $5 + (local.get $8) ) ) ) - (local.set $5 - (local.get $8) + (local.set $17 + (select + (i32.const 6) + (local.get $6) + (i32.lt_s + (local.get $6) + (i32.const 0) + ) + ) ) - ) - (local.set $17 - (select - (i32.const 6) - (local.get $6) + (if (i32.lt_s - (local.get $6) + (local.get $9) (i32.const 0) ) - ) - ) - (if - (i32.lt_s - (local.get $9) - (i32.const 0) - ) - (block - (local.set $21 - (i32.add - (call $i32s-div + (then + (block + (local.set $21 (i32.add - (local.get $17) - (i32.const 25) - ) - (i32.const 9) - ) - (i32.const 1) - ) - ) - (local.set $32 - (i32.eq - (local.get $24) - (i32.const 102) - ) - ) - (local.set $6 - (local.get $5) - ) - (local.set $5 - (local.get $7) - ) - (loop $while-in70 - (local.set $13 - (select - (i32.const 9) - (local.tee $7 - (i32.sub - (i32.const 0) - (local.get $9) + (call $i32s-div + (i32.add + (local.get $17) + (i32.const 25) + ) + (i32.const 9) ) - ) - (i32.gt_s - (local.get $7) - (i32.const 9) + (i32.const 1) ) ) - ) - (block $do-once71 - (if - (i32.lt_u - (local.get $6) - (local.get $5) + (local.set $32 + (i32.eq + (local.get $24) + (i32.const 102) ) - (block - (local.set $12 - (i32.add - (i32.shl - (i32.const 1) - (local.get $13) + ) + (local.set $6 + (local.get $5) + ) + (local.set $5 + (local.get $7) + ) + (loop $while-in70 + (local.set $13 + (select + (i32.const 9) + (local.tee $7 + (i32.sub + (i32.const 0) + (local.get $9) ) - (i32.const -1) ) - ) - (local.set $38 - (i32.shr_u - (i32.const 1000000000) - (local.get $13) + (i32.gt_s + (local.get $7) + (i32.const 9) ) ) - (local.set $9 - (i32.const 0) - ) - (local.set $7 - (local.get $6) - ) - (loop $while-in74 - (i32.store - (local.get $7) - (i32.add - (i32.shr_u - (local.tee $33 + ) + (block $do-once71 + (if + (i32.lt_u + (local.get $6) + (local.get $5) + ) + (then + (block + (local.set $12 + (i32.add + (i32.shl + (i32.const 1) + (local.get $13) + ) + (i32.const -1) + ) + ) + (local.set $38 + (i32.shr_u + (i32.const 1000000000) + (local.get $13) + ) + ) + (local.set $9 + (i32.const 0) + ) + (local.set $7 + (local.get $6) + ) + (loop $while-in74 + (i32.store + (local.get $7) + (i32.add + (i32.shr_u + (local.tee $33 + (i32.load + (local.get $7) + ) + ) + (local.get $13) + ) + (local.get $9) + ) + ) + (local.set $9 + (i32.mul + (i32.and + (local.get $33) + (local.get $12) + ) + (local.get $38) + ) + ) + (br_if $while-in74 + (i32.lt_u + (local.tee $7 + (i32.add + (local.get $7) + (i32.const 4) + ) + ) + (local.get $5) + ) + ) + ) + (local.set $7 + (select + (local.get $6) + (i32.add + (local.get $6) + (i32.const 4) + ) (i32.load - (local.get $7) + (local.get $6) ) ) - (local.get $13) ) - (local.get $9) - ) - ) - (local.set $9 - (i32.mul - (i32.and - (local.get $33) - (local.get $12) + (br_if $do-once71 + (i32.eqz + (local.get $9) + ) + ) + (i32.store + (local.get $5) + (local.get $9) + ) + (local.set $5 + (i32.add + (local.get $5) + (i32.const 4) + ) ) - (local.get $38) ) ) - (br_if $while-in74 - (i32.lt_u - (local.tee $7 + (else + (local.set $7 + (select + (local.get $6) (i32.add - (local.get $7) + (local.get $6) (i32.const 4) ) + (i32.load + (local.get $6) + ) ) - (local.get $5) ) ) ) - (local.set $7 - (select - (local.get $6) - (i32.add - (local.get $6) - (i32.const 4) + ) + (local.set $12 + (select + (i32.add + (local.tee $6 + (select + (local.get $8) + (local.get $7) + (local.get $32) + ) ) - (i32.load - (local.get $6) + (i32.shl + (local.get $21) + (i32.const 2) ) ) - ) - (br_if $do-once71 - (i32.eqz - (local.get $9) - ) - ) - (i32.store (local.get $5) - (local.get $9) - ) - (local.set $5 - (i32.add - (local.get $5) - (i32.const 4) + (i32.gt_s + (i32.shr_s + (i32.sub + (local.get $5) + (local.get $6) + ) + (i32.const 2) + ) + (local.get $21) ) ) ) - (local.set $7 - (select - (local.get $6) + (i32.store + (local.get $20) + (local.tee $9 (i32.add - (local.get $6) - (i32.const 4) - ) - (i32.load - (local.get $6) + (i32.load + (local.get $20) + ) + (local.get $13) ) ) ) - ) - ) - (local.set $12 - (select - (i32.add - (local.tee $6 - (select - (local.get $8) - (local.get $7) - (local.get $32) - ) - ) - (i32.shl - (local.get $21) - (i32.const 2) + (if + (i32.lt_s + (local.get $9) + (i32.const 0) ) - ) - (local.get $5) - (i32.gt_s - (i32.shr_s - (i32.sub - (local.get $5) - (local.get $6) + (then + (block + (local.set $6 + (local.get $7) + ) + (local.set $5 + (local.get $12) + ) + (br $while-in70) ) - (i32.const 2) ) - (local.get $21) - ) - ) - ) - (i32.store - (local.get $20) - (local.tee $9 - (i32.add - (i32.load - (local.get $20) + (else + (block + (local.set $5 + (local.get $7) + ) + (local.set $9 + (local.get $12) + ) + ) ) - (local.get $13) ) ) ) - (if - (i32.lt_s - (local.get $9) - (i32.const 0) - ) - (block - (local.set $6 - (local.get $7) - ) - (local.set $5 - (local.get $12) - ) - (br $while-in70) - ) - (block - (local.set $5 - (local.get $7) - ) - (local.set $9 - (local.get $12) - ) - ) + ) + (else + (local.set $9 + (local.get $7) ) ) ) - (local.set $9 - (local.get $7) + (local.set $21 + (local.get $8) ) - ) - (local.set $21 - (local.get $8) - ) - (block $do-once75 - (if - (i32.lt_u - (local.get $5) - (local.get $9) - ) - (block - (local.set $7 - (i32.mul - (i32.shr_s - (i32.sub - (local.get $21) - (local.get $5) + (block $do-once75 + (if + (i32.lt_u + (local.get $5) + (local.get $9) + ) + (then + (block + (local.set $7 + (i32.mul + (i32.shr_s + (i32.sub + (local.get $21) + (local.get $5) + ) + (i32.const 2) + ) + (i32.const 9) ) - (i32.const 2) ) - (i32.const 9) - ) - ) - (br_if $do-once75 - (i32.lt_u - (local.tee $12 - (i32.load - (local.get $5) + (br_if $do-once75 + (i32.lt_u + (local.tee $12 + (i32.load + (local.get $5) + ) + ) + (i32.const 10) ) ) - (i32.const 10) - ) - ) - (local.set $6 - (i32.const 10) - ) - (loop $while-in78 - (local.set $7 - (i32.add - (local.get $7) - (i32.const 1) + (local.set $6 + (i32.const 10) ) - ) - (br_if $while-in78 - (i32.ge_u - (local.get $12) - (local.tee $6 - (i32.mul - (local.get $6) - (i32.const 10) + (loop $while-in78 + (local.set $7 + (i32.add + (local.get $7) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (local.get $12) + (local.tee $6 + (i32.mul + (local.get $6) + (i32.const 10) + ) + ) ) ) ) ) ) - ) - (local.set $7 - (i32.const 0) + (else + (local.set $7 + (i32.const 0) + ) + ) ) ) - ) - (local.set $5 - (if (result i32) - (i32.lt_s - (local.tee $6 - (i32.add - (i32.sub - (local.get $17) - (select - (local.get $7) - (i32.const 0) - (i32.ne - (local.get $24) - (i32.const 102) + (local.set $5 + (if (result i32) + (i32.lt_s + (local.tee $6 + (i32.add + (i32.sub + (local.get $17) + (select + (local.get $7) + (i32.const 0) + (i32.ne + (local.get $24) + (i32.const 102) + ) ) ) - ) - (i32.shr_s - (i32.shl - (i32.and - (local.tee $32 - (i32.ne - (local.get $17) - (i32.const 0) + (i32.shr_s + (i32.shl + (i32.and + (local.tee $32 + (i32.ne + (local.get $17) + (i32.const 0) + ) ) - ) - (local.tee $38 - (i32.eq - (local.get $24) - (i32.const 103) + (local.tee $38 + (i32.eq + (local.get $24) + (i32.const 103) + ) ) ) + (i32.const 31) ) (i32.const 31) ) - (i32.const 31) - ) - ) - ) - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (local.get $9) - (local.get $21) - ) - (i32.const 2) ) - (i32.const 9) ) - (i32.const -9) - ) - ) - (block (result i32) - (local.set $13 - (call $i32s-div - (local.tee $6 - (i32.add - (local.get $6) - (i32.const 9216) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (local.get $9) + (local.get $21) + ) + (i32.const 2) ) + (i32.const 9) ) - (i32.const 9) + (i32.const -9) ) ) - (if - (i32.lt_s - (local.tee $6 - (i32.add - (if (result i32) - (local.tee $12 - (i32.const 9) - ) - (i32.rem_s + (then + (block (result i32) + (local.set $13 + (call $i32s-div + (local.tee $6 + (i32.add (local.get $6) - (local.get $12) - ) - (i32.const 0) - ) - (i32.const 1) - ) - ) - (i32.const 9) - ) - (block - (local.set $12 - (i32.const 10) - ) - (loop $while-in80 - (local.set $12 - (i32.mul - (local.get $12) - (i32.const 10) - ) - ) - (br_if $while-in80 - (i32.ne - (local.tee $6 - (i32.add - (local.get $6) - (i32.const 1) - ) + (i32.const 9216) ) - (i32.const 9) ) + (i32.const 9) ) ) - ) - (local.set $12 - (i32.const 10) - ) - ) - (local.set $13 - (call $i32u-rem - (local.tee $24 - (i32.load + (if + (i32.lt_s (local.tee $6 (i32.add - (i32.add - (local.get $8) - (i32.shl - (local.get $13) - (i32.const 2) + (if (result i32) + (local.tee $12 + (i32.const 9) + ) + (then + (i32.rem_s + (local.get $6) + (local.get $12) + ) + ) + (else + (i32.const 0) ) ) - (i32.const -4092) + (i32.const 1) ) ) + (i32.const 9) ) - ) - (local.get $12) - ) - ) - (block $do-once81 - (if - (i32.eqz - (i32.and - (local.tee $33 - (i32.eq - (i32.add - (local.get $6) - (i32.const 4) + (then + (block + (local.set $12 + (i32.const 10) + ) + (loop $while-in80 + (local.set $12 + (i32.mul + (local.get $12) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (local.tee $6 + (i32.add + (local.get $6) + (i32.const 1) + ) + ) + (i32.const 9) + ) ) - (local.get $9) ) ) - (i32.eqz - (local.get $13) - ) ) - ) - (block - (local.set $50 - (call $i32u-div - (local.get $24) - (local.get $12) + (else + (local.set $12 + (i32.const 10) ) ) - (local.set $15 - (if (result f64) - (i32.lt_u - (local.get $13) - (local.tee $51 - (call $i32s-div - (local.get $12) - (i32.const 2) - ) - ) - ) - (f64.const 0.5) - (select - (f64.const 1) - (f64.const 1.5) - (i32.and - (local.get $33) - (i32.eq - (local.get $13) - (local.get $51) + ) + (local.set $13 + (call $i32u-rem + (local.tee $24 + (i32.load + (local.tee $6 + (i32.add + (i32.add + (local.get $8) + (i32.shl + (local.get $13) + (i32.const 2) + ) + ) + (i32.const -4092) ) ) ) ) + (local.get $12) ) - (local.set $23 - (select - (f64.const 9007199254740994) - (f64.const 9007199254740992) + ) + (block $do-once81 + (if + (i32.eqz (i32.and - (local.get $50) - (i32.const 1) + (local.tee $33 + (i32.eq + (i32.add + (local.get $6) + (i32.const 4) + ) + (local.get $9) + ) + ) + (i32.eqz + (local.get $13) + ) ) ) - ) - (block $do-once83 - (if - (local.get $27) + (then (block - (br_if $do-once83 - (i32.ne - (i32.load8_s - (local.get $31) + (local.set $50 + (call $i32u-div + (local.get $24) + (local.get $12) + ) + ) + (local.set $15 + (if (result f64) + (i32.lt_u + (local.get $13) + (local.tee $51 + (call $i32s-div + (local.get $12) + (i32.const 2) + ) + ) + ) + (then + (f64.const 0.5) + ) + (else + (select + (f64.const 1) + (f64.const 1.5) + (i32.and + (local.get $33) + (i32.eq + (local.get $13) + (local.get $51) + ) + ) + ) ) - (i32.const 45) ) ) (local.set $23 - (f64.neg - (local.get $23) + (select + (f64.const 9007199254740994) + (f64.const 9007199254740992) + (i32.and + (local.get $50) + (i32.const 1) + ) ) ) - (local.set $15 - (f64.neg - (local.get $15) + (block $do-once83 + (if + (local.get $27) + (then + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (local.get $31) + ) + (i32.const 45) + ) + ) + (local.set $23 + (f64.neg + (local.get $23) + ) + ) + (local.set $15 + (f64.neg + (local.get $15) + ) + ) + ) + ) ) ) - ) - ) - ) - (i32.store - (local.get $6) - (local.tee $13 - (i32.sub - (local.get $24) - (local.get $13) - ) - ) - ) - (br_if $do-once81 - (f64.eq - (f64.add - (local.get $23) - (local.get $15) - ) - (local.get $23) - ) - ) - (i32.store - (local.get $6) - (local.tee $7 - (i32.add - (local.get $13) - (local.get $12) - ) - ) - ) - (if - (i32.gt_u - (local.get $7) - (i32.const 999999999) - ) - (loop $while-in86 - (i32.store - (local.get $6) - (i32.const 0) - ) - (if - (i32.lt_u - (local.tee $6 - (i32.add - (local.get $6) - (i32.const -4) + (i32.store + (local.get $6) + (local.tee $13 + (i32.sub + (local.get $24) + (local.get $13) ) ) - (local.get $5) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (local.get $23) + (local.get $15) + ) + (local.get $23) + ) ) (i32.store - (local.tee $5 + (local.get $6) + (local.tee $7 (i32.add - (local.get $5) - (i32.const -4) + (local.get $13) + (local.get $12) ) ) - (i32.const 0) ) - ) - (i32.store - (local.get $6) - (local.tee $7 - (i32.add - (i32.load - (local.get $6) + (if + (i32.gt_u + (local.get $7) + (i32.const 999999999) + ) + (then + (loop $while-in86 + (i32.store + (local.get $6) + (i32.const 0) + ) + (if + (i32.lt_u + (local.tee $6 + (i32.add + (local.get $6) + (i32.const -4) + ) + ) + (local.get $5) + ) + (then + (i32.store + (local.tee $5 + (i32.add + (local.get $5) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.store + (local.get $6) + (local.tee $7 + (i32.add + (i32.load + (local.get $6) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (local.get $7) + (i32.const 999999999) + ) + ) ) - (i32.const 1) ) ) - ) - (br_if $while-in86 - (i32.gt_u - (local.get $7) - (i32.const 999999999) + (local.set $7 + (i32.mul + (i32.shr_s + (i32.sub + (local.get $21) + (local.get $5) + ) + (i32.const 2) + ) + (i32.const 9) + ) ) - ) - ) - ) - (local.set $7 - (i32.mul - (i32.shr_s - (i32.sub - (local.get $21) - (local.get $5) + (br_if $do-once81 + (i32.lt_u + (local.tee $13 + (i32.load + (local.get $5) + ) + ) + (i32.const 10) + ) ) - (i32.const 2) - ) - (i32.const 9) - ) - ) - (br_if $do-once81 - (i32.lt_u - (local.tee $13 - (i32.load - (local.get $5) + (local.set $12 + (i32.const 10) + ) + (loop $while-in88 + (local.set $7 + (i32.add + (local.get $7) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (local.get $13) + (local.tee $12 + (i32.mul + (local.get $12) + (i32.const 10) + ) + ) + ) + ) ) ) - (i32.const 10) ) ) - (local.set $12 - (i32.const 10) - ) - (loop $while-in88 - (local.set $7 - (i32.add - (local.get $7) - (i32.const 1) - ) - ) - (br_if $while-in88 - (i32.ge_u - (local.get $13) - (local.tee $12 - (i32.mul - (local.get $12) - (i32.const 10) - ) - ) - ) + ) + (local.set $12 + (local.get $5) + ) + (local.set $13 + (local.get $7) + ) + (select + (local.tee $5 + (i32.add + (local.get $6) + (i32.const 4) ) ) + (local.get $9) + (i32.gt_u + (local.get $9) + (local.get $5) + ) ) ) ) - (local.set $12 - (local.get $5) - ) - (local.set $13 - (local.get $7) - ) - (select - (local.tee $5 - (i32.add - (local.get $6) - (i32.const 4) + (else + (block (result i32) + (local.set $12 + (local.get $5) + ) + (local.set $13 + (local.get $7) ) - ) - (local.get $9) - (i32.gt_u (local.get $9) - (local.get $5) ) ) ) - (block (result i32) - (local.set $12 - (local.get $5) - ) - (local.set $13 - (local.get $7) - ) - (local.get $9) - ) ) - ) - (local.set $33 - (i32.sub - (i32.const 0) - (local.get $13) + (local.set $33 + (i32.sub + (i32.const 0) + (local.get $13) + ) ) - ) - (loop $while-in90 - (block $while-out89 - (if - (i32.le_u - (local.get $5) - (local.get $12) - ) - (block - (local.set $24 - (i32.const 0) - ) - (local.set $9 + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u (local.get $5) + (local.get $12) ) - (br $while-out89) - ) - ) - (if - (i32.load - (local.tee $7 - (i32.add - (local.get $5) - (i32.const -4) + (then + (block + (local.set $24 + (i32.const 0) + ) + (local.set $9 + (local.get $5) + ) + (br $while-out89) ) ) ) - (block - (local.set $24 - (i32.const 1) + (if + (i32.load + (local.tee $7 + (i32.add + (local.get $5) + (i32.const -4) + ) + ) ) - (local.set $9 - (local.get $5) + (then + (block + (local.set $24 + (i32.const 1) + ) + (local.set $9 + (local.get $5) + ) + ) ) - ) - (block - (local.set $5 - (local.get $7) + (else + (block + (local.set $5 + (local.get $7) + ) + (br $while-in90) + ) ) - (br $while-in90) ) ) ) - ) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (local.tee $13 - (i32.add + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) + (local.tee $13 (i32.add (i32.add (i32.add - (local.get $27) - (i32.const 1) - ) - (local.tee $5 - (block $do-once91 (result i32) - (if (result i32) - (local.get $38) - (block (result i32) - (local.set $7 - (if (result i32) - (i32.and - (i32.gt_s - (local.tee $5 - (i32.add - (i32.xor - (local.get $32) - (i32.const 1) + (i32.add + (local.get $27) + (i32.const 1) + ) + (local.tee $5 + (block $do-once91 (result i32) + (if (result i32) + (local.get $38) + (then + (block (result i32) + (local.set $7 + (if (result i32) + (i32.and + (i32.gt_s + (local.tee $5 + (i32.add + (i32.xor + (local.get $32) + (i32.const 1) + ) + (local.get $17) + ) ) - (local.get $17) + (local.get $13) + ) + (i32.gt_s + (local.get $13) + (i32.const -5) ) ) - (local.get $13) - ) - (i32.gt_s - (local.get $13) - (i32.const -5) - ) - ) - (block (result i32) - (local.set $17 - (i32.sub - (i32.add - (local.get $5) - (i32.const -1) + (then + (block (result i32) + (local.set $17 + (i32.sub + (i32.add + (local.get $5) + (i32.const -1) + ) + (local.get $13) + ) + ) + (i32.add + (local.get $18) + (i32.const -1) + ) + ) + ) + (else + (block (result i32) + (local.set $17 + (i32.add + (local.get $5) + (i32.const -1) + ) + ) + (i32.add + (local.get $18) + (i32.const -2) + ) ) - (local.get $13) ) - ) - (i32.add - (local.get $18) - (i32.const -1) ) ) - (block (result i32) - (local.set $17 - (i32.add - (local.get $5) - (i32.const -1) + (if + (local.tee $5 + (i32.and + (local.get $11) + (i32.const 8) ) ) - (i32.add - (local.get $18) - (i32.const -2) + (then + (block + (local.set $21 + (local.get $5) + ) + (br $do-once91 + (local.get $17) + ) + ) ) ) - ) - ) - (if - (local.tee $5 - (i32.and - (local.get $11) - (i32.const 8) - ) - ) - (block - (local.set $21 - (local.get $5) - ) - (br $do-once91 - (local.get $17) - ) - ) - ) - (block $do-once93 - (if - (local.get $24) - (block + (block $do-once93 (if - (i32.eqz - (local.tee $18 - (i32.load - (i32.add - (local.get $9) - (i32.const -4) + (local.get $24) + (then + (block + (if + (i32.eqz + (local.tee $18 + (i32.load + (i32.add + (local.get $9) + (i32.const -4) + ) + ) + ) + ) + (then + (block + (local.set $5 + (i32.const 9) + ) + (br $do-once93) + ) + ) + ) + (if + (call $i32u-rem + (local.get $18) + (i32.const 10) + ) + (then + (block + (local.set $5 + (i32.const 0) + ) + (br $do-once93) + ) + ) + (else + (block + (local.set $6 + (i32.const 10) + ) + (local.set $5 + (i32.const 0) + ) + ) + ) + ) + (loop $while-in96 + (local.set $5 + (i32.add + (local.get $5) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (call $i32u-rem + (local.get $18) + (local.tee $6 + (i32.mul + (local.get $6) + (i32.const 10) + ) + ) + ) + ) ) ) ) ) - (block + (else (local.set $5 (i32.const 9) ) - (br $do-once93) ) ) - (if - (call $i32u-rem - (local.get $18) - (i32.const 10) - ) - (block - (local.set $5 - (i32.const 0) + ) + (local.set $6 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (local.get $9) + (local.get $21) + ) + (i32.const 2) ) - (br $do-once93) + (i32.const 9) ) - (block - (local.set $6 - (i32.const 10) - ) - (local.set $5 - (i32.const 0) - ) + (i32.const -9) + ) + ) + (if (result i32) + (i32.eq + (i32.or + (local.get $7) + (i32.const 32) ) + (i32.const 102) ) - (loop $while-in96 - (local.set $5 - (i32.add - (local.get $5) - (i32.const 1) + (then + (block (result i32) + (local.set $21 + (i32.const 0) ) - ) - (br_if $while-in96 - (i32.eqz - (call $i32u-rem - (local.get $18) - (local.tee $6 - (i32.mul - (local.get $6) - (i32.const 10) + (select + (local.get $17) + (local.tee $5 + (select + (i32.const 0) + (local.tee $5 + (i32.sub + (local.get $6) + (local.get $5) + ) + ) + (i32.lt_s + (local.get $5) + (i32.const 0) ) ) ) + (i32.lt_s + (local.get $17) + (local.get $5) + ) ) ) ) - ) - (local.set $5 - (i32.const 9) - ) - ) - ) - (local.set $6 - (i32.add - (i32.mul - (i32.shr_s - (i32.sub - (local.get $9) - (local.get $21) - ) - (i32.const 2) - ) - (i32.const 9) - ) - (i32.const -9) - ) - ) - (if (result i32) - (i32.eq - (i32.or - (local.get $7) - (i32.const 32) - ) - (i32.const 102) - ) - (block (result i32) - (local.set $21 - (i32.const 0) - ) - (select - (local.get $17) - (local.tee $5 - (select - (i32.const 0) - (local.tee $5 - (i32.sub - (local.get $6) - (local.get $5) - ) - ) - (i32.lt_s - (local.get $5) + (else + (block (result i32) + (local.set $21 (i32.const 0) ) - ) - ) - (i32.lt_s - (local.get $17) - (local.get $5) - ) - ) - ) - (block (result i32) - (local.set $21 - (i32.const 0) - ) - (select - (local.get $17) - (local.tee $5 - (select - (i32.const 0) - (local.tee $5 - (i32.sub - (i32.add - (local.get $6) - (local.get $13) + (select + (local.get $17) + (local.tee $5 + (select + (i32.const 0) + (local.tee $5 + (i32.sub + (i32.add + (local.get $6) + (local.get $13) + ) + (local.get $5) + ) + ) + (i32.lt_s + (local.get $5) + (i32.const 0) + ) ) + ) + (i32.lt_s + (local.get $17) (local.get $5) ) ) - (i32.lt_s - (local.get $5) - (i32.const 0) - ) ) ) - (i32.lt_s - (local.get $17) - (local.get $5) - ) ) ) ) - ) - (block (result i32) - (local.set $21 - (i32.and - (local.get $11) - (i32.const 8) + (else + (block (result i32) + (local.set $21 + (i32.and + (local.get $11) + (i32.const 8) + ) + ) + (local.set $7 + (local.get $18) + ) + (local.get $17) ) ) - (local.set $7 - (local.get $18) - ) - (local.get $17) ) ) ) ) - ) - (i32.ne - (local.tee $32 - (i32.or - (local.get $5) - (local.get $21) + (i32.ne + (local.tee $32 + (i32.or + (local.get $5) + (local.get $21) + ) ) + (i32.const 0) ) - (i32.const 0) ) - ) - (if (result i32) - (local.tee $17 - (i32.eq - (i32.or - (local.get $7) - (i32.const 32) + (if (result i32) + (local.tee $17 + (i32.eq + (i32.or + (local.get $7) + (i32.const 32) + ) + (i32.const 102) ) - (i32.const 102) - ) - ) - (block (result i32) - (local.set $18 - (i32.const 0) ) - (select - (local.get $13) - (i32.const 0) - (i32.gt_s - (local.get $13) - (i32.const 0) + (then + (block (result i32) + (local.set $18 + (i32.const 0) + ) + (select + (local.get $13) + (i32.const 0) + (i32.gt_s + (local.get $13) + (i32.const 0) + ) + ) ) ) - ) - (block (result i32) - (if - (i32.lt_s - (i32.sub - (local.get $28) - (local.tee $6 - (call $_fmt_u + (else + (block (result i32) + (if + (i32.lt_s + (i32.sub + (local.get $28) (local.tee $6 - (select - (local.get $33) - (local.get $13) - (i32.lt_s - (local.get $13) - (i32.const 0) + (call $_fmt_u + (local.tee $6 + (select + (local.get $33) + (local.get $13) + (i32.lt_s + (local.get $13) + (i32.const 0) + ) + ) ) + (i32.shr_s + (i32.shl + (i32.lt_s + (local.get $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (local.get $34) ) ) - (i32.shr_s - (i32.shl - (i32.lt_s + ) + (i32.const 2) + ) + (then + (loop $while-in98 + (i32.store8 + (local.tee $6 + (i32.add (local.get $6) - (i32.const 0) + (i32.const -1) ) - (i32.const 31) ) - (i32.const 31) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (local.get $28) + (local.get $6) + ) + (i32.const 2) + ) ) - (local.get $34) ) ) ) - (i32.const 2) - ) - (loop $while-in98 (i32.store8 - (local.tee $6 - (i32.add - (local.get $6) - (i32.const -1) + (i32.add + (local.get $6) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (local.get $13) + (i32.const 31) + ) + (i32.const 2) ) + (i32.const 43) ) - (i32.const 48) ) - (br_if $while-in98 - (i32.lt_s - (i32.sub - (local.get $28) + (i32.store8 + (local.tee $6 + (i32.add (local.get $6) + (i32.const -2) ) - (i32.const 2) ) + (local.get $7) ) - ) - ) - (i32.store8 - (i32.add - (local.get $6) - (i32.const -1) - ) - (i32.add - (i32.and - (i32.shr_s - (local.get $13) - (i32.const 31) - ) - (i32.const 2) + (local.set $18 + (local.get $6) ) - (i32.const 43) - ) - ) - (i32.store8 - (local.tee $6 - (i32.add + (i32.sub + (local.get $28) (local.get $6) - (i32.const -2) ) ) - (local.get $7) - ) - (local.set $18 - (local.get $6) - ) - (i32.sub - (local.get $28) - (local.get $6) ) ) ) ) + (local.get $11) ) - (local.get $11) - ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $31) + (local.get $27) + (local.get $0) + ) ) - (i32.const 32) ) ) - (drop - (call $___fwritex - (local.get $31) - (local.get $27) - (local.get $0) + (call $_pad + (local.get $0) + (i32.const 48) + (local.get $14) + (local.get $13) + (i32.xor + (local.get $11) + (i32.const 65536) ) ) - ) - (call $_pad - (local.get $0) - (i32.const 48) - (local.get $14) - (local.get $13) - (i32.xor - (local.get $11) - (i32.const 65536) - ) - ) - (block $do-once99 - (if - (local.get $17) - (block - (local.set $6 - (local.tee $12 - (select - (local.get $8) - (local.get $12) - (i32.gt_u - (local.get $12) - (local.get $8) - ) - ) - ) - ) - (loop $while-in102 - (local.set $7 - (call $_fmt_u - (i32.load - (local.get $6) + (block $do-once99 + (if + (local.get $17) + (then + (block + (local.set $6 + (local.tee $12 + (select + (local.get $8) + (local.get $12) + (i32.gt_u + (local.get $12) + (local.get $8) + ) + ) ) - (i32.const 0) - (local.get $30) ) - ) - (block $do-once103 - (if - (i32.eq - (local.get $6) - (local.get $12) - ) - (block - (br_if $do-once103 - (i32.ne - (local.get $7) - (local.get $30) + (loop $while-in102 + (local.set $7 + (call $_fmt_u + (i32.load + (local.get $6) ) - ) - (i32.store8 - (local.get $35) - (i32.const 48) - ) - (local.set $7 - (local.get $35) + (i32.const 0) + (local.get $30) ) ) - (block - (br_if $do-once103 - (i32.le_u - (local.get $7) - (local.get $22) + (block $do-once103 + (if + (i32.eq + (local.get $6) + (local.get $12) ) - ) - (loop $while-in106 - (i32.store8 - (local.tee $7 - (i32.add - (local.get $7) - (i32.const -1) + (then + (block + (br_if $do-once103 + (i32.ne + (local.get $7) + (local.get $30) + ) + ) + (i32.store8 + (local.get $35) + (i32.const 48) + ) + (local.set $7 + (local.get $35) ) ) - (i32.const 48) ) - (br_if $while-in106 - (i32.gt_u - (local.get $7) - (local.get $22) + (else + (block + (br_if $do-once103 + (i32.le_u + (local.get $7) + (local.get $22) + ) + ) + (loop $while-in106 + (i32.store8 + (local.tee $7 + (i32.add + (local.get $7) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in106 + (i32.gt_u + (local.get $7) + (local.get $22) + ) + ) + ) ) ) ) ) - ) - ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) - ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $7) - (i32.sub - (local.get $43) - (local.get $7) - ) - (local.get $0) - ) - ) - ) - (if - (i32.le_u - (local.tee $7 - (i32.add - (local.get $6) - (i32.const 4) - ) - ) - (local.get $8) - ) - (block - (local.set $6 - (local.get $7) - ) - (br $while-in102) - ) - ) - ) - (block $do-once107 - (if - (local.get $32) - (block - (br_if $do-once107 - (i32.and - (i32.load - (local.get $0) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (i32.const 4143) - (i32.const 1) - (local.get $0) ) - ) - ) - ) - ) - (if - (i32.and - (i32.gt_s - (local.get $5) - (i32.const 0) - ) - (i32.lt_u - (local.get $7) - (local.get $9) - ) - ) - (loop $while-in110 - (if - (i32.gt_u - (local.tee $6 - (call $_fmt_u - (i32.load + (then + (drop + (call $___fwritex (local.get $7) + (i32.sub + (local.get $43) + (local.get $7) + ) + (local.get $0) ) - (i32.const 0) - (local.get $30) ) ) - (local.get $22) ) - (loop $while-in112 - (i32.store8 - (local.tee $6 + (if + (i32.le_u + (local.tee $7 (i32.add (local.get $6) - (i32.const -1) + (i32.const 4) ) ) - (i32.const 48) + (local.get $8) ) - (br_if $while-in112 - (i32.gt_u - (local.get $6) - (local.get $22) + (then + (block + (local.set $6 + (local.get $7) + ) + (br $while-in102) ) ) ) ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) - ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $6) - (select - (i32.const 9) - (local.get $5) - (i32.gt_s - (local.get $5) - (i32.const 9) + (block $do-once107 + (if + (local.get $32) + (then + (block + (br_if $do-once107 + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (local.get $0) + ) ) ) - (local.get $0) ) ) ) - (local.set $6 - (i32.add - (local.get $5) - (i32.const -9) - ) - ) (if (i32.and (i32.gt_s (local.get $5) - (i32.const 9) + (i32.const 0) ) (i32.lt_u - (local.tee $7 - (i32.add - (local.get $7) - (i32.const 4) - ) - ) + (local.get $7) (local.get $9) ) ) - (block - (local.set $5 - (local.get $6) - ) - (br $while-in110) - ) - (local.set $5 - (local.get $6) - ) - ) - ) - ) - (call $_pad - (local.get $0) - (i32.const 48) - (i32.add - (local.get $5) - (i32.const 9) - ) - (i32.const 9) - (i32.const 0) - ) - ) - (block - (local.set $9 - (select - (local.get $9) - (i32.add - (local.get $12) - (i32.const 4) - ) - (local.get $24) - ) - ) - (if - (i32.gt_s - (local.get $5) - (i32.const -1) - ) - (block - (local.set $17 - (i32.eqz - (local.get $21) - ) - ) - (local.set $6 - (local.get $12) - ) - (local.set $7 - (local.get $5) - ) - (loop $while-in114 - (if - (i32.eq - (local.tee $5 - (call $_fmt_u - (i32.load - (local.get $6) - ) - (i32.const 0) - (local.get $30) - ) - ) - (local.get $30) - ) - (block - (i32.store8 - (local.get $35) - (i32.const 48) - ) - (local.set $5 - (local.get $35) - ) - ) - ) - (block $do-once115 - (if - (i32.eq - (local.get $6) - (local.get $12) - ) - (block - (if - (i32.eqz - (i32.and + (then + (loop $while-in110 + (if + (i32.gt_u + (local.tee $6 + (call $_fmt_u (i32.load - (local.get $0) + (local.get $7) ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $5) - (i32.const 1) - (local.get $0) + (i32.const 0) + (local.get $30) ) ) + (local.get $22) ) - (local.set $5 - (i32.add - (local.get $5) - (i32.const 1) - ) - ) - (br_if $do-once115 - (i32.and - (local.get $17) - (i32.lt_s - (local.get $7) - (i32.const 1) + (then + (loop $while-in112 + (i32.store8 + (local.tee $6 + (i32.add + (local.get $6) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in112 + (i32.gt_u + (local.get $6) + (local.get $22) + ) ) ) ) - (br_if $do-once115 + ) + (if + (i32.eqz (i32.and (i32.load (local.get $0) @@ -13041,256 +13549,444 @@ (i32.const 32) ) ) - (drop - (call $___fwritex - (i32.const 4143) - (i32.const 1) - (local.get $0) + (then + (drop + (call $___fwritex + (local.get $6) + (select + (i32.const 9) + (local.get $5) + (i32.gt_s + (local.get $5) + (i32.const 9) + ) + ) + (local.get $0) + ) ) ) ) - (block - (br_if $do-once115 - (i32.le_u + (local.set $6 + (i32.add + (local.get $5) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s (local.get $5) - (local.get $22) + (i32.const 9) ) - ) - (loop $while-in118 - (i32.store8 - (local.tee $5 + (i32.lt_u + (local.tee $7 (i32.add - (local.get $5) - (i32.const -1) + (local.get $7) + (i32.const 4) ) ) - (i32.const 48) + (local.get $9) ) - (br_if $while-in118 - (i32.gt_u - (local.get $5) - (local.get $22) + ) + (then + (block + (local.set $5 + (local.get $6) ) + (br $while-in110) + ) + ) + (else + (local.set $5 + (local.get $6) ) ) ) ) ) - (local.set $8 - (i32.sub - (local.get $43) - (local.get $5) + ) + (call $_pad + (local.get $0) + (i32.const 48) + (i32.add + (local.get $5) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + ) + (else + (block + (local.set $9 + (select + (local.get $9) + (i32.add + (local.get $12) + (i32.const 4) ) + (local.get $24) ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) + ) + (if + (i32.gt_s + (local.get $5) + (i32.const -1) + ) + (then + (block + (local.set $17 + (i32.eqz + (local.get $21) ) - (i32.const 32) ) - ) - (drop - (call $___fwritex + (local.set $6 + (local.get $12) + ) + (local.set $7 (local.get $5) - (select - (local.get $8) - (local.get $7) - (i32.gt_s - (local.get $7) - (local.get $8) + ) + (loop $while-in114 + (if + (i32.eq + (local.tee $5 + (call $_fmt_u + (i32.load + (local.get $6) + ) + (i32.const 0) + (local.get $30) + ) + ) + (local.get $30) + ) + (then + (block + (i32.store8 + (local.get $35) + (i32.const 48) + ) + (local.set $5 + (local.get $35) + ) + ) ) ) - (local.get $0) - ) - ) - ) - (br_if $while-in114 - (i32.and - (i32.lt_u - (local.tee $6 - (i32.add - (local.get $6) - (i32.const 4) + (block $do-once115 + (if + (i32.eq + (local.get $6) + (local.get $12) + ) + (then + (block + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $5) + (i32.const 1) + (local.get $0) + ) + ) + ) + ) + (local.set $5 + (i32.add + (local.get $5) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (local.get $17) + (i32.lt_s + (local.get $7) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 4143) + (i32.const 1) + (local.get $0) + ) + ) + ) + ) + (else + (block + (br_if $do-once115 + (i32.le_u + (local.get $5) + (local.get $22) + ) + ) + (loop $while-in118 + (i32.store8 + (local.tee $5 + (i32.add + (local.get $5) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in118 + (i32.gt_u + (local.get $5) + (local.get $22) + ) + ) + ) + ) + ) ) ) - (local.get $9) - ) - (i32.gt_s - (local.tee $7 + (local.set $8 (i32.sub - (local.get $7) - (local.get $8) + (local.get $43) + (local.get $5) ) ) - (i32.const -1) - ) - ) - ) - (local.set $5 - (local.get $7) - ) - ) - ) - ) - (call $_pad - (local.get $0) - (i32.const 48) - (i32.add - (local.get $5) - (i32.const 18) - ) - (i32.const 18) - (i32.const 0) - ) - (br_if $do-once99 - (i32.and - (i32.load - (local.get $0) - ) - (i32.const 32) - ) - ) - (drop - (call $___fwritex - (local.get $18) - (i32.sub - (local.get $28) - (local.get $18) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $5) + (select + (local.get $8) + (local.get $7) + (i32.gt_s + (local.get $7) + (local.get $8) + ) + ) + (local.get $0) + ) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (local.tee $6 + (i32.add + (local.get $6) + (i32.const 4) + ) + ) + (local.get $9) + ) + (i32.gt_s + (local.tee $7 + (i32.sub + (local.get $7) + (local.get $8) + ) + ) + (i32.const -1) + ) + ) + ) + (local.set $5 + (local.get $7) + ) + ) + ) + ) + ) + (call $_pad + (local.get $0) + (i32.const 48) + (i32.add + (local.get $5) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (local.get $18) + (i32.sub + (local.get $28) + (local.get $18) + ) + (local.get $0) + ) ) - (local.get $0) ) ) ) ) - ) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (local.get $13) - (i32.xor - (local.get $11) - (i32.const 8192) - ) - ) - (select - (local.get $14) - (local.get $13) - (i32.lt_s + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) (local.get $13) + (i32.xor + (local.get $11) + (i32.const 8192) + ) + ) + (select (local.get $14) + (local.get $13) + (i32.lt_s + (local.get $13) + (local.get $14) + ) ) ) ) - (block (result i32) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (local.tee $7 - (i32.add - (local.tee $9 - (select - (i32.const 0) - (local.get $27) - (local.tee $6 - (i32.or - (f64.ne - (local.get $15) - (local.get $15) + (else + (block (result i32) + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) + (local.tee $7 + (i32.add + (local.tee $9 + (select + (i32.const 0) + (local.get $27) + (local.tee $6 + (i32.or + (f64.ne + (local.get $15) + (local.get $15) + ) + (i32.const 0) ) - (i32.const 0) ) ) ) + (i32.const 3) ) - (i32.const 3) ) + (local.get $8) ) - (local.get $8) - ) - (if - (i32.eqz - (i32.and - (local.tee $5 - (i32.load - (local.get $0) + (if + (i32.eqz + (i32.and + (local.tee $5 + (i32.load + (local.get $0) + ) ) - ) - (i32.const 32) - ) - ) - (block - (drop - (call $___fwritex - (local.get $31) - (local.get $9) - (local.get $0) + (i32.const 32) ) ) - (local.set $5 - (i32.load - (local.get $0) + (then + (block + (drop + (call $___fwritex + (local.get $31) + (local.get $9) + (local.get $0) + ) + ) + (local.set $5 + (i32.load + (local.get $0) + ) + ) ) ) ) - ) - (local.set $6 - (select + (local.set $6 (select - (i32.const 4135) - (i32.const 4139) - (local.tee $8 - (i32.ne - (i32.and - (local.get $18) - (i32.const 32) + (select + (i32.const 4135) + (i32.const 4139) + (local.tee $8 + (i32.ne + (i32.and + (local.get $18) + (i32.const 32) + ) + (i32.const 0) ) - (i32.const 0) ) ) + (select + (i32.const 4127) + (i32.const 4131) + (local.get $8) + ) + (local.get $6) ) - (select - (i32.const 4127) - (i32.const 4131) - (local.get $8) - ) - (local.get $6) ) - ) - (if - (i32.eqz - (i32.and - (local.get $5) - (i32.const 32) + (if + (i32.eqz + (i32.and + (local.get $5) + (i32.const 32) + ) ) - ) - (drop - (call $___fwritex - (local.get $6) - (i32.const 3) - (local.get $0) + (then + (drop + (call $___fwritex + (local.get $6) + (i32.const 3) + (local.get $0) + ) + ) ) ) - ) - (call $_pad - (local.get $0) - (i32.const 32) - (local.get $14) - (local.get $7) - (i32.xor - (local.get $11) - (i32.const 8192) - ) - ) - (select - (local.get $14) - (local.get $7) - (i32.lt_s + (call $_pad + (local.get $0) + (i32.const 32) + (local.get $14) (local.get $7) + (i32.xor + (local.get $11) + (i32.const 8192) + ) + ) + (select (local.get $14) + (local.get $7) + (i32.lt_s + (local.get $7) + (local.get $14) + ) ) ) ) @@ -13346,115 +14042,123 @@ ) ) ) - (block - (local.set $5 - (local.get $26) - ) - (local.set $8 - (i32.const 0) - ) - (local.set $9 - (i32.const 4091) + (then + (block + (local.set $5 + (local.get $26) + ) + (local.set $8 + (i32.const 0) + ) + (local.set $9 + (i32.const 4091) + ) + (br $__rjti$8) ) - (br $__rjti$8) ) - (block - (local.set $5 - (local.get $8) - ) - (local.set $8 - (local.get $26) - ) - (loop $while-in123 - (i32.store8 - (local.tee $8 - (i32.add - (local.get $8) - (i32.const -1) - ) - ) - (i32.or - (i32.load8_u + (else + (block + (local.set $5 + (local.get $8) + ) + (local.set $8 + (local.get $26) + ) + (loop $while-in123 + (i32.store8 + (local.tee $8 (i32.add - (i32.and - (local.get $5) - (i32.const 15) - ) - (i32.const 4075) + (local.get $8) + (i32.const -1) ) ) - (local.get $9) - ) - ) - (br_if $while-in123 - (i32.eqz - (i32.and - (i32.eqz - (local.tee $5 - (call $_bitshift64Lshr + (i32.or + (i32.load8_u + (i32.add + (i32.and (local.get $5) - (local.get $11) - (i32.const 4) + (i32.const 15) ) + (i32.const 4075) ) ) - (i32.eqz - (local.tee $11 - (global.get $tempRet0) - ) - ) + (local.get $9) ) ) - ) - (local.set $5 - (local.get $8) - ) - ) - (local.set $8 - (if (result i32) - (i32.or + (br_if $while-in123 (i32.eqz (i32.and - (local.get $7) - (i32.const 8) - ) - ) - (i32.and - (i32.eqz - (i32.load + (i32.eqz + (local.tee $5 + (call $_bitshift64Lshr + (local.get $5) + (local.get $11) + (i32.const 4) + ) + ) + ) + (i32.eqz (local.tee $11 - (local.get $19) + (global.get $tempRet0) ) ) ) + ) + ) + (local.set $5 + (local.get $8) + ) + ) + (local.set $8 + (if (result i32) + (i32.or (i32.eqz - (i32.load offset=4 - (local.get $11) + (i32.and + (local.get $7) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (local.tee $11 + (local.get $19) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (local.get $11) + ) ) ) ) - ) - (block (result i32) - (local.set $9 - (i32.const 4091) + (then + (block (result i32) + (local.set $9 + (i32.const 4091) + ) + (i32.const 0) + ) ) - (i32.const 0) - ) - (block (result i32) - (local.set $9 - (i32.add - (i32.shr_s - (local.get $18) - (i32.const 4) + (else + (block (result i32) + (local.set $9 + (i32.add + (i32.shr_s + (local.get $18) + (i32.const 4) + ) + (i32.const 4091) + ) ) - (i32.const 4091) + (i32.const 2) ) ) - (i32.const 2) ) ) + (br $__rjti$8) ) - (br $__rjti$8) ) ) ) @@ -13580,11 +14284,13 @@ (local.get $7) (i32.const 0) ) - (block - (local.set $16 - (i32.const -1) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L1) ) - (br $label$break$L1) ) ) (call $_pad @@ -13596,89 +14302,99 @@ ) (if (local.get $5) - (block - (local.set $6 - (i32.const 0) - ) - (local.set $7 - (i32.load - (local.get $19) + (then + (block + (local.set $6 + (i32.const 0) ) - ) - (loop $while-in127 - (if - (i32.eqz - (local.tee $8 - (i32.load - (local.get $7) + (local.set $7 + (i32.load + (local.get $19) + ) + ) + (loop $while-in127 + (if + (i32.eqz + (local.tee $8 + (i32.load + (local.get $7) + ) ) ) - ) - (block - (local.set $7 - (local.get $5) + (then + (block + (local.set $7 + (local.get $5) + ) + (br $__rjti$7) + ) ) - (br $__rjti$7) ) - ) - (if - (i32.gt_s - (local.tee $6 - (i32.add - (local.tee $8 - (call $_wctomb - (local.get $36) - (local.get $8) + (if + (i32.gt_s + (local.tee $6 + (i32.add + (local.tee $8 + (call $_wctomb + (local.get $36) + (local.get $8) + ) ) + (local.get $6) ) - (local.get $6) ) - ) - (local.get $5) - ) - (block - (local.set $7 (local.get $5) ) - (br $__rjti$7) + (then + (block + (local.set $7 + (local.get $5) + ) + (br $__rjti$7) + ) + ) ) - ) - (if - (i32.eqz - (i32.and - (i32.load - (local.get $0) + (if + (i32.eqz + (i32.and + (i32.load + (local.get $0) + ) + (i32.const 32) + ) + ) + (then + (drop + (call $___fwritex + (local.get $36) + (local.get $8) + (local.get $0) + ) ) - (i32.const 32) ) ) - (drop - (call $___fwritex - (local.get $36) - (local.get $8) - (local.get $0) + (local.set $7 + (i32.add + (local.get $7) + (i32.const 4) ) ) - ) - (local.set $7 - (i32.add - (local.get $7) - (i32.const 4) + (br_if $while-in127 + (i32.lt_u + (local.get $6) + (local.get $5) + ) ) - ) - (br_if $while-in127 - (i32.lt_u - (local.get $6) + (local.set $7 (local.get $5) ) ) - (local.set $7 - (local.get $5) - ) ) ) - (local.set $7 - (i32.const 0) + (else + (local.set $7 + (i32.const 0) + ) ) ) ) @@ -13743,38 +14459,42 @@ ) ) ) - (block (result i32) - (local.set $7 - (local.get $5) - ) - (select - (local.get $6) - (local.tee $5 - (i32.add - (i32.xor - (i32.and - (local.get $12) + (then + (block (result i32) + (local.set $7 + (local.get $5) + ) + (select + (local.get $6) + (local.tee $5 + (i32.add + (i32.xor + (i32.and + (local.get $12) + (i32.const 1) + ) (i32.const 1) ) - (i32.const 1) - ) - (i32.sub - (local.get $39) - (local.get $5) + (i32.sub + (local.get $39) + (local.get $5) + ) ) ) - ) - (i32.gt_s - (local.get $6) - (local.get $5) + (i32.gt_s + (local.get $6) + (local.get $5) + ) ) ) ) - (block (result i32) - (local.set $7 - (local.get $26) + (else + (block (result i32) + (local.set $7 + (local.get $26) + ) + (i32.const 0) ) - (i32.const 0) ) ) ) @@ -13825,11 +14545,13 @@ (i32.const 32) ) ) - (drop - (call $___fwritex - (local.get $9) - (local.get $8) - (local.get $0) + (then + (drop + (call $___fwritex + (local.get $9) + (local.get $8) + (local.get $0) + ) ) ) ) @@ -13859,11 +14581,13 @@ (i32.const 32) ) ) - (drop - (call $___fwritex - (local.get $7) - (local.get $13) - (local.get $0) + (then + (drop + (call $___fwritex + (local.get $7) + (local.get $13) + (local.get $0) + ) ) ) ) @@ -13892,101 +14616,115 @@ (i32.eqz (local.get $0) ) - (if - (local.get $1) - (block - (local.set $0 - (i32.const 1) - ) - (loop $while-in130 - (if - (local.tee $1 - (i32.load - (i32.add - (local.get $4) - (i32.shl - (local.get $0) - (i32.const 2) - ) - ) - ) + (then + (if + (local.get $1) + (then + (block + (local.set $0 + (i32.const 1) ) - (block - (call $_pop_arg_336 - (i32.add - (local.get $3) - (i32.shl - (local.get $0) - (i32.const 3) + (loop $while-in130 + (if + (local.tee $1 + (i32.load + (i32.add + (local.get $4) + (i32.shl + (local.get $0) + (i32.const 2) + ) + ) ) ) - (local.get $1) - (local.get $2) - ) - (br_if $while-in130 - (i32.lt_s - (local.tee $0 - (i32.add - (local.get $0) + (then + (block + (call $_pop_arg_336 + (i32.add + (local.get $3) + (i32.shl + (local.get $0) + (i32.const 3) + ) + ) + (local.get $1) + (local.get $2) + ) + (br_if $while-in130 + (i32.lt_s + (local.tee $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (local.set $16 (i32.const 1) ) + (br $label$break$L343) ) - (i32.const 10) ) ) - (local.set $16 - (i32.const 1) - ) - (br $label$break$L343) ) - ) - ) - (if - (i32.lt_s - (local.get $0) - (i32.const 10) - ) - (loop $while-in132 (if - (i32.load - (i32.add - (local.get $4) - (i32.shl - (local.get $0) - (i32.const 2) + (i32.lt_s + (local.get $0) + (i32.const 10) + ) + (then + (loop $while-in132 + (if + (i32.load + (i32.add + (local.get $4) + (i32.shl + (local.get $0) + (i32.const 2) + ) + ) + ) + (then + (block + (local.set $16 + (i32.const -1) + ) + (br $label$break$L343) + ) + ) + ) + (br_if $while-in132 + (i32.lt_s + (local.tee $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (local.set $16 + (i32.const 1) ) ) ) - (block + (else (local.set $16 - (i32.const -1) - ) - (br $label$break$L343) - ) - ) - (br_if $while-in132 - (i32.lt_s - (local.tee $0 - (i32.add - (local.get $0) - (i32.const 1) - ) + (i32.const 1) ) - (i32.const 10) ) ) - (local.set $16 - (i32.const 1) - ) ) + ) + (else (local.set $16 - (i32.const 1) + (i32.const 0) ) ) ) - (local.set $16 - (i32.const 0) - ) ) ) ) @@ -14005,27 +14743,56 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $switch-default - ;; CHECK-NEXT: (block $switch-case9 - ;; CHECK-NEXT: (block $switch-case8 - ;; CHECK-NEXT: (block $switch-case7 - ;; CHECK-NEXT: (block $switch-case6 - ;; CHECK-NEXT: (block $switch-case5 - ;; CHECK-NEXT: (block $switch-case4 - ;; CHECK-NEXT: (block $switch-case3 - ;; CHECK-NEXT: (block $switch-case2 - ;; CHECK-NEXT: (block $switch-case1 - ;; CHECK-NEXT: (block $switch-case - ;; CHECK-NEXT: (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default - ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $switch-default + ;; CHECK-NEXT: (block $switch-case9 + ;; CHECK-NEXT: (block $switch-case8 + ;; CHECK-NEXT: (block $switch-case7 + ;; CHECK-NEXT: (block $switch-case6 + ;; CHECK-NEXT: (block $switch-case5 + ;; CHECK-NEXT: (block $switch-case4 + ;; CHECK-NEXT: (block $switch-case3 + ;; CHECK-NEXT: (block $switch-case2 + ;; CHECK-NEXT: (block $switch-case1 + ;; CHECK-NEXT: (block $switch-case + ;; CHECK-NEXT: (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load @@ -14041,19 +14808,32 @@ ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load @@ -14069,97 +14849,108 @@ ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 65535) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) @@ -14187,31 +14978,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 65535) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 65535) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) @@ -14239,14 +15013,31 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 65535) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 255) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.lt_s + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) @@ -14274,45 +15065,28 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 255) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 24) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 24) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.shr_s - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.lt_s - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (f64.load ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -4) + ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14321,19 +15095,12 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 255) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (f64.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L1) ;; CHECK-NEXT: ) @@ -14363,33 +15130,6 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (f64.load - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14405,27 +15145,56 @@ (local.get $1) (i32.const 20) ) - (block $switch-default - (block $switch-case9 - (block $switch-case8 - (block $switch-case7 - (block $switch-case6 - (block $switch-case5 - (block $switch-case4 - (block $switch-case3 - (block $switch-case2 - (block $switch-case1 - (block $switch-case - (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default - (i32.sub + (then + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (local.get $1) + (i32.const 9) + ) + ) + ) + (local.set $3 + (i32.load + (local.tee $1 + (i32.and + (i32.add + (i32.load + (local.get $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (local.get $2) + (i32.add (local.get $1) - (i32.const 9) + (i32.const 4) ) ) + (i32.store + (local.get $0) + (local.get $3) + ) + (br $label$break$L1) ) - (local.set $3 + (local.set $1 (i32.load - (local.tee $1 + (local.tee $3 (i32.and (i32.add (i32.load @@ -14441,19 +15210,32 @@ (i32.store (local.get $2) (i32.add - (local.get $1) + (local.get $3) (i32.const 4) ) ) (i32.store (local.get $0) - (local.get $3) + (local.get $1) + ) + (i32.store offset=4 + (local.get $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (local.get $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) ) (br $label$break$L1) ) - (local.set $1 + (local.set $3 (i32.load - (local.tee $3 + (local.tee $1 (i32.and (i32.add (i32.load @@ -14469,97 +15251,108 @@ (i32.store (local.get $2) (i32.add - (local.get $3) + (local.get $1) (i32.const 4) ) ) (i32.store (local.get $0) - (local.get $1) + (local.get $3) ) (i32.store offset=4 (local.get $0) - (i32.shr_s - (i32.shl - (i32.lt_s - (local.get $1) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) + (i32.const 0) ) (br $label$break$L1) ) - (local.set $3 + (local.set $5 (i32.load - (local.tee $1 - (i32.and - (i32.add - (i32.load - (local.get $2) + (local.tee $3 + (local.tee $1 + (i32.and + (i32.add + (i32.load + (local.get $2) + ) + (i32.const 7) ) - (i32.const 3) + (i32.const -8) ) - (i32.const -4) ) ) ) ) + (local.set $3 + (i32.load offset=4 + (local.get $3) + ) + ) (i32.store (local.get $2) (i32.add (local.get $1) - (i32.const 4) + (i32.const 8) ) ) (i32.store (local.get $0) - (local.get $3) + (local.get $5) ) (i32.store offset=4 (local.get $0) - (i32.const 0) + (local.get $3) ) (br $label$break$L1) ) - (local.set $5 + (local.set $3 (i32.load - (local.tee $3 - (local.tee $1 - (i32.and - (i32.add - (i32.load - (local.get $2) - ) - (i32.const 7) + (local.tee $1 + (i32.and + (i32.add + (i32.load + (local.get $2) ) - (i32.const -8) + (i32.const 3) ) + (i32.const -4) ) ) ) ) - (local.set $3 - (i32.load offset=4 - (local.get $3) - ) - ) (i32.store (local.get $2) (i32.add (local.get $1) - (i32.const 8) + (i32.const 4) ) ) (i32.store (local.get $0) - (local.get $5) + (local.tee $1 + (i32.shr_s + (i32.shl + (i32.and + (local.get $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) ) (i32.store offset=4 (local.get $0) - (local.get $3) + (i32.shr_s + (i32.shl + (i32.lt_s + (local.get $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) ) (br $label$break$L1) ) @@ -14587,31 +15380,14 @@ ) (i32.store (local.get $0) - (local.tee $1 - (i32.shr_s - (i32.shl - (i32.and - (local.get $3) - (i32.const 65535) - ) - (i32.const 16) - ) - (i32.const 16) - ) + (i32.and + (local.get $3) + (i32.const 65535) ) ) (i32.store offset=4 (local.get $0) - (i32.shr_s - (i32.shl - (i32.lt_s - (local.get $1) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) + (i32.const 0) ) (br $label$break$L1) ) @@ -14639,14 +15415,31 @@ ) (i32.store (local.get $0) - (i32.and - (local.get $3) - (i32.const 65535) + (local.tee $1 + (i32.shr_s + (i32.shl + (i32.and + (local.get $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) ) ) (i32.store offset=4 (local.get $0) - (i32.const 0) + (i32.shr_s + (i32.shl + (i32.lt_s + (local.get $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) ) (br $label$break$L1) ) @@ -14674,45 +15467,28 @@ ) (i32.store (local.get $0) - (local.tee $1 - (i32.shr_s - (i32.shl - (i32.and - (local.get $3) - (i32.const 255) - ) - (i32.const 24) - ) - (i32.const 24) - ) + (i32.and + (local.get $3) + (i32.const 255) ) ) (i32.store offset=4 (local.get $0) - (i32.shr_s - (i32.shl - (i32.lt_s - (local.get $1) - (i32.const 0) - ) - (i32.const 31) - ) - (i32.const 31) - ) + (i32.const 0) ) (br $label$break$L1) ) - (local.set $3 - (i32.load + (local.set $4 + (f64.load (local.tee $1 (i32.and (i32.add (i32.load (local.get $2) ) - (i32.const 3) + (i32.const 7) ) - (i32.const -4) + (i32.const -8) ) ) ) @@ -14721,19 +15497,12 @@ (local.get $2) (i32.add (local.get $1) - (i32.const 4) - ) - ) - (i32.store - (local.get $0) - (i32.and - (local.get $3) - (i32.const 255) + (i32.const 8) ) ) - (i32.store offset=4 + (f64.store (local.get $0) - (i32.const 0) + (local.get $4) ) (br $label$break$L1) ) @@ -14763,33 +15532,6 @@ (local.get $0) (local.get $4) ) - (br $label$break$L1) - ) - (local.set $4 - (f64.load - (local.tee $1 - (i32.and - (i32.add - (i32.load - (local.get $2) - ) - (i32.const 7) - ) - (i32.const -8) - ) - ) - ) - ) - (i32.store - (local.get $2) - (i32.add - (local.get $1) - (i32.const 8) - ) - ) - (f64.store - (local.get $0) - (local.get $4) ) ) ) @@ -14798,81 +15540,85 @@ ;; CHECK: (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (loop $while-in - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (call $___uremdi3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (call $___uremdi3 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (call $___udivmoddi4 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (call $___udivmoddi4 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (global.get $tempRet0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (global.get $tempRet0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (loop $while-in1 - ;; CHECK-NEXT: (i32.store8 - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (loop $while-in1 + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 48) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.div_u ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 48) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.div_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14898,103 +15644,113 @@ ) ) ) - (loop $while-in - (i32.store8 - (local.tee $2 - (i32.add - (local.get $2) - (i32.const -1) + (then + (loop $while-in + (i32.store8 + (local.tee $2 + (i32.add + (local.get $2) + (i32.const -1) + ) ) - ) - (i32.or - (local.tee $3 - (call $___uremdi3 - (local.get $0) - (local.get $1) - (i32.const 10) - (i32.const 0) + (i32.or + (local.tee $3 + (call $___uremdi3 + (local.get $0) + (local.get $1) + (i32.const 10) + (i32.const 0) + ) ) + (i32.const 48) ) - (i32.const 48) - ) - ) - (local.set $3 - (call $___udivdi3 - (local.get $0) - (local.get $1) - (i32.const 10) - (i32.const 0) ) - ) - (local.set $4 - (global.get $tempRet0) - ) - (if - (i32.or - (i32.gt_u + (local.set $3 + (call $___udivdi3 + (local.get $0) (local.get $1) - (i32.const 9) + (i32.const 10) + (i32.const 0) ) - (i32.and - (i32.eq + ) + (local.set $4 + (global.get $tempRet0) + ) + (if + (i32.or + (i32.gt_u (local.get $1) (i32.const 9) ) - (i32.gt_u - (local.get $0) - (i32.const -1) + (i32.and + (i32.eq + (local.get $1) + (i32.const 9) + ) + (i32.gt_u + (local.get $0) + (i32.const -1) + ) ) ) - ) - (block - (local.set $0 - (local.get $3) + (then + (block + (local.set $0 + (local.get $3) + ) + (local.set $1 + (local.get $4) + ) + (br $while-in) + ) ) - (local.set $1 - (local.get $4) + (else + (local.set $0 + (local.get $3) + ) ) - (br $while-in) - ) - (local.set $0 - (local.get $3) ) ) ) ) (if (local.get $0) - (loop $while-in1 - (i32.store8 - (local.tee $2 - (i32.add - (local.get $2) - (i32.const -1) + (then + (loop $while-in1 + (i32.store8 + (local.tee $2 + (i32.add + (local.get $2) + (i32.const -1) + ) + ) + (i32.or + (call $i32u-rem + (local.get $0) + (i32.const 10) + ) + (i32.const 48) ) ) - (i32.or - (call $i32u-rem + (local.set $1 + (call $i32u-div (local.get $0) (i32.const 10) ) - (i32.const 48) - ) - ) - (local.set $1 - (call $i32u-div - (local.get $0) - (i32.const 10) - ) - ) - (if - (i32.ge_u - (local.get $0) - (i32.const 10) ) - (block - (local.set $0 - (local.get $1) + (if + (i32.ge_u + (local.get $0) + (i32.const 10) + ) + (then + (block + (local.set $0 + (local.get $1) + ) + (br $while-in1) + ) ) - (br $while-in1) ) ) ) @@ -15019,7 +15775,9 @@ ;; CHECK-NEXT: (global.get $STACKTOP) ;; CHECK-NEXT: (global.get $STACK_MAX) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (local.get $7) @@ -15038,7 +15796,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_memset ;; CHECK-NEXT: (local.get $6) @@ -15075,11 +15833,11 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $___fwritex ;; CHECK-NEXT: (local.get $6) @@ -15129,9 +15887,11 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br_if $do-once + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15167,7 +15927,9 @@ (global.get $STACKTOP) (global.get $STACK_MAX) ) - (call $abort) + (then + (call $abort) + ) ) (local.set $6 (local.get $7) @@ -15186,110 +15948,118 @@ ) ) ) - (block - (drop - (call $_memset - (local.get $6) - (local.get $1) - (select - (i32.const 256) - (local.tee $5 - (i32.sub - (local.get $2) - (local.get $3) - ) - ) - (i32.gt_u - (local.get $5) + (then + (block + (drop + (call $_memset + (local.get $6) + (local.get $1) + (select (i32.const 256) + (local.tee $5 + (i32.sub + (local.get $2) + (local.get $3) + ) + ) + (i32.gt_u + (local.get $5) + (i32.const 256) + ) ) ) ) - ) - (local.set $4 - (i32.eqz - (i32.and - (local.tee $1 - (i32.load - (local.get $0) + (local.set $4 + (i32.eqz + (i32.and + (local.tee $1 + (i32.load + (local.get $0) + ) ) + (i32.const 32) ) - (i32.const 32) ) ) - ) - (if - (i32.gt_u - (local.get $5) - (i32.const 255) - ) - (block - (loop $while-in - (if - (local.get $4) - (block - (drop - (call $___fwritex - (local.get $6) - (i32.const 256) - (local.get $0) + (if + (i32.gt_u + (local.get $5) + (i32.const 255) + ) + (then + (block + (loop $while-in + (if + (local.get $4) + (then + (block + (drop + (call $___fwritex + (local.get $6) + (i32.const 256) + (local.get $0) + ) + ) + (local.set $1 + (i32.load + (local.get $0) + ) + ) + ) ) ) - (local.set $1 - (i32.load - (local.get $0) + (local.set $4 + (i32.eqz + (i32.and + (local.get $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (local.tee $5 + (i32.add + (local.get $5) + (i32.const -256) + ) + ) + (i32.const 255) ) ) ) - ) - (local.set $4 - (i32.eqz - (i32.and - (local.get $1) - (i32.const 32) + (br_if $do-once + (i32.eqz + (local.get $4) ) ) - ) - (br_if $while-in - (i32.gt_u - (local.tee $5 - (i32.add - (local.get $5) - (i32.const -256) + (local.set $5 + (i32.and + (i32.sub + (local.get $2) + (local.get $3) ) + (i32.const 255) ) - (i32.const 255) ) ) ) - (br_if $do-once - (i32.eqz - (local.get $4) - ) - ) - (local.set $5 - (i32.and - (i32.sub - (local.get $2) - (local.get $3) + (else + (br_if $do-once + (i32.eqz + (local.get $4) ) - (i32.const 255) ) ) ) - (br_if $do-once - (i32.eqz - (local.get $4) + (drop + (call $___fwritex + (local.get $6) + (local.get $5) + (local.get $0) ) ) ) - (drop - (call $___fwritex - (local.get $6) - (local.get $5) - (local.get $0) - ) - ) ) ) ) @@ -15323,7 +16093,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 245) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.tee $5 @@ -15358,7 +16128,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.tee $1 @@ -15402,20 +16172,22 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 176) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 176) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $10) @@ -15423,7 +16195,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -15437,7 +16211,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $2) @@ -15447,7 +16221,9 @@ ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15494,10 +16270,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $10 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u @@ -15641,7 +16417,7 @@ ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and @@ -15659,7 +16435,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $9) @@ -15667,7 +16443,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -15681,7 +16459,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $10) @@ -15696,7 +16474,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15736,7 +16516,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $12 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) @@ -15770,33 +16550,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or @@ -15852,7 +16636,7 @@ ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u @@ -15977,23 +16761,25 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load offset=20 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load offset=20 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-out) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $10 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $10 @@ -16041,7 +16827,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u @@ -16053,7 +16841,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.load offset=24 @@ -16070,7 +16860,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 @@ -16084,24 +16874,26 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16117,7 +16909,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -16138,7 +16930,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -16154,8 +16946,10 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) @@ -16166,7 +16960,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $7 @@ -16176,7 +16970,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -16190,7 +16986,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -16204,7 +17002,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) @@ -16217,7 +17015,9 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16225,7 +17025,7 @@ ;; CHECK-NEXT: (block $do-once8 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) @@ -16245,7 +17045,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) @@ -16254,7 +17054,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and @@ -16274,7 +17074,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $8) @@ -16282,7 +17082,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -16296,13 +17098,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once8 @@ -16321,7 +17127,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $9) @@ -16333,20 +17141,24 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=16 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=16 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16357,22 +17169,26 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16385,7 +17201,7 @@ ;; CHECK-NEXT: (local.get $10) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or @@ -16416,7 +17232,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.or @@ -16444,7 +17260,7 @@ ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) @@ -16478,33 +17294,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or @@ -16558,252 +17378,270 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const -65) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const -65) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $18 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 8) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $18 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $14 ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 16777215) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.gt_u ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 14) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: (i32.const 16777215) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 14) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 245760) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $__rjto$3 - ;; CHECK-NEXT: (block $__rjti$3 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load offset=480 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (block $__rjto$3 + ;; CHECK-NEXT: (block $__rjti$3 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load offset=480 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 25) - ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 25) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $14) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in14 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.tee $9 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (loop $while-in14 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.tee $9 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjti$3) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $__rjti$3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.load offset=20 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.load offset=20 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.tee $9 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.tee $9 + ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16811,134 +17649,148 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in14) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in14) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $18) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 12) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.load offset=480 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.load offset=480 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.tee $4 ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.and @@ -16949,9 +17801,9 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -16966,887 +17818,814 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $__rjti$3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjti$3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $__rjto$3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjto$3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in16 - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (loop $while-in16 + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.load offset=16 + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (select ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.load offset=16 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-in16 - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.load offset=20 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (br_if $while-in16 + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.load offset=20 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 184) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.tee $12 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.tee $6 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.load offset=24 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once17 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load offset=12 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.tee $12 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once17) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (loop $while-in20 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in20) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.tee $6 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $10 - ;; CHECK-NEXT: (i32.load offset=8 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.load offset=24 + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block $do-once17 ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load offset=12 + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $10) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $11 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once21 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load offset=28 - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 480) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once17) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 180) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: (loop $while-in20 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once21) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.tee $10 + ;; CHECK-NEXT: (i32.load offset=8 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $do-once21 - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block $do-once21 ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load offset=16 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=16 - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load offset=20 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $do-once25 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load offset=28 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 480) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 256) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 216) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 176) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once21) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $do-once21 + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load offset=16 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=16 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 176) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load offset=20 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block $do-once25 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $5 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $13) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=12 - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=8 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=12 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once25) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 256) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 216) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 176) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 176) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 16777215) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=12 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=12 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once25) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (local.tee $0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 14) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16777215) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 14) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 520192) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 245760) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 245760) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 480) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 480) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=28 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.store offset=28 ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 180) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 180) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=12 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=8 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once25) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 25) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $__rjto$1 - ;; CHECK-NEXT: (block $__rjti$1 - ;; CHECK-NEXT: (loop $while-in28 - ;; CHECK-NEXT: (br_if $__rjti$1 - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $7 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 16) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 180) + ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-in28) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $6) @@ -17859,79 +18638,194 @@ ;; CHECK-NEXT: (br $do-once25) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjto$1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 8) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 25) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 31) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=12 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=8 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=12 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block $__rjto$1 + ;; CHECK-NEXT: (block $__rjti$1 + ;; CHECK-NEXT: (loop $while-in28 + ;; CHECK-NEXT: (br_if $__rjti$1 + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $7 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-in28) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=12 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once25) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $__rjto$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.ge_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store offset=12 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=12 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -17946,7 +18840,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 196) @@ -17962,7 +18856,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 15) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: (local.tee $1 @@ -17998,7 +18892,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (i32.const 0) @@ -18057,54 +18951,58 @@ ;; CHECK-NEXT: (i32.const 648) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (call $_sysconf - ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (call $_sysconf + ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 656) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 652) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 660) - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 664) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 668) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 620) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 648) - ;; CHECK-NEXT: (i32.xor - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (call $_time - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 656) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 652) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 660) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 664) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 668) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 620) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 648) + ;; CHECK-NEXT: (i32.xor + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (call $_time + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -16) + ;; CHECK-NEXT: (i32.const 1431655768) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1431655768) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18139,8 +19037,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if @@ -18149,29 +19049,33 @@ ;; CHECK-NEXT: (i32.const 616) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 608) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.le_u + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 608) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $11 @@ -18191,7 +19095,7 @@ ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (block $label$break$L279 ;; CHECK-NEXT: (block $__rjti$5 ;; CHECK-NEXT: (block $__rjti$4 @@ -18218,26 +19122,28 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $while-out33) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $while-out33) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18266,33 +19172,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (call $_sbrk - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (call $_sbrk + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $__rjti$13 - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $__rjti$13 + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__rjti$5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18307,7 +19217,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.and @@ -18325,23 +19235,27 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $9 @@ -18365,22 +19279,24 @@ ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.tee $2 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (i32.const 616) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $label$break$L279 - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $9) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $label$break$L279 + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.le_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18428,65 +19344,75 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 656) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 656) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2147483647) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eq - ;; CHECK-NEXT: (call $_sbrk - ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $_sbrk - ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eq + ;; CHECK-NEXT: (call $_sbrk + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $_sbrk + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $label$break$L279) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$break$L279) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -18510,42 +19436,46 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (call $_sbrk - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (call $_sbrk + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (call $_sbrk - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (call $_sbrk + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ne - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const -1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $__rjti$13 - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.ne + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 40) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $__rjti$13 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 40) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18571,9 +19501,11 @@ ;; CHECK-NEXT: (i32.const 612) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 612) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 612) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block $do-once40 @@ -18583,7 +19515,7 @@ ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.const 624) ;; CHECK-NEXT: ) @@ -18631,91 +19563,93 @@ ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.ge_u - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $11) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 188) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 188) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 200) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 188) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=4 - ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.store offset=4 ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 40) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 204) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 664) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 40) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 204) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 664) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once40) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -18729,7 +19663,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: (local.get $1) @@ -18758,7 +19692,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -18785,10 +19719,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.const 624) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.const 624) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $1) @@ -18881,7 +19817,7 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $0 @@ -18905,7 +19841,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $5) @@ -18913,7 +19849,7 @@ ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.tee $0 @@ -18962,7 +19898,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $11 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) @@ -18981,7 +19917,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $5) @@ -19005,13 +19941,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once51 ;; CHECK-NEXT: (i32.eq @@ -19030,7 +19968,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and @@ -19055,19 +19993,23 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $15 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -19081,7 +20023,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $15 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -19101,7 +20043,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $5) @@ -19117,7 +20059,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $1 @@ -19136,20 +20078,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $12 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once55) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once55) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19165,7 +20111,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) @@ -19186,7 +20132,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) @@ -19202,8 +20148,10 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) @@ -19214,7 +20162,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $2 @@ -19224,7 +20172,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -19238,7 +20188,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -19252,7 +20204,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (local.get $0) @@ -19265,7 +20217,9 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19295,7 +20249,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $12) @@ -19320,7 +20274,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $label$break$L331) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) @@ -19328,7 +20282,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -19342,13 +20298,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $label$break$L331 @@ -19368,7 +20328,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $12) @@ -19385,20 +20347,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=16 - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=16 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19419,8 +20385,10 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store offset=20 ;; CHECK-NEXT: (local.get $12) ;; CHECK-NEXT: (local.get $0) @@ -19445,7 +20413,9 @@ ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 4) @@ -19483,7 +20453,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl @@ -19508,7 +20478,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ge_u ;; CHECK-NEXT: (local.tee $0 @@ -19525,7 +20495,7 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $16 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -19537,7 +20507,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or @@ -19588,7 +20558,7 @@ ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (br_if $do-once65 ;; CHECK-NEXT: (i32.const 31) @@ -19678,7 +20648,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19720,7 +20692,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or @@ -19811,7 +20783,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) @@ -19829,8 +20801,10 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) @@ -19876,7 +20850,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) @@ -19898,7 +20872,9 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19924,17 +20900,19 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $while-out69 - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.load offset=4 - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $while-out69 + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -20136,7 +21114,7 @@ ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.and @@ -20173,7 +21151,7 @@ ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl @@ -20197,33 +21175,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $17 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $7 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or @@ -20272,93 +21254,101 @@ ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.const 16777215) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16777215) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 14) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.tee $2 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 14) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.tee $2 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 520192) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 245760) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) @@ -20394,7 +21384,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or @@ -20485,7 +21475,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) @@ -20503,8 +21493,10 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) @@ -20550,7 +21542,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) @@ -20572,13 +21564,15 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.eqz @@ -20593,9 +21587,11 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store @@ -20802,198 +21798,220 @@ (local.get $0) (i32.const 245) ) - (block - (if - (i32.and - (local.tee $5 - (i32.shr_u - (local.tee $11 - (i32.load - (i32.const 176) + (then + (block + (if + (i32.and + (local.tee $5 + (i32.shr_u + (local.tee $11 + (i32.load + (i32.const 176) + ) ) - ) - (local.tee $13 - (i32.shr_u - (local.tee $4 - (select - (i32.const 16) - (i32.and - (i32.add + (local.tee $13 + (i32.shr_u + (local.tee $4 + (select + (i32.const 16) + (i32.and + (i32.add + (local.get $0) + (i32.const 11) + ) + (i32.const -8) + ) + (i32.lt_u (local.get $0) (i32.const 11) ) - (i32.const -8) - ) - (i32.lt_u - (local.get $0) - (i32.const 11) ) ) + (i32.const 3) ) - (i32.const 3) ) ) ) + (i32.const 3) ) - (i32.const 3) - ) - (block - (local.set $10 - (i32.load - (local.tee $1 - (i32.add - (local.tee $7 - (i32.load - (local.tee $3 - (i32.add - (local.tee $2 + (then + (block + (local.set $10 + (i32.load + (local.tee $1 + (i32.add + (local.tee $7 + (i32.load + (local.tee $3 (i32.add - (i32.shl - (local.tee $4 - (i32.add - (i32.xor - (i32.and - (local.get $5) - (i32.const 1) + (local.tee $2 + (i32.add + (i32.shl + (local.tee $4 + (i32.add + (i32.xor + (i32.and + (local.get $5) + (i32.const 1) + ) + (i32.const 1) + ) + (local.get $13) ) - (i32.const 1) ) - (local.get $13) + (i32.const 3) ) + (i32.const 216) ) - (i32.const 3) ) - (i32.const 216) + (i32.const 8) ) ) - (i32.const 8) ) ) + (i32.const 8) ) ) - (i32.const 8) ) ) - ) - ) - (if - (i32.eq - (local.get $2) - (local.get $10) - ) - (i32.store - (i32.const 176) - (i32.and - (local.get $11) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $4) - ) - (i32.const -1) - ) - ) - ) - (block (if - (i32.lt_u + (i32.eq + (local.get $2) (local.get $10) - (i32.load - (i32.const 192) - ) ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $10) - (i32.const 12) + (then + (i32.store + (i32.const 176) + (i32.and + (local.get $11) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $4) + ) + (i32.const -1) ) ) ) - (local.get $7) ) - (block - (i32.store - (local.get $0) - (local.get $2) - ) - (i32.store - (local.get $3) - (local.get $10) + (else + (block + (if + (i32.lt_u + (local.get $10) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $10) + (i32.const 12) + ) + ) + ) + (local.get $7) + ) + (then + (block + (i32.store + (local.get $0) + (local.get $2) + ) + (i32.store + (local.get $3) + (local.get $10) + ) + ) + ) + (else + (call $_abort) + ) + ) ) ) - (call $_abort) ) - ) - ) - (i32.store offset=4 - (local.get $7) - (i32.or - (local.tee $0 - (i32.shl - (local.get $4) + (i32.store offset=4 + (local.get $7) + (i32.or + (local.tee $0 + (i32.shl + (local.get $4) + (i32.const 3) + ) + ) (i32.const 3) ) ) - (i32.const 3) - ) - ) - (i32.store - (local.tee $0 - (i32.add - (i32.add - (local.get $7) - (local.get $0) + (i32.store + (local.tee $0 + (i32.add + (i32.add + (local.get $7) + (local.get $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (local.get $0) + ) + (i32.const 1) ) - (i32.const 4) ) - ) - (i32.or - (i32.load - (local.get $0) + (return + (local.get $1) ) - (i32.const 1) ) ) - (return - (local.get $1) - ) ) - ) - (if - (i32.gt_u - (local.get $4) - (local.tee $0 - (i32.load - (i32.const 184) + (if + (i32.gt_u + (local.get $4) + (local.tee $0 + (i32.load + (i32.const 184) + ) ) ) - ) - (block - (if - (local.get $5) + (then (block - (local.set $10 - (i32.and - (i32.shr_u - (local.tee $3 - (i32.add - (i32.and + (if + (local.get $5) + (then + (block + (local.set $10 + (i32.and + (i32.shr_u (local.tee $3 - (i32.and - (i32.shl - (local.get $5) - (local.get $13) - ) - (i32.or + (i32.add + (i32.and (local.tee $3 - (i32.shl - (i32.const 2) - (local.get $13) + (i32.and + (i32.shl + (local.get $5) + (local.get $13) + ) + (i32.or + (local.tee $3 + (i32.shl + (i32.const 2) + (local.get $13) + ) + ) + (i32.sub + (i32.const 0) + (local.get $3) + ) + ) ) ) (i32.sub @@ -21001,2416 +22019,2652 @@ (local.get $3) ) ) + (i32.const -1) ) ) - (i32.sub - (i32.const 0) - (local.get $3) - ) + (i32.const 12) ) - (i32.const -1) + (i32.const 16) ) ) - (i32.const 12) - ) - (i32.const 16) - ) - ) - (local.set $9 - (i32.load - (local.tee $7 - (i32.add - (local.tee $12 - (i32.load - (local.tee $3 - (i32.add - (local.tee $10 - (i32.add - (i32.shl - (local.tee $5 + (local.set $9 + (i32.load + (local.tee $7 + (i32.add + (local.tee $12 + (i32.load + (local.tee $3 + (i32.add + (local.tee $10 (i32.add - (i32.or - (i32.or - (i32.or + (i32.shl + (local.tee $5 + (i32.add (i32.or - (local.tee $3 - (i32.and - (i32.shr_u - (local.tee $7 - (i32.shr_u - (local.get $3) - (local.get $10) + (i32.or + (i32.or + (i32.or + (local.tee $3 + (i32.and + (i32.shr_u + (local.tee $7 + (i32.shr_u + (local.get $3) + (local.get $10) + ) + ) + (i32.const 5) + ) + (i32.const 8) ) ) - (i32.const 5) + (local.get $10) ) - (i32.const 8) - ) - ) - (local.get $10) - ) - (local.tee $3 - (i32.and - (i32.shr_u - (local.tee $7 - (i32.shr_u - (local.get $7) - (local.get $3) + (local.tee $3 + (i32.and + (i32.shr_u + (local.tee $7 + (i32.shr_u + (local.get $7) + (local.get $3) + ) + ) + (i32.const 2) + ) + (i32.const 4) ) ) - (i32.const 2) ) - (i32.const 4) + (local.tee $3 + (i32.and + (i32.shr_u + (local.tee $7 + (i32.shr_u + (local.get $7) + (local.get $3) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) ) - ) - ) - (local.tee $3 - (i32.and - (i32.shr_u - (local.tee $7 + (local.tee $3 + (i32.and (i32.shr_u - (local.get $7) - (local.get $3) + (local.tee $7 + (i32.shr_u + (local.get $7) + (local.get $3) + ) + ) + (i32.const 1) ) + (i32.const 1) ) - (i32.const 1) ) - (i32.const 2) ) - ) - ) - (local.tee $3 - (i32.and (i32.shr_u - (local.tee $7 - (i32.shr_u - (local.get $7) - (local.get $3) - ) - ) - (i32.const 1) + (local.get $7) + (local.get $3) ) - (i32.const 1) ) ) + (i32.const 3) ) - (i32.shr_u - (local.get $7) - (local.get $3) - ) + (i32.const 216) ) ) - (i32.const 3) + (i32.const 8) ) - (i32.const 216) ) ) - (i32.const 8) ) + (i32.const 8) ) ) ) - (i32.const 8) - ) - ) - ) - ) - (if - (i32.eq - (local.get $10) - (local.get $9) - ) - (block - (i32.store - (i32.const 176) - (i32.and - (local.get $11) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $5) - ) - (i32.const -1) - ) ) - ) - (local.set $8 - (local.get $0) - ) - ) - (block - (if - (i32.lt_u - (local.get $9) - (i32.load - (i32.const 192) + (if + (i32.eq + (local.get $10) + (local.get $9) ) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $9) - (i32.const 12) + (then + (block + (i32.store + (i32.const 176) + (i32.and + (local.get $11) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $5) + ) + (i32.const -1) + ) + ) + ) + (local.set $8 + (local.get $0) ) ) ) - (local.get $12) - ) - (block - (i32.store - (local.get $0) - (local.get $10) - ) - (i32.store - (local.get $3) - (local.get $9) - ) - (local.set $8 - (i32.load - (i32.const 184) + (else + (block + (if + (i32.lt_u + (local.get $9) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $9) + (i32.const 12) + ) + ) + ) + (local.get $12) + ) + (then + (block + (i32.store + (local.get $0) + (local.get $10) + ) + (i32.store + (local.get $3) + (local.get $9) + ) + (local.set $8 + (i32.load + (i32.const 184) + ) + ) + ) + ) + (else + (call $_abort) + ) + ) ) ) ) - (call $_abort) - ) - ) - ) - (i32.store offset=4 - (local.get $12) - (i32.or - (local.get $4) - (i32.const 3) - ) - ) - (i32.store offset=4 - (local.tee $10 - (i32.add - (local.get $12) - (local.get $4) - ) - ) - (i32.or - (local.tee $5 - (i32.sub - (i32.shl - (local.get $5) + (i32.store offset=4 + (local.get $12) + (i32.or + (local.get $4) (i32.const 3) ) - (local.get $4) - ) - ) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $10) - (local.get $5) - ) - (local.get $5) - ) - (if - (local.get $8) - (block - (local.set $12 - (i32.load - (i32.const 196) ) - ) - (local.set $4 - (i32.add - (i32.shl - (local.tee $0 - (i32.shr_u - (local.get $8) - (i32.const 3) - ) + (i32.store offset=4 + (local.tee $10 + (i32.add + (local.get $12) + (local.get $4) ) - (i32.const 3) ) - (i32.const 216) - ) - ) - (if - (i32.and - (local.tee $3 - (i32.load - (i32.const 176) + (i32.or + (local.tee $5 + (i32.sub + (i32.shl + (local.get $5) + (i32.const 3) + ) + (local.get $4) + ) ) + (i32.const 1) ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $0) - ) + ) + (i32.store + (i32.add + (local.get $10) + (local.get $5) ) + (local.get $5) ) (if - (i32.lt_u - (local.tee $0 - (i32.load - (local.tee $3 - (i32.add - (local.get $4) - (i32.const 8) - ) - ) - ) - ) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (local.set $2 - (local.get $3) - ) - (local.set $1 - (local.get $0) - ) - ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (local.get $3) - (local.get $0) - ) - ) - (local.set $2 - (i32.add - (local.get $4) - (i32.const 8) - ) - ) - (local.set $1 - (local.get $4) - ) - ) - ) - (i32.store - (local.get $2) - (local.get $12) - ) - (i32.store offset=12 - (local.get $1) - (local.get $12) - ) - (i32.store offset=8 - (local.get $12) - (local.get $1) - ) - (i32.store offset=12 - (local.get $12) - (local.get $4) - ) - ) - ) - (i32.store - (i32.const 184) - (local.get $5) - ) - (i32.store - (i32.const 196) - (local.get $10) - ) - (return - (local.get $7) - ) - ) - ) - (if - (local.tee $0 - (i32.load - (i32.const 180) - ) - ) - (block - (local.set $2 - (i32.and - (i32.shr_u - (local.tee $0 - (i32.add - (i32.and - (local.get $0) - (i32.sub - (i32.const 0) - (local.get $0) + (local.get $8) + (then + (block + (local.set $12 + (i32.load + (i32.const 196) + ) ) - ) - (i32.const -1) - ) - ) - (i32.const 12) - ) - (i32.const 16) - ) - ) - (local.set $7 - (i32.sub - (i32.and - (i32.load offset=4 - (local.tee $0 - (i32.load offset=480 - (i32.shl + (local.set $4 (i32.add - (i32.or - (i32.or - (i32.or - (i32.or - (local.tee $0 - (i32.and - (i32.shr_u - (local.tee $1 - (i32.shr_u - (local.get $0) - (local.get $2) - ) - ) - (i32.const 5) - ) - (i32.const 8) - ) - ) - (local.get $2) - ) - (local.tee $0 - (i32.and - (i32.shr_u - (local.tee $1 - (i32.shr_u - (local.get $1) - (local.get $0) - ) - ) - (i32.const 2) - ) - (i32.const 4) - ) - ) + (i32.shl + (local.tee $0 + (i32.shr_u + (local.get $8) + (i32.const 3) ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (local.tee $3 + (i32.load + (i32.const 176) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $0) + ) + ) + ) + (then + (if + (i32.lt_u (local.tee $0 - (i32.and - (i32.shr_u - (local.tee $1 - (i32.shr_u - (local.get $1) - (local.get $0) - ) + (i32.load + (local.tee $3 + (i32.add + (local.get $4) + (i32.const 8) ) - (i32.const 1) ) - (i32.const 2) ) ) + (i32.load + (i32.const 192) + ) ) - (local.tee $0 - (i32.and - (i32.shr_u - (local.tee $1 - (i32.shr_u - (local.get $1) - (local.get $0) - ) - ) - (i32.const 1) + (then + (call $_abort) + ) + (else + (block + (local.set $2 + (local.get $3) + ) + (local.set $1 + (local.get $0) ) - (i32.const 1) ) ) ) - (i32.shr_u - (local.get $1) - (local.get $0) + ) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $3) + (local.get $0) + ) + ) + (local.set $2 + (i32.add + (local.get $4) + (i32.const 8) + ) + ) + (local.set $1 + (local.get $4) + ) ) ) - (i32.const 2) + ) + (i32.store + (local.get $2) + (local.get $12) + ) + (i32.store offset=12 + (local.get $1) + (local.get $12) + ) + (i32.store offset=8 + (local.get $12) + (local.get $1) + ) + (i32.store offset=12 + (local.get $12) + (local.get $4) ) ) ) ) - (i32.const -8) + (i32.store + (i32.const 184) + (local.get $5) + ) + (i32.store + (i32.const 196) + (local.get $10) + ) + (return + (local.get $7) + ) ) - (local.get $4) ) ) - (local.set $1 - (local.get $0) - ) - (local.set $2 - (local.get $0) - ) - (loop $while-in - (block $while-out - (if - (i32.eqz - (local.tee $0 - (i32.load offset=16 - (local.get $1) - ) - ) - ) - (if - (i32.eqz - (local.tee $0 - (i32.load offset=20 - (local.get $1) - ) - ) - ) - (block - (local.set $10 - (local.get $7) - ) - (local.set $5 - (local.get $2) + (if + (local.tee $0 + (i32.load + (i32.const 180) + ) + ) + (then + (block + (local.set $2 + (i32.and + (i32.shr_u + (local.tee $0 + (i32.add + (i32.and + (local.get $0) + (i32.sub + (i32.const 0) + (local.get $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) ) - (br $while-out) + (i32.const 16) ) ) - ) - (local.set $10 - (i32.lt_u - (local.tee $1 - (i32.sub - (i32.and - (i32.load offset=4 - (local.get $0) + (local.set $7 + (i32.sub + (i32.and + (i32.load offset=4 + (local.tee $0 + (i32.load offset=480 + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (local.tee $0 + (i32.and + (i32.shr_u + (local.tee $1 + (i32.shr_u + (local.get $0) + (local.get $2) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (local.get $2) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (local.tee $1 + (i32.shr_u + (local.get $1) + (local.get $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (local.tee $1 + (i32.shr_u + (local.get $1) + (local.get $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (local.tee $1 + (i32.shr_u + (local.get $1) + (local.get $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (local.get $1) + (local.get $0) + ) + ) + (i32.const 2) + ) + ) ) - (i32.const -8) ) - (local.get $4) + (i32.const -8) ) + (local.get $4) ) - (local.get $7) - ) - ) - (local.set $7 - (select - (local.get $1) - (local.get $7) - (local.get $10) ) - ) - (local.set $1 - (local.get $0) - ) - (local.set $2 - (select + (local.set $1 (local.get $0) - (local.get $2) - (local.get $10) - ) - ) - (br $while-in) - ) - ) - (if - (i32.lt_u - (local.get $5) - (local.tee $12 - (i32.load - (i32.const 192) - ) - ) - ) - (call $_abort) - ) - (if - (i32.ge_u - (local.get $5) - (local.tee $11 - (i32.add - (local.get $5) - (local.get $4) ) - ) - ) - (call $_abort) - ) - (local.set $8 - (i32.load offset=24 - (local.get $5) - ) - ) - (block $do-once4 - (if - (i32.eq - (local.tee $0 - (i32.load offset=12 - (local.get $5) - ) + (local.set $2 + (local.get $0) ) - (local.get $5) - ) - (block - (if - (i32.eqz - (local.tee $1 - (i32.load + (loop $while-in + (block $while-out + (if + (i32.eqz (local.tee $0 - (i32.add - (local.get $5) - (i32.const 20) + (i32.load offset=16 + (local.get $1) ) ) ) - ) - ) - (if - (i32.eqz - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add - (local.get $5) - (i32.const 16) + (then + (if + (i32.eqz + (local.tee $0 + (i32.load offset=20 + (local.get $1) + ) + ) + ) + (then + (block + (local.set $10 + (local.get $7) + ) + (local.set $5 + (local.get $2) + ) + (br $while-out) ) ) ) ) ) - (block - (local.set $9 - (i32.const 0) - ) - (br $do-once4) - ) - ) - ) - (loop $while-in7 - (if - (local.tee $2 - (i32.load - (local.tee $7 - (i32.add - (local.get $1) - (i32.const 20) + (local.set $10 + (i32.lt_u + (local.tee $1 + (i32.sub + (i32.and + (i32.load offset=4 + (local.get $0) + ) + (i32.const -8) + ) + (local.get $4) ) ) + (local.get $7) ) ) - (block - (local.set $1 - (local.get $2) - ) - (local.set $0 + (local.set $7 + (select + (local.get $1) (local.get $7) + (local.get $10) ) - (br $while-in7) ) - ) - (if - (local.tee $2 - (i32.load - (local.tee $7 - (i32.add - (local.get $1) - (i32.const 16) - ) - ) - ) + (local.set $1 + (local.get $0) ) - (block - (local.set $1 + (local.set $2 + (select + (local.get $0) (local.get $2) + (local.get $10) ) - (local.set $0 - (local.get $7) - ) - (br $while-in7) ) + (br $while-in) ) ) (if (i32.lt_u - (local.get $0) - (local.get $12) - ) - (call $_abort) - (block - (i32.store - (local.get $0) - (i32.const 0) - ) - (local.set $9 - (local.get $1) + (local.get $5) + (local.tee $12 + (i32.load + (i32.const 192) + ) ) ) + (then + (call $_abort) + ) ) - ) - (block (if - (i32.lt_u - (local.tee $7 - (i32.load offset=8 + (i32.ge_u + (local.get $5) + (local.tee $11 + (i32.add (local.get $5) + (local.get $4) ) ) - (local.get $12) ) - (call $_abort) + (then + (call $_abort) + ) ) - (if - (i32.ne - (i32.load - (local.tee $2 - (i32.add - (local.get $7) - (i32.const 12) - ) - ) - ) + (local.set $8 + (i32.load offset=24 (local.get $5) ) - (call $_abort) ) - (if - (i32.eq - (i32.load - (local.tee $1 - (i32.add - (local.get $0) - (i32.const 8) + (block $do-once4 + (if + (i32.eq + (local.tee $0 + (i32.load offset=12 + (local.get $5) ) ) + (local.get $5) ) - (local.get $5) - ) - (block - (i32.store - (local.get $2) - (local.get $0) - ) - (i32.store - (local.get $1) - (local.get $7) - ) - (local.set $9 - (local.get $0) - ) - ) - (call $_abort) - ) - ) - ) - ) - (block $do-once8 - (if - (local.get $8) - (block - (if - (i32.eq - (local.get $5) - (i32.load - (local.tee $0 - (i32.add - (i32.shl + (then + (block + (if + (i32.eqz (local.tee $1 - (i32.load offset=28 - (local.get $5) + (i32.load + (local.tee $0 + (i32.add + (local.get $5) + (i32.const 20) + ) + ) + ) + ) + ) + (then + (if + (i32.eqz + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.get $5) + (i32.const 16) + ) + ) + ) + ) + ) + (then + (block + (local.set $9 + (i32.const 0) + ) + (br $do-once4) + ) ) ) - (i32.const 2) ) - (i32.const 480) ) - ) - ) - ) - (block - (i32.store - (local.get $0) - (local.get $9) - ) - (if - (i32.eqz - (local.get $9) - ) - (block - (i32.store - (i32.const 180) - (i32.and - (i32.load - (i32.const 180) + (loop $while-in7 + (if + (local.tee $2 + (i32.load + (local.tee $7 + (i32.add + (local.get $1) + (i32.const 20) + ) + ) + ) ) - (i32.xor - (i32.shl - (i32.const 1) + (then + (block + (local.set $1 + (local.get $2) + ) + (local.set $0 + (local.get $7) + ) + (br $while-in7) + ) + ) + ) + (if + (local.tee $2 + (i32.load + (local.tee $7 + (i32.add + (local.get $1) + (i32.const 16) + ) + ) + ) + ) + (then + (block + (local.set $1 + (local.get $2) + ) + (local.set $0 + (local.get $7) + ) + (br $while-in7) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $0) + (local.get $12) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $0) + (i32.const 0) + ) + (local.set $9 (local.get $1) ) - (i32.const -1) ) ) ) - (br $do-once8) ) ) - ) - (block - (if - (i32.lt_u - (local.get $8) - (i32.load - (i32.const 192) + (else + (block + (if + (i32.lt_u + (local.tee $7 + (i32.load offset=8 + (local.get $5) + ) + ) + (local.get $12) + ) + (then + (call $_abort) + ) ) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $8) - (i32.const 16) + (if + (i32.ne + (i32.load + (local.tee $2 + (i32.add + (local.get $7) + (i32.const 12) + ) + ) ) + (local.get $5) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $1 + (i32.add + (local.get $0) + (i32.const 8) + ) + ) + ) + (local.get $5) + ) + (then + (block + (i32.store + (local.get $2) + (local.get $0) + ) + (i32.store + (local.get $1) + (local.get $7) + ) + (local.set $9 + (local.get $0) + ) + ) + ) + (else + (call $_abort) ) ) - (local.get $5) - ) - (i32.store - (local.get $0) - (local.get $9) - ) - (i32.store offset=20 - (local.get $8) - (local.get $9) - ) - ) - (br_if $do-once8 - (i32.eqz - (local.get $9) ) ) ) ) - (if - (i32.lt_u - (local.get $9) - (local.tee $0 - (i32.load - (i32.const 192) + (block $do-once8 + (if + (local.get $8) + (then + (block + (if + (i32.eq + (local.get $5) + (i32.load + (local.tee $0 + (i32.add + (i32.shl + (local.tee $1 + (i32.load offset=28 + (local.get $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (then + (block + (i32.store + (local.get $0) + (local.get $9) + ) + (if + (i32.eqz + (local.get $9) + ) + (then + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + ) + ) + (else + (block + (if + (i32.lt_u + (local.get $8) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $8) + (i32.const 16) + ) + ) + ) + (local.get $5) + ) + (then + (i32.store + (local.get $0) + (local.get $9) + ) + ) + (else + (i32.store offset=20 + (local.get $8) + (local.get $9) + ) + ) + ) + (br_if $do-once8 + (i32.eqz + (local.get $9) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $9) + (local.tee $0 + (i32.load + (i32.const 192) + ) + ) + ) + (then + (call $_abort) + ) + ) + (i32.store offset=24 + (local.get $9) + (local.get $8) + ) + (if + (local.tee $1 + (i32.load offset=16 + (local.get $5) + ) + ) + (then + (if + (i32.lt_u + (local.get $1) + (local.get $0) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=16 + (local.get $9) + (local.get $1) + ) + (i32.store offset=24 + (local.get $1) + (local.get $9) + ) + ) + ) + ) + ) + ) + (if + (local.tee $0 + (i32.load offset=20 + (local.get $5) + ) + ) + (then + (if + (i32.lt_u + (local.get $0) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=20 + (local.get $9) + (local.get $0) + ) + (i32.store offset=24 + (local.get $0) + (local.get $9) + ) + ) + ) + ) + ) + ) ) ) ) - (call $_abort) - ) - (i32.store offset=24 - (local.get $9) - (local.get $8) ) (if - (local.tee $1 - (i32.load offset=16 - (local.get $5) - ) + (i32.lt_u + (local.get $10) + (i32.const 16) ) - (if - (i32.lt_u - (local.get $1) - (local.get $0) - ) - (call $_abort) + (then (block - (i32.store offset=16 - (local.get $9) - (local.get $1) + (i32.store offset=4 + (local.get $5) + (i32.or + (local.tee $0 + (i32.add + (local.get $10) + (local.get $4) + ) + ) + (i32.const 3) + ) ) - (i32.store offset=24 - (local.get $1) - (local.get $9) + (i32.store + (local.tee $0 + (i32.add + (i32.add + (local.get $5) + (local.get $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (local.get $0) + ) + (i32.const 1) + ) ) ) ) - ) - (if - (local.tee $0 - (i32.load offset=20 - (local.get $5) - ) - ) - (if - (i32.lt_u - (local.get $0) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) + (else (block - (i32.store offset=20 - (local.get $9) - (local.get $0) + (i32.store offset=4 + (local.get $5) + (i32.or + (local.get $4) + (i32.const 3) + ) ) - (i32.store offset=24 - (local.get $0) - (local.get $9) + (i32.store offset=4 + (local.get $11) + (i32.or + (local.get $10) + (i32.const 1) + ) ) - ) - ) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $10) - (i32.const 16) - ) - (block - (i32.store offset=4 - (local.get $5) - (i32.or - (local.tee $0 - (i32.add - (local.get $10) - (local.get $4) - ) - ) - (i32.const 3) - ) - ) - (i32.store - (local.tee $0 - (i32.add - (i32.add - (local.get $5) - (local.get $0) - ) - (i32.const 4) - ) - ) - (i32.or - (i32.load - (local.get $0) - ) - (i32.const 1) - ) - ) - ) - (block - (i32.store offset=4 - (local.get $5) - (i32.or - (local.get $4) - (i32.const 3) - ) - ) - (i32.store offset=4 - (local.get $11) - (i32.or - (local.get $10) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $11) - (local.get $10) - ) - (local.get $10) - ) - (if - (local.tee $0 - (i32.load - (i32.const 184) - ) - ) - (block - (local.set $4 - (i32.load - (i32.const 196) - ) - ) - (local.set $2 - (i32.add - (i32.shl - (local.tee $0 - (i32.shr_u - (local.get $0) - (i32.const 3) - ) - ) - (i32.const 3) - ) - (i32.const 216) - ) - ) - (if - (i32.and - (local.tee $1 - (i32.load - (i32.const 176) - ) - ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $0) + (i32.store + (i32.add + (local.get $11) + (local.get $10) ) + (local.get $10) ) - ) - (if - (i32.lt_u + (if (local.tee $0 (i32.load - (local.tee $1 + (i32.const 184) + ) + ) + (then + (block + (local.set $4 + (i32.load + (i32.const 196) + ) + ) + (local.set $2 (i32.add - (local.get $2) - (i32.const 8) + (i32.shl + (local.tee $0 + (i32.shr_u + (local.get $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (local.tee $1 + (i32.load + (i32.const 176) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $0) + ) + ) + ) + (then + (if + (i32.lt_u + (local.tee $0 + (i32.load + (local.tee $1 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (local.set $6 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + ) + ) + ) + ) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (local.set $6 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + (local.set $3 + (local.get $2) + ) + ) ) ) + (i32.store + (local.get $6) + (local.get $4) + ) + (i32.store offset=12 + (local.get $3) + (local.get $4) + ) + (i32.store offset=8 + (local.get $4) + (local.get $3) + ) + (i32.store offset=12 + (local.get $4) + (local.get $2) + ) ) ) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (local.set $6 - (local.get $1) - ) - (local.set $3 - (local.get $0) - ) ) - ) - (block (i32.store - (i32.const 176) - (i32.or - (local.get $1) - (local.get $0) - ) - ) - (local.set $6 - (i32.add - (local.get $2) - (i32.const 8) - ) + (i32.const 184) + (local.get $10) ) - (local.set $3 - (local.get $2) + (i32.store + (i32.const 196) + (local.get $11) ) ) ) - (i32.store - (local.get $6) - (local.get $4) - ) - (i32.store offset=12 - (local.get $3) - (local.get $4) - ) - (i32.store offset=8 - (local.get $4) - (local.get $3) - ) - (i32.store offset=12 - (local.get $4) - (local.get $2) + ) + (return + (i32.add + (local.get $5) + (i32.const 8) ) ) ) - (i32.store - (i32.const 184) - (local.get $10) - ) - (i32.store - (i32.const 196) - (local.get $11) - ) ) - ) - (return - (i32.add - (local.get $5) - (i32.const 8) + (else + (local.set $0 + (local.get $4) + ) ) ) ) + ) + (else (local.set $0 (local.get $4) ) ) ) - (local.set $0 - (local.get $4) - ) ) ) - (if - (i32.gt_u - (local.get $0) - (i32.const -65) - ) - (local.set $0 - (i32.const -1) - ) - (block - (local.set $2 - (i32.and - (local.tee $0 - (i32.add - (local.get $0) - (i32.const 11) - ) - ) - (i32.const -8) - ) + (else + (if + (i32.gt_u + (local.get $0) + (i32.const -65) ) - (if - (local.tee $18 - (i32.load - (i32.const 180) - ) + (then + (local.set $0 + (i32.const -1) ) + ) + (else (block - (local.set $14 - (if (result i32) + (local.set $2 + (i32.and (local.tee $0 - (i32.shr_u + (i32.add (local.get $0) - (i32.const 8) + (i32.const 11) ) ) - (if (result i32) - (i32.gt_u - (local.get $2) - (i32.const 16777215) - ) - (i32.const 31) - (i32.or - (i32.and - (i32.shr_u - (local.get $2) - (i32.add - (local.tee $0 - (i32.add - (i32.sub - (i32.const 14) - (i32.or - (i32.or + (i32.const -8) + ) + ) + (if + (local.tee $18 + (i32.load + (i32.const 180) + ) + ) + (then + (block + (local.set $14 + (if (result i32) + (local.tee $0 + (i32.shr_u + (local.get $0) + (i32.const 8) + ) + ) + (then + (if (result i32) + (i32.gt_u + (local.get $2) + (i32.const 16777215) + ) + (then + (i32.const 31) + ) + (else + (i32.or + (i32.and + (i32.shr_u + (local.get $2) + (i32.add (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $0) - (local.tee $3 - (i32.and - (i32.shr_u - (i32.add + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $0) + (local.tee $3 + (i32.and + (i32.shr_u + (i32.add + (local.get $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (local.get $3) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $1) (local.get $0) - (i32.const 1048320) ) - (i32.const 16) ) - (i32.const 8) + (i32.const 245760) ) + (i32.const 16) ) + (i32.const 2) ) ) - (i32.const 520192) ) - (i32.const 16) ) - (i32.const 4) - ) - ) - (local.get $3) - ) - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $1) - (local.get $0) - ) + (i32.shr_u + (i32.shl + (local.get $1) + (local.get $0) ) - (i32.const 245760) + (i32.const 15) ) - (i32.const 16) ) - (i32.const 2) ) + (i32.const 7) ) ) + (i32.const 1) ) - (i32.shr_u - (i32.shl - (local.get $1) - (local.get $0) - ) - (i32.const 15) + (i32.shl + (local.get $0) + (i32.const 1) ) ) ) - (i32.const 7) ) ) - (i32.const 1) - ) - (i32.shl - (local.get $0) - (i32.const 1) - ) - ) - ) - (i32.const 0) - ) - ) - (local.set $3 - (i32.sub - (i32.const 0) - (local.get $2) - ) - ) - (block $__rjto$3 - (block $__rjti$3 - (if - (local.tee $0 - (i32.load offset=480 - (i32.shl - (local.get $14) - (i32.const 2) + (else + (i32.const 0) ) ) ) - (block - (local.set $6 + (local.set $3 + (i32.sub (i32.const 0) + (local.get $2) ) - (local.set $8 - (i32.shl - (local.get $2) - (select - (i32.const 0) - (i32.sub - (i32.const 25) - (i32.shr_u + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (local.tee $0 + (i32.load offset=480 + (i32.shl (local.get $14) - (i32.const 1) + (i32.const 2) ) ) - (i32.eq - (local.get $14) - (i32.const 31) - ) ) - ) - ) - (local.set $1 - (i32.const 0) - ) - (loop $while-in14 - (if - (i32.lt_u - (local.tee $4 - (i32.sub - (local.tee $9 - (i32.and - (i32.load offset=4 - (local.get $0) + (then + (block + (local.set $6 + (i32.const 0) + ) + (local.set $8 + (i32.shl + (local.get $2) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (local.get $14) + (i32.const 1) + ) + ) + (i32.eq + (local.get $14) + (i32.const 31) ) - (i32.const -8) ) ) - (local.get $2) - ) - ) - (local.get $3) - ) - (if - (i32.eq - (local.get $9) - (local.get $2) - ) - (block - (local.set $1 - (local.get $4) - ) - (local.set $3 - (local.get $0) - ) - (br $__rjti$3) - ) - (block - (local.set $3 - (local.get $4) ) (local.set $1 - (local.get $0) - ) - ) - ) - ) - (local.set $0 - (select - (local.get $6) - (local.tee $4 - (i32.load offset=20 - (local.get $0) - ) - ) - (i32.or - (i32.eqz - (local.get $4) + (i32.const 0) ) - (i32.eq - (local.get $4) - (local.tee $9 - (i32.load - (i32.add - (i32.add - (local.get $0) - (i32.const 16) - ) - (i32.shl - (i32.shr_u - (local.get $8) - (i32.const 31) + (loop $while-in14 + (if + (i32.lt_u + (local.tee $4 + (i32.sub + (local.tee $9 + (i32.and + (i32.load offset=4 + (local.get $0) + ) + (i32.const -8) + ) ) - (i32.const 2) + (local.get $2) ) ) + (local.get $3) ) - ) - ) - ) - ) - ) - (local.set $4 - (i32.shl - (local.get $8) - (i32.xor - (local.tee $6 - (i32.eqz - (local.get $9) - ) - ) - (i32.const 1) - ) - ) - ) - (if - (local.get $6) - (block - (local.set $4 - (local.get $0) - ) - (local.set $0 - (local.get $1) - ) - ) - (block - (local.set $6 - (local.get $0) - ) - (local.set $8 - (local.get $4) - ) - (local.set $0 - (local.get $9) - ) - (br $while-in14) - ) - ) - ) - ) - (block - (local.set $4 - (i32.const 0) - ) - (local.set $0 - (i32.const 0) - ) - ) - ) - (if - (i32.and - (i32.eqz - (local.get $4) - ) - (i32.eqz - (local.get $0) - ) - ) - (block - (if - (i32.eqz - (local.tee $1 - (i32.and - (local.get $18) - (i32.or - (local.tee $1 - (i32.shl - (i32.const 2) - (local.get $14) - ) - ) - (i32.sub - (i32.const 0) - (local.get $1) - ) - ) - ) - ) - ) - (block - (local.set $0 - (local.get $2) - ) - (br $do-once) - ) - ) - (local.set $9 - (i32.and - (i32.shr_u - (local.tee $1 - (i32.add - (i32.and - (local.get $1) - (i32.sub - (i32.const 0) - (local.get $1) - ) - ) - (i32.const -1) - ) - ) - (i32.const 12) - ) - (i32.const 16) - ) - ) - (local.set $4 - (i32.load offset=480 - (i32.shl - (i32.add - (i32.or - (i32.or - (i32.or - (i32.or - (local.tee $1 - (i32.and - (i32.shr_u - (local.tee $4 - (i32.shr_u - (local.get $1) - (local.get $9) - ) - ) - (i32.const 5) + (then + (if + (i32.eq + (local.get $9) + (local.get $2) + ) + (then + (block + (local.set $1 + (local.get $4) + ) + (local.set $3 + (local.get $0) ) - (i32.const 8) + (br $__rjti$3) ) ) - (local.get $9) - ) - (local.tee $1 - (i32.and - (i32.shr_u - (local.tee $4 - (i32.shr_u - (local.get $4) - (local.get $1) - ) + (else + (block + (local.set $3 + (local.get $4) + ) + (local.set $1 + (local.get $0) ) - (i32.const 2) ) - (i32.const 4) ) ) ) - (local.tee $1 - (i32.and - (i32.shr_u - (local.tee $4 - (i32.shr_u - (local.get $4) - (local.get $1) + ) + (local.set $0 + (select + (local.get $6) + (local.tee $4 + (i32.load offset=20 + (local.get $0) + ) + ) + (i32.or + (i32.eqz + (local.get $4) + ) + (i32.eq + (local.get $4) + (local.tee $9 + (i32.load + (i32.add + (i32.add + (local.get $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (local.get $8) + (i32.const 31) + ) + (i32.const 2) + ) + ) ) ) - (i32.const 1) ) - (i32.const 2) ) ) ) - (local.tee $1 - (i32.and - (i32.shr_u - (local.tee $4 - (i32.shr_u - (local.get $4) - (local.get $1) + (local.set $4 + (i32.shl + (local.get $8) + (i32.xor + (local.tee $6 + (i32.eqz + (local.get $9) ) ) (i32.const 1) ) - (i32.const 1) + ) + ) + (if + (local.get $6) + (then + (block + (local.set $4 + (local.get $0) + ) + (local.set $0 + (local.get $1) + ) + ) + ) + (else + (block + (local.set $6 + (local.get $0) + ) + (local.set $8 + (local.get $4) + ) + (local.set $0 + (local.get $9) + ) + (br $while-in14) + ) ) ) ) - (i32.shr_u - (local.get $4) - (local.get $1) + ) + ) + (else + (block + (local.set $4 + (i32.const 0) + ) + (local.set $0 + (i32.const 0) ) ) - (i32.const 2) ) ) - ) - ) - ) - (if - (local.get $4) - (block - (local.set $1 - (local.get $3) - ) - (local.set $3 - (local.get $4) - ) - (br $__rjti$3) - ) - (local.set $4 - (local.get $0) - ) - ) - (br $__rjto$3) - ) - (loop $while-in16 - (local.set $9 - (i32.lt_u - (local.tee $4 - (i32.sub + (if (i32.and - (i32.load offset=4 - (local.get $3) + (i32.eqz + (local.get $4) + ) + (i32.eqz + (local.get $0) ) - (i32.const -8) ) - (local.get $2) - ) - ) - (local.get $1) - ) - ) - (local.set $1 - (select - (local.get $4) - (local.get $1) - (local.get $9) - ) - ) - (local.set $0 - (select - (local.get $3) - (local.get $0) - (local.get $9) - ) - ) - (if - (local.tee $4 - (i32.load offset=16 - (local.get $3) - ) - ) - (block - (local.set $3 - (local.get $4) - ) - (br $while-in16) - ) - ) - (br_if $while-in16 - (local.tee $3 - (i32.load offset=20 - (local.get $3) - ) - ) - ) - (local.set $3 - (local.get $1) - ) - (local.set $4 - (local.get $0) - ) - ) - ) - (if - (local.get $4) - (if - (i32.lt_u - (local.get $3) - (i32.sub - (i32.load - (i32.const 184) - ) - (local.get $2) - ) - ) - (block - (if - (i32.lt_u - (local.get $4) - (local.tee $12 - (i32.load - (i32.const 192) - ) - ) - ) - (call $_abort) - ) - (if - (i32.ge_u - (local.get $4) - (local.tee $6 - (i32.add - (local.get $4) - (local.get $2) - ) - ) - ) - (call $_abort) - ) - (local.set $9 - (i32.load offset=24 - (local.get $4) - ) - ) - (block $do-once17 - (if - (i32.eq - (local.tee $0 - (i32.load offset=12 - (local.get $4) - ) - ) - (local.get $4) - ) - (block - (if - (i32.eqz - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add - (local.get $4) - (i32.const 20) + (then + (block + (if + (i32.eqz + (local.tee $1 + (i32.and + (local.get $18) + (i32.or + (local.tee $1 + (i32.shl + (i32.const 2) + (local.get $14) + ) + ) + (i32.sub + (i32.const 0) + (local.get $1) + ) + ) ) ) ) - ) - ) - (if - (i32.eqz - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add - (local.get $4) - (i32.const 16) - ) + (then + (block + (local.set $0 + (local.get $2) ) + (br $do-once) ) ) ) - (block - (local.set $11 - (i32.const 0) - ) - (br $do-once17) - ) - ) - ) - (loop $while-in20 - (if - (local.tee $7 - (i32.load - (local.tee $10 - (i32.add - (local.get $1) - (i32.const 20) + (local.set $9 + (i32.and + (i32.shr_u + (local.tee $1 + (i32.add + (i32.and + (local.get $1) + (i32.sub + (i32.const 0) + (local.get $1) + ) + ) + (i32.const -1) + ) ) + (i32.const 12) ) + (i32.const 16) ) ) - (block - (local.set $1 - (local.get $7) - ) - (local.set $0 - (local.get $10) - ) - (br $while-in20) - ) - ) - (if - (local.tee $7 - (i32.load - (local.tee $10 + (local.set $4 + (i32.load offset=480 + (i32.shl (i32.add - (local.get $1) - (i32.const 16) + (i32.or + (i32.or + (i32.or + (i32.or + (local.tee $1 + (i32.and + (i32.shr_u + (local.tee $4 + (i32.shr_u + (local.get $1) + (local.get $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (local.get $9) + ) + (local.tee $1 + (i32.and + (i32.shr_u + (local.tee $4 + (i32.shr_u + (local.get $4) + (local.get $1) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (local.tee $1 + (i32.and + (i32.shr_u + (local.tee $4 + (i32.shr_u + (local.get $4) + (local.get $1) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (local.tee $1 + (i32.and + (i32.shr_u + (local.tee $4 + (i32.shr_u + (local.get $4) + (local.get $1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (local.get $4) + (local.get $1) + ) ) + (i32.const 2) ) ) ) - (block - (local.set $1 - (local.get $7) - ) - (local.set $0 - (local.get $10) - ) - (br $while-in20) - ) ) ) - (if - (i32.lt_u - (local.get $0) - (local.get $12) - ) - (call $_abort) + ) + (if + (local.get $4) + (then (block - (i32.store - (local.get $0) - (i32.const 0) + (local.set $1 + (local.get $3) ) - (local.set $11 - (local.get $1) + (local.set $3 + (local.get $4) ) + (br $__rjti$3) + ) + ) + (else + (local.set $4 + (local.get $0) ) ) ) - (block - (if - (i32.lt_u - (local.tee $10 - (i32.load offset=8 - (local.get $4) + (br $__rjto$3) + ) + (loop $while-in16 + (local.set $9 + (i32.lt_u + (local.tee $4 + (i32.sub + (i32.and + (i32.load offset=4 + (local.get $3) + ) + (i32.const -8) ) + (local.get $2) ) - (local.get $12) ) - (call $_abort) + (local.get $1) ) - (if - (i32.ne - (i32.load - (local.tee $7 - (i32.add - (local.get $10) - (i32.const 12) - ) - ) - ) - (local.get $4) - ) - (call $_abort) + ) + (local.set $1 + (select + (local.get $4) + (local.get $1) + (local.get $9) ) - (if - (i32.eq - (i32.load - (local.tee $1 - (i32.add - (local.get $0) - (i32.const 8) - ) - ) - ) - (local.get $4) + ) + (local.set $0 + (select + (local.get $3) + (local.get $0) + (local.get $9) + ) + ) + (if + (local.tee $4 + (i32.load offset=16 + (local.get $3) ) + ) + (then (block - (i32.store - (local.get $7) - (local.get $0) - ) - (i32.store - (local.get $1) - (local.get $10) - ) - (local.set $11 - (local.get $0) + (local.set $3 + (local.get $4) ) + (br $while-in16) + ) + ) + ) + (br_if $while-in16 + (local.tee $3 + (i32.load offset=20 + (local.get $3) ) - (call $_abort) ) ) + (local.set $3 + (local.get $1) + ) + (local.set $4 + (local.get $0) + ) ) ) - (block $do-once21 - (if - (local.get $9) - (block - (if - (i32.eq - (local.get $4) + (if + (local.get $4) + (then + (if + (i32.lt_u + (local.get $3) + (i32.sub (i32.load - (local.tee $0 - (i32.add - (i32.shl - (local.tee $1 - (i32.load offset=28 - (local.get $4) - ) - ) - (i32.const 2) - ) - (i32.const 480) - ) - ) + (i32.const 184) ) + (local.get $2) ) + ) + (then (block - (i32.store - (local.get $0) - (local.get $11) - ) (if - (i32.eqz - (local.get $11) - ) - (block - (i32.store - (i32.const 180) - (i32.and - (i32.load - (i32.const 180) - ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $1) - ) - (i32.const -1) - ) + (i32.lt_u + (local.get $4) + (local.tee $12 + (i32.load + (i32.const 192) ) ) - (br $do-once21) ) - ) - ) - (block - (if - (i32.lt_u - (local.get $9) - (i32.load - (i32.const 192) - ) + (then + (call $_abort) ) - (call $_abort) ) (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $9) - (i32.const 16) - ) + (i32.ge_u + (local.get $4) + (local.tee $6 + (i32.add + (local.get $4) + (local.get $2) ) ) - (local.get $4) - ) - (i32.store - (local.get $0) - (local.get $11) - ) - (i32.store offset=20 - (local.get $9) - (local.get $11) - ) - ) - (br_if $do-once21 - (i32.eqz - (local.get $11) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $11) - (local.tee $0 - (i32.load - (i32.const 192) - ) - ) - ) - (call $_abort) - ) - (i32.store offset=24 - (local.get $11) - (local.get $9) - ) - (if - (local.tee $1 - (i32.load offset=16 - (local.get $4) - ) - ) - (if - (i32.lt_u - (local.get $1) - (local.get $0) - ) - (call $_abort) - (block - (i32.store offset=16 - (local.get $11) - (local.get $1) - ) - (i32.store offset=24 - (local.get $1) - (local.get $11) - ) - ) - ) - ) - (if - (local.tee $0 - (i32.load offset=20 - (local.get $4) - ) - ) - (if - (i32.lt_u - (local.get $0) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (i32.store offset=20 - (local.get $11) - (local.get $0) - ) - (i32.store offset=24 - (local.get $0) - (local.get $11) ) - ) - ) - ) - ) - ) - ) - (block $do-once25 - (if - (i32.lt_u - (local.get $3) - (i32.const 16) - ) - (block - (i32.store offset=4 - (local.get $4) - (i32.or - (local.tee $0 - (i32.add - (local.get $3) - (local.get $2) + (then + (call $_abort) ) ) - (i32.const 3) - ) - ) - (i32.store - (local.tee $0 - (i32.add - (i32.add + (local.set $9 + (i32.load offset=24 (local.get $4) - (local.get $0) ) - (i32.const 4) - ) - ) - (i32.or - (i32.load - (local.get $0) ) - (i32.const 1) - ) - ) - ) - (block - (i32.store offset=4 - (local.get $4) - (i32.or - (local.get $2) - (i32.const 3) - ) - ) - (i32.store offset=4 - (local.get $6) - (i32.or - (local.get $3) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $6) - (local.get $3) - ) - (local.get $3) - ) - (local.set $0 - (i32.shr_u - (local.get $3) - (i32.const 3) - ) - ) - (if - (i32.lt_u - (local.get $3) - (i32.const 256) - ) - (block - (local.set $3 - (i32.add - (i32.shl - (local.get $0) - (i32.const 3) + (block $do-once17 + (if + (i32.eq + (local.tee $0 + (i32.load offset=12 + (local.get $4) + ) + ) + (local.get $4) ) - (i32.const 216) - ) - ) - (if - (i32.and - (local.tee $1 - (i32.load - (i32.const 176) + (then + (block + (if + (i32.eqz + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.get $4) + (i32.const 20) + ) + ) + ) + ) + ) + (then + (if + (i32.eqz + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.get $4) + (i32.const 16) + ) + ) + ) + ) + ) + (then + (block + (local.set $11 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + ) + ) + (loop $while-in20 + (if + (local.tee $7 + (i32.load + (local.tee $10 + (i32.add + (local.get $1) + (i32.const 20) + ) + ) + ) + ) + (then + (block + (local.set $1 + (local.get $7) + ) + (local.set $0 + (local.get $10) + ) + (br $while-in20) + ) + ) + ) + (if + (local.tee $7 + (i32.load + (local.tee $10 + (i32.add + (local.get $1) + (i32.const 16) + ) + ) + ) + ) + (then + (block + (local.set $1 + (local.get $7) + ) + (local.set $0 + (local.get $10) + ) + (br $while-in20) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $0) + (local.get $12) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $0) + (i32.const 0) + ) + (local.set $11 + (local.get $1) + ) + ) + ) + ) ) ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $0) + (else + (block + (if + (i32.lt_u + (local.tee $10 + (i32.load offset=8 + (local.get $4) + ) + ) + (local.get $12) + ) + (then + (call $_abort) + ) + ) + (if + (i32.ne + (i32.load + (local.tee $7 + (i32.add + (local.get $10) + (i32.const 12) + ) + ) + ) + (local.get $4) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $1 + (i32.add + (local.get $0) + (i32.const 8) + ) + ) + ) + (local.get $4) + ) + (then + (block + (i32.store + (local.get $7) + (local.get $0) + ) + (i32.store + (local.get $1) + (local.get $10) + ) + (local.set $11 + (local.get $0) + ) + ) + ) + (else + (call $_abort) + ) + ) ) ) ) + ) + (block $do-once21 (if - (i32.lt_u - (local.tee $0 - (i32.load + (local.get $9) + (then + (block + (if + (i32.eq + (local.get $4) + (i32.load + (local.tee $0 + (i32.add + (i32.shl + (local.tee $1 + (i32.load offset=28 + (local.get $4) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (then + (block + (i32.store + (local.get $0) + (local.get $11) + ) + (if + (i32.eqz + (local.get $11) + ) + (then + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + ) + ) + (else + (block + (if + (i32.lt_u + (local.get $9) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $9) + (i32.const 16) + ) + ) + ) + (local.get $4) + ) + (then + (i32.store + (local.get $0) + (local.get $11) + ) + ) + (else + (i32.store offset=20 + (local.get $9) + (local.get $11) + ) + ) + ) + (br_if $do-once21 + (i32.eqz + (local.get $11) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $11) + (local.tee $0 + (i32.load + (i32.const 192) + ) + ) + ) + (then + (call $_abort) + ) + ) + (i32.store offset=24 + (local.get $11) + (local.get $9) + ) + (if (local.tee $1 + (i32.load offset=16 + (local.get $4) + ) + ) + (then + (if + (i32.lt_u + (local.get $1) + (local.get $0) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=16 + (local.get $11) + (local.get $1) + ) + (i32.store offset=24 + (local.get $1) + (local.get $11) + ) + ) + ) + ) + ) + ) + (if + (local.tee $0 + (i32.load offset=20 + (local.get $4) + ) + ) + (then + (if + (i32.lt_u + (local.get $0) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=20 + (local.get $11) + (local.get $0) + ) + (i32.store offset=24 + (local.get $0) + (local.get $11) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (local.get $3) + (i32.const 16) + ) + (then + (block + (i32.store offset=4 + (local.get $4) + (i32.or + (local.tee $0 + (i32.add + (local.get $3) + (local.get $2) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (local.tee $0 (i32.add - (local.get $3) - (i32.const 8) + (i32.add + (local.get $4) + (local.get $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (local.get $0) + ) + (i32.const 1) + ) + ) + ) + ) + (else + (block + (i32.store offset=4 + (local.get $4) + (i32.or + (local.get $2) + (i32.const 3) + ) + ) + (i32.store offset=4 + (local.get $6) + (i32.or + (local.get $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (local.get $6) + (local.get $3) + ) + (local.get $3) + ) + (local.set $0 + (i32.shr_u + (local.get $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (local.get $3) + (i32.const 256) + ) + (then + (block + (local.set $3 + (i32.add + (i32.shl + (local.get $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and + (local.tee $1 + (i32.load + (i32.const 176) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $0) + ) + ) + ) + (then + (if + (i32.lt_u + (local.tee $0 + (i32.load + (local.tee $1 + (i32.add + (local.get $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (local.set $13 + (local.get $1) + ) + (local.set $5 + (local.get $0) + ) + ) + ) + ) + ) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (local.set $13 + (i32.add + (local.get $3) + (i32.const 8) + ) + ) + (local.set $5 + (local.get $3) + ) + ) + ) + ) + (i32.store + (local.get $13) + (local.get $6) + ) + (i32.store offset=12 + (local.get $5) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $5) + ) + (i32.store offset=12 + (local.get $6) + (local.get $3) + ) + (br $do-once25) ) ) ) - ) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (local.set $13 - (local.get $1) - ) - (local.set $5 - (local.get $0) - ) - ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (local.get $1) - (local.get $0) - ) - ) - (local.set $13 - (i32.add - (local.get $3) - (i32.const 8) - ) - ) - (local.set $5 - (local.get $3) - ) - ) - ) - (i32.store - (local.get $13) - (local.get $6) - ) - (i32.store offset=12 - (local.get $5) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $5) - ) - (i32.store offset=12 - (local.get $6) - (local.get $3) - ) - (br $do-once25) - ) - ) - (local.set $2 - (i32.add - (i32.shl - (local.tee $7 - (if (result i32) - (local.tee $0 - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (if (result i32) - (i32.gt_u - (local.get $3) - (i32.const 16777215) - ) - (i32.const 31) - (i32.or - (i32.and - (i32.shr_u - (local.get $3) - (i32.add - (local.tee $0 - (i32.add - (i32.sub - (i32.const 14) - (i32.or + (local.set $2 + (i32.add + (i32.shl + (local.tee $7 + (if (result i32) + (local.tee $0 + (i32.shr_u + (local.get $3) + (i32.const 8) + ) + ) + (then + (if (result i32) + (i32.gt_u + (local.get $3) + (i32.const 16777215) + ) + (then + (i32.const 31) + ) + (else (i32.or - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $0) - (local.tee $2 - (i32.and - (i32.shr_u - (i32.add - (local.get $0) - (i32.const 1048320) + (i32.and + (i32.shr_u + (local.get $3) + (i32.add + (local.tee $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $0) + (local.tee $2 + (i32.and + (i32.shr_u + (i32.add + (local.get $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) ) - (i32.const 16) ) - (i32.const 8) + (local.get $2) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $1) + (local.get $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) ) ) ) + (i32.shr_u + (i32.shl + (local.get $1) + (local.get $0) + ) + (i32.const 15) + ) ) - (i32.const 520192) ) - (i32.const 16) + (i32.const 7) ) - (i32.const 4) ) + (i32.const 1) + ) + (i32.shl + (local.get $0) + (i32.const 1) ) - (local.get $2) ) - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $1) - (local.get $0) - ) - ) - (i32.const 245760) - ) - (i32.const 16) - ) - (i32.const 2) + ) + ) + ) + (else + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + (i32.store offset=28 + (local.get $6) + (local.get $7) + ) + (i32.store offset=4 + (local.tee $0 + (i32.add + (local.get $6) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (local.get $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (local.tee $1 + (i32.load + (i32.const 180) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $7) + ) + ) + ) + ) + (then + (block + (i32.store + (i32.const 180) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (i32.store + (local.get $2) + (local.get $6) + ) + (i32.store offset=24 + (local.get $6) + (local.get $2) + ) + (i32.store offset=12 + (local.get $6) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $6) + ) + (br $do-once25) + ) + ) + ) + (local.set $7 + (i32.shl + (local.get $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (local.get $7) + (i32.const 1) + ) + ) + (i32.eq + (local.get $7) + (i32.const 31) + ) + ) + ) + ) + (local.set $0 + (i32.load + (local.get $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (local.get $0) + ) + (i32.const -8) + ) + (local.get $3) + ) + ) + (local.set $2 + (i32.shl + (local.get $7) + (i32.const 1) + ) + ) + (if + (local.tee $1 + (i32.load + (local.tee $7 + (i32.add + (i32.add + (local.get $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (local.get $7) + (i32.const 31) ) + (i32.const 2) ) ) ) - (i32.shr_u - (i32.shl - (local.get $1) + ) + ) + (then + (block + (local.set $7 + (local.get $2) + ) + (local.set $0 + (local.get $1) + ) + (br $while-in28) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $7) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $7) + (local.get $6) + ) + (i32.store offset=24 + (local.get $6) + (local.get $0) + ) + (i32.store offset=12 + (local.get $6) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $6) + ) + (br $do-once25) + ) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (local.tee $2 + (i32.load + (local.tee $3 + (i32.add (local.get $0) + (i32.const 8) ) - (i32.const 15) ) ) ) - (i32.const 7) + (local.tee $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (local.get $0) + (local.get $1) ) ) - (i32.const 1) - ) - (i32.shl - (local.get $0) - (i32.const 1) - ) - ) - ) - (i32.const 0) - ) - ) - (i32.const 2) - ) - (i32.const 480) - ) - ) - (i32.store offset=28 - (local.get $6) - (local.get $7) - ) - (i32.store offset=4 - (local.tee $0 - (i32.add - (local.get $6) - (i32.const 16) - ) - ) - (i32.const 0) - ) - (i32.store - (local.get $0) - (i32.const 0) - ) - (if - (i32.eqz - (i32.and - (local.tee $1 - (i32.load - (i32.const 180) - ) - ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $7) - ) - ) - ) - ) - (block - (i32.store - (i32.const 180) - (i32.or - (local.get $1) - (local.get $0) - ) - ) - (i32.store - (local.get $2) - (local.get $6) - ) - (i32.store offset=24 - (local.get $6) - (local.get $2) - ) - (i32.store offset=12 - (local.get $6) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $6) - ) - (br $do-once25) - ) - ) - (local.set $7 - (i32.shl - (local.get $3) - (select - (i32.const 0) - (i32.sub - (i32.const 25) - (i32.shr_u - (local.get $7) - (i32.const 1) - ) - ) - (i32.eq - (local.get $7) - (i32.const 31) - ) - ) - ) - ) - (local.set $0 - (i32.load - (local.get $2) - ) - ) - (block $__rjto$1 - (block $__rjti$1 - (loop $while-in28 - (br_if $__rjti$1 - (i32.eq - (i32.and - (i32.load offset=4 - (local.get $0) - ) - (i32.const -8) - ) - (local.get $3) - ) - ) - (local.set $2 - (i32.shl - (local.get $7) - (i32.const 1) - ) - ) - (if - (local.tee $1 - (i32.load - (local.tee $7 - (i32.add - (i32.add - (local.get $0) - (i32.const 16) - ) - (i32.shl - (i32.shr_u - (local.get $7) - (i32.const 31) + (then + (block + (i32.store offset=12 + (local.get $2) + (local.get $6) + ) + (i32.store + (local.get $3) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $2) + ) + (i32.store offset=12 + (local.get $6) + (local.get $0) + ) + (i32.store offset=24 + (local.get $6) + (i32.const 0) + ) ) - (i32.const 2) + ) + (else + (call $_abort) ) ) ) ) ) - (block - (local.set $7 - (local.get $2) - ) - (local.set $0 - (local.get $1) - ) - (br $while-in28) - ) ) ) - (if - (i32.lt_u - (local.get $7) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (i32.store - (local.get $7) - (local.get $6) - ) - (i32.store offset=24 - (local.get $6) - (local.get $0) - ) - (i32.store offset=12 - (local.get $6) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $6) - ) - (br $do-once25) + (return + (i32.add + (local.get $4) + (i32.const 8) ) ) - (br $__rjto$1) ) - (if - (i32.and - (i32.ge_u - (local.tee $2 - (i32.load - (local.tee $3 - (i32.add - (local.get $0) - (i32.const 8) - ) - ) - ) - ) - (local.tee $1 - (i32.load - (i32.const 192) - ) - ) - ) - (i32.ge_u - (local.get $0) - (local.get $1) - ) - ) - (block - (i32.store offset=12 - (local.get $2) - (local.get $6) - ) - (i32.store - (local.get $3) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $2) - ) - (i32.store offset=12 - (local.get $6) - (local.get $0) - ) - (i32.store offset=24 - (local.get $6) - (i32.const 0) - ) - ) - (call $_abort) + ) + (else + (local.set $0 + (local.get $2) ) ) ) ) + (else + (local.set $0 + (local.get $2) + ) + ) ) - (return - (i32.add - (local.get $4) - (i32.const 8) - ) - ) ) + ) + (else (local.set $0 (local.get $2) ) ) - (local.set $0 - (local.get $2) - ) ) ) - (local.set $0 - (local.get $2) - ) ) ) ) @@ -23425,97 +24679,103 @@ ) (local.get $0) ) - (block - (local.set $2 - (i32.load - (i32.const 196) - ) - ) - (if - (i32.gt_u - (local.tee $3 - (i32.sub - (local.get $1) - (local.get $0) - ) + (then + (block + (local.set $2 + (i32.load + (i32.const 196) ) - (i32.const 15) ) - (block - (i32.store - (i32.const 196) - (local.tee $1 - (i32.add - (local.get $2) + (if + (i32.gt_u + (local.tee $3 + (i32.sub + (local.get $1) (local.get $0) ) ) + (i32.const 15) ) - (i32.store - (i32.const 184) - (local.get $3) - ) - (i32.store offset=4 - (local.get $1) - (i32.or - (local.get $3) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $1) - (local.get $3) - ) - (local.get $3) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $0) - (i32.const 3) - ) - ) - ) - (block - (i32.store - (i32.const 184) - (i32.const 0) - ) - (i32.store - (i32.const 196) - (i32.const 0) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $1) - (i32.const 3) - ) - ) - (i32.store - (local.tee $0 - (i32.add + (then + (block + (i32.store + (i32.const 196) + (local.tee $1 + (i32.add + (local.get $2) + (local.get $0) + ) + ) + ) + (i32.store + (i32.const 184) + (local.get $3) + ) + (i32.store offset=4 + (local.get $1) + (i32.or + (local.get $3) + (i32.const 1) + ) + ) + (i32.store (i32.add - (local.get $2) (local.get $1) + (local.get $3) + ) + (local.get $3) + ) + (i32.store offset=4 + (local.get $2) + (i32.or + (local.get $0) + (i32.const 3) ) - (i32.const 4) ) ) - (i32.or - (i32.load - (local.get $0) + ) + (else + (block + (i32.store + (i32.const 184) + (i32.const 0) + ) + (i32.store + (i32.const 196) + (i32.const 0) + ) + (i32.store offset=4 + (local.get $2) + (i32.or + (local.get $1) + (i32.const 3) + ) + ) + (i32.store + (local.tee $0 + (i32.add + (i32.add + (local.get $2) + (local.get $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (local.get $0) + ) + (i32.const 1) + ) ) - (i32.const 1) ) ) ) - ) - (return - (i32.add - (local.get $2) - (i32.const 8) + (return + (i32.add + (local.get $2) + (i32.const 8) + ) ) ) ) @@ -23536,54 +24796,60 @@ (i32.const 648) ) ) - (if - (i32.and - (i32.add - (local.tee $1 - (call $_sysconf - (i32.const 30) + (then + (if + (i32.and + (i32.add + (local.tee $1 + (call $_sysconf + (i32.const 30) + ) ) + (i32.const -1) ) - (i32.const -1) - ) - (local.get $1) - ) - (call $_abort) - (block - (i32.store - (i32.const 656) (local.get $1) ) - (i32.store - (i32.const 652) - (local.get $1) - ) - (i32.store - (i32.const 660) - (i32.const -1) - ) - (i32.store - (i32.const 664) - (i32.const -1) - ) - (i32.store - (i32.const 668) - (i32.const 0) - ) - (i32.store - (i32.const 620) - (i32.const 0) + (then + (call $_abort) ) - (i32.store - (i32.const 648) - (i32.xor - (i32.and - (call $_time - (i32.const 0) + (else + (block + (i32.store + (i32.const 656) + (local.get $1) + ) + (i32.store + (i32.const 652) + (local.get $1) + ) + (i32.store + (i32.const 660) + (i32.const -1) + ) + (i32.store + (i32.const 664) + (i32.const -1) + ) + (i32.store + (i32.const 668) + (i32.const 0) + ) + (i32.store + (i32.const 620) + (i32.const 0) + ) + (i32.store + (i32.const 648) + (i32.xor + (i32.and + (call $_time + (i32.const 0) + ) + (i32.const -16) + ) + (i32.const 1431655768) ) - (i32.const -16) ) - (i32.const 1431655768) ) ) ) @@ -23618,8 +24884,10 @@ ) (local.get $0) ) - (return - (i32.const 0) + (then + (return + (i32.const 0) + ) ) ) (if @@ -23628,29 +24896,33 @@ (i32.const 616) ) ) - (if - (i32.or - (i32.le_u - (local.tee $1 - (i32.add - (local.tee $3 - (i32.load - (i32.const 608) + (then + (if + (i32.or + (i32.le_u + (local.tee $1 + (i32.add + (local.tee $3 + (i32.load + (i32.const 608) + ) ) + (local.get $5) ) - (local.get $5) ) + (local.get $3) + ) + (i32.gt_u + (local.get $1) + (local.get $2) ) - (local.get $3) ) - (i32.gt_u - (local.get $1) - (local.get $2) + (then + (return + (i32.const 0) + ) ) ) - (return - (i32.const 0) - ) ) ) (local.set $11 @@ -23669,317 +24941,353 @@ ) (i32.const 4) ) - ) - (block - (block $label$break$L279 - (block $__rjti$5 - (block $__rjti$4 - (br_if $__rjti$4 - (i32.eqz - (local.tee $4 - (i32.load - (i32.const 200) + ) + (then + (block + (block $label$break$L279 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (local.tee $4 + (i32.load + (i32.const 200) + ) ) ) ) - ) - (local.set $1 - (i32.const 624) - ) - (loop $while-in34 - (block $while-out33 - (if - (i32.le_u - (local.tee $3 - (i32.load - (local.get $1) - ) - ) - (local.get $4) - ) + (local.set $1 + (i32.const 624) + ) + (loop $while-in34 + (block $while-out33 (if - (i32.gt_u - (i32.add - (local.get $3) + (i32.le_u + (local.tee $3 (i32.load - (local.tee $2 - (i32.add + (local.get $1) + ) + ) + (local.get $4) + ) + (then + (if + (i32.gt_u + (i32.add + (local.get $3) + (i32.load + (local.tee $2 + (i32.add + (local.get $1) + (i32.const 4) + ) + ) + ) + ) + (local.get $4) + ) + (then + (block + (local.set $4 (local.get $1) - (i32.const 4) ) + (br $while-out33) ) ) ) - (local.get $4) ) - (block - (local.set $4 + ) + (br_if $while-in34 + (local.tee $1 + (i32.load offset=8 (local.get $1) ) - (br $while-out33) ) ) + (br $__rjti$4) ) - (br_if $while-in34 - (local.tee $1 - (i32.load offset=8 - (local.get $1) + ) + (if + (i32.lt_u + (local.tee $3 + (i32.and + (i32.sub + (local.get $6) + (i32.load + (i32.const 188) + ) + ) + (local.get $9) + ) + ) + (i32.const 2147483647) + ) + (then + (if + (i32.eq + (local.tee $1 + (call $_sbrk + (local.get $3) + ) + ) + (i32.add + (i32.load + (local.get $4) + ) + (i32.load + (local.get $2) + ) + ) + ) + (then + (br_if $__rjti$13 + (i32.ne + (local.get $1) + (i32.const -1) + ) + ) + ) + (else + (block + (local.set $2 + (local.get $1) + ) + (br $__rjti$5) + ) ) ) ) - (br $__rjti$4) ) + (br $label$break$L279) ) (if - (i32.lt_u - (local.tee $3 - (i32.and - (i32.sub - (local.get $6) - (i32.load - (i32.const 188) - ) - ) - (local.get $9) + (i32.ne + (local.tee $1 + (call $_sbrk + (i32.const 0) ) ) - (i32.const 2147483647) + (i32.const -1) ) - (if - (i32.eq - (local.tee $1 - (call $_sbrk + (then + (block + (local.set $3 + (if (result i32) + (i32.and + (local.tee $2 + (i32.add + (local.tee $4 + (i32.load + (i32.const 652) + ) + ) + (i32.const -1) + ) + ) + (local.tee $3 + (local.get $1) + ) + ) + (then + (i32.add + (i32.sub + (local.get $5) + (local.get $3) + ) + (i32.and + (i32.add + (local.get $2) + (local.get $3) + ) + (i32.sub + (i32.const 0) + (local.get $4) + ) + ) + ) + ) + (else + (local.get $5) + ) + ) + ) + (local.set $9 + (i32.add + (local.tee $4 + (i32.load + (i32.const 608) + ) + ) (local.get $3) ) ) - (i32.add - (i32.load - (local.get $4) + (if + (i32.and + (i32.gt_u + (local.get $3) + (local.get $0) + ) + (i32.lt_u + (local.get $3) + (i32.const 2147483647) + ) ) - (i32.load - (local.get $2) + (then + (block + (if + (local.tee $2 + (i32.load + (i32.const 616) + ) + ) + (then + (br_if $label$break$L279 + (i32.or + (i32.le_u + (local.get $9) + (local.get $4) + ) + (i32.gt_u + (local.get $9) + (local.get $2) + ) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (local.tee $2 + (call $_sbrk + (local.get $3) + ) + ) + (local.get $1) + ) + ) + (br $__rjti$5) + ) ) ) ) - (br_if $__rjti$13 - (i32.ne - (local.get $1) - (i32.const -1) - ) - ) - (block - (local.set $2 - (local.get $1) - ) - (br $__rjti$5) - ) ) ) (br $label$break$L279) ) + (local.set $1 + (local.get $3) + ) + (local.set $4 + (i32.sub + (i32.const 0) + (local.get $1) + ) + ) (if - (i32.ne - (local.tee $1 - (call $_sbrk - (i32.const 0) + (i32.and + (i32.gt_u + (local.get $11) + (local.get $1) + ) + (i32.and + (i32.lt_u + (local.get $1) + (i32.const 2147483647) + ) + (i32.ne + (local.get $2) + (i32.const -1) ) ) - (i32.const -1) ) - (block - (local.set $3 - (if (result i32) - (i32.and - (local.tee $2 - (i32.add - (local.tee $4 - (i32.load - (i32.const 652) - ) - ) - (i32.const -1) - ) - ) - (local.tee $3 - (local.get $1) - ) - ) - (i32.add - (i32.sub - (local.get $5) - (local.get $3) - ) + (then + (if + (i32.lt_u + (local.tee $3 (i32.and (i32.add - (local.get $2) - (local.get $3) + (i32.sub + (local.get $8) + (local.get $1) + ) + (local.tee $3 + (i32.load + (i32.const 656) + ) + ) ) (i32.sub (i32.const 0) - (local.get $4) + (local.get $3) ) ) ) - (local.get $5) - ) - ) - (local.set $9 - (i32.add - (local.tee $4 - (i32.load - (i32.const 608) - ) - ) - (local.get $3) - ) - ) - (if - (i32.and - (i32.gt_u - (local.get $3) - (local.get $0) - ) - (i32.lt_u - (local.get $3) - (i32.const 2147483647) - ) + (i32.const 2147483647) ) - (block + (then (if - (local.tee $2 - (i32.load - (i32.const 616) + (i32.eq + (call $_sbrk + (local.get $3) ) + (i32.const -1) ) - (br_if $label$break$L279 - (i32.or - (i32.le_u - (local.get $9) - (local.get $4) - ) - (i32.gt_u - (local.get $9) - (local.get $2) + (then + (block + (drop + (call $_sbrk + (local.get $4) + ) ) + (br $label$break$L279) ) ) - ) - (br_if $__rjti$13 - (i32.eq - (local.tee $2 - (call $_sbrk + (else + (local.set $3 + (i32.add (local.get $3) + (local.get $1) ) ) - (local.get $1) ) ) - (br $__rjti$5) + ) + (else + (local.set $3 + (local.get $1) + ) ) ) ) - ) - (br $label$break$L279) - ) - (local.set $1 - (local.get $3) - ) - (local.set $4 - (i32.sub - (i32.const 0) - (local.get $1) - ) - ) - (if - (i32.and - (i32.gt_u - (local.get $11) - (local.get $1) - ) - (i32.and - (i32.lt_u + (else + (local.set $3 (local.get $1) - (i32.const 2147483647) - ) - (i32.ne - (local.get $2) - (i32.const -1) ) ) ) (if - (i32.lt_u - (local.tee $3 - (i32.and - (i32.add - (i32.sub - (local.get $8) - (local.get $1) - ) - (local.tee $3 - (i32.load - (i32.const 656) - ) - ) - ) - (i32.sub - (i32.const 0) - (local.get $3) - ) - ) - ) - (i32.const 2147483647) + (i32.ne + (local.get $2) + (i32.const -1) ) - (if - (i32.eq - (call $_sbrk - (local.get $3) - ) - (i32.const -1) - ) + (then (block - (drop - (call $_sbrk - (local.get $4) - ) - ) - (br $label$break$L279) - ) - (local.set $3 - (i32.add - (local.get $3) - (local.get $1) + (local.set $1 + (local.get $2) ) + (br $__rjti$13) ) ) - (local.set $3 - (local.get $1) - ) - ) - (local.set $3 - (local.get $1) ) ) - (if - (i32.ne - (local.get $2) - (i32.const -1) - ) - (block - (local.set $1 - (local.get $2) + (i32.store + (i32.const 620) + (i32.or + (i32.load + (i32.const 620) ) - (br $__rjti$13) - ) - ) - ) - (i32.store - (i32.const 620) - (i32.or - (i32.load - (i32.const 620) + (i32.const 4) ) - (i32.const 4) ) ) ) @@ -23989,42 +25297,46 @@ (local.get $5) (i32.const 2147483647) ) - (if - (i32.and - (i32.lt_u - (local.tee $1 - (call $_sbrk - (local.get $5) + (then + (if + (i32.and + (i32.lt_u + (local.tee $1 + (call $_sbrk + (local.get $5) + ) ) - ) - (local.tee $3 - (call $_sbrk - (i32.const 0) + (local.tee $3 + (call $_sbrk + (i32.const 0) + ) ) ) - ) - (i32.and - (i32.ne - (local.get $1) - (i32.const -1) - ) - (i32.ne - (local.get $3) - (i32.const -1) - ) - ) - ) - (br_if $__rjti$13 - (i32.gt_u - (local.tee $3 - (i32.sub - (local.get $3) + (i32.and + (i32.ne (local.get $1) + (i32.const -1) + ) + (i32.ne + (local.get $3) + (i32.const -1) ) ) - (i32.add - (local.get $0) - (i32.const 40) + ) + (then + (br_if $__rjti$13 + (i32.gt_u + (local.tee $3 + (i32.sub + (local.get $3) + (local.get $1) + ) + ) + (i32.add + (local.get $0) + (i32.const 40) + ) + ) ) ) ) @@ -24050,9 +25362,11 @@ (i32.const 612) ) ) - (i32.store - (i32.const 612) - (local.get $2) + (then + (i32.store + (i32.const 612) + (local.get $2) + ) ) ) (block $do-once40 @@ -24062,2134 +25376,2286 @@ (i32.const 200) ) ) - (block - (local.set $2 - (i32.const 624) - ) - (block $__rjto$10 - (block $__rjti$10 - (loop $while-in45 - (br_if $__rjti$10 - (i32.eq - (local.get $1) - (i32.add - (local.tee $11 - (i32.load - (local.get $2) + (then + (block + (local.set $2 + (i32.const 624) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $while-in45 + (br_if $__rjti$10 + (i32.eq + (local.get $1) + (i32.add + (local.tee $11 + (i32.load + (local.get $2) + ) ) - ) - (local.tee $5 - (i32.load - (local.tee $4 - (i32.add - (local.get $2) - (i32.const 4) + (local.tee $5 + (i32.load + (local.tee $4 + (i32.add + (local.get $2) + (i32.const 4) + ) ) ) ) ) ) ) - ) - (br_if $while-in45 - (local.tee $2 - (i32.load offset=8 - (local.get $2) + (br_if $while-in45 + (local.tee $2 + (i32.load offset=8 + (local.get $2) + ) ) ) ) - ) - (br $__rjto$10) - ) - (if - (i32.eqz - (i32.and - (i32.load offset=12 - (local.get $2) - ) - (i32.const 8) - ) + (br $__rjto$10) ) (if - (i32.and - (i32.lt_u - (local.get $6) - (local.get $1) - ) - (i32.ge_u - (local.get $6) - (local.get $11) + (i32.eqz + (i32.and + (i32.load offset=12 + (local.get $2) + ) + (i32.const 8) ) ) - (block - (i32.store - (local.get $4) - (i32.add - (local.get $5) - (local.get $3) + (then + (if + (i32.and + (i32.lt_u + (local.get $6) + (local.get $1) + ) + (i32.ge_u + (local.get $6) + (local.get $11) + ) ) - ) - (local.set $2 - (i32.add - (local.get $6) - (local.tee $1 - (select - (i32.and - (i32.sub - (i32.const 0) - (local.tee $1 - (i32.add - (local.get $6) - (i32.const 8) + (then + (block + (i32.store + (local.get $4) + (i32.add + (local.get $5) + (local.get $3) + ) + ) + (local.set $2 + (i32.add + (local.get $6) + (local.tee $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (local.tee $1 + (i32.add + (local.get $6) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (local.get $1) + (i32.const 7) ) ) ) - (i32.const 7) ) - (i32.const 0) - (i32.and + ) + (local.set $1 + (i32.add + (i32.sub + (local.get $3) + (local.get $1) + ) + (i32.load + (i32.const 188) + ) + ) + ) + (i32.store + (i32.const 200) + (local.get $2) + ) + (i32.store + (i32.const 188) + (local.get $1) + ) + (i32.store offset=4 + (local.get $2) + (i32.or (local.get $1) - (i32.const 7) + (i32.const 1) ) ) + (i32.store offset=4 + (i32.add + (local.get $2) + (local.get $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) + ) + (br $do-once40) ) ) ) - (local.set $1 - (i32.add - (i32.sub - (local.get $3) - (local.get $1) - ) - (i32.load - (i32.const 188) - ) - ) - ) - (i32.store - (i32.const 200) - (local.get $2) + ) + ) + ) + (if + (i32.lt_u + (local.get $1) + (local.tee $4 + (i32.load + (i32.const 192) ) + ) + ) + (then + (block (i32.store - (i32.const 188) + (i32.const 192) (local.get $1) ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $1) - (i32.const 1) - ) - ) - (i32.store offset=4 - (i32.add - (local.get $2) - (local.get $1) - ) - (i32.const 40) - ) - (i32.store - (i32.const 204) - (i32.load - (i32.const 664) - ) + (local.set $4 + (local.get $1) ) - (br $do-once40) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $1) - (local.tee $4 - (i32.load - (i32.const 192) ) ) ) - (block - (i32.store - (i32.const 192) - (local.get $1) - ) - (local.set $4 + (local.set $11 + (i32.add (local.get $1) + (local.get $3) ) ) - ) - (local.set $11 - (i32.add - (local.get $1) - (local.get $3) - ) - ) - (local.set $2 - (i32.const 624) - ) - (block $__rjto$11 - (block $__rjti$11 - (loop $while-in47 - (if - (i32.eq - (i32.load - (local.get $2) - ) - (local.get $11) - ) - (block - (local.set $5 - (local.get $2) - ) - (br $__rjti$11) - ) - ) - (br_if $while-in47 - (local.tee $2 - (i32.load offset=8 - (local.get $2) - ) - ) - ) - (local.set $4 - (i32.const 624) - ) - ) - (br $__rjto$11) + (local.set $2 + (i32.const 624) ) - (if - (i32.and - (i32.load offset=12 - (local.get $2) - ) - (i32.const 8) - ) - (local.set $4 - (i32.const 624) - ) - (block - (i32.store - (local.get $5) - (local.get $1) - ) - (i32.store - (local.tee $2 - (i32.add - (local.get $2) - (i32.const 4) - ) - ) - (i32.add - (i32.load - (local.get $2) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in47 + (if + (i32.eq + (i32.load + (local.get $2) + ) + (local.get $11) ) - (local.get $3) - ) - ) - (local.set $8 - (i32.add - (local.tee $9 - (i32.add - (local.get $1) - (select - (i32.and - (i32.sub - (i32.const 0) - (local.tee $1 - (i32.add - (local.get $1) - (i32.const 8) - ) - ) - ) - (i32.const 7) - ) - (i32.const 0) - (i32.and - (local.get $1) - (i32.const 7) - ) + (then + (block + (local.set $5 + (local.get $2) ) + (br $__rjti$11) ) ) - (local.get $0) ) - ) - (local.set $7 - (i32.sub - (i32.sub - (local.tee $5 - (i32.add - (local.get $11) - (select - (i32.and - (i32.sub - (i32.const 0) - (local.tee $1 - (i32.add - (local.get $11) - (i32.const 8) - ) - ) - ) - (i32.const 7) - ) - (i32.const 0) - (i32.and - (local.get $1) - (i32.const 7) - ) - ) - ) + (br_if $while-in47 + (local.tee $2 + (i32.load offset=8 + (local.get $2) ) - (local.get $9) ) - (local.get $0) + ) + (local.set $4 + (i32.const 624) ) ) - (i32.store offset=4 - (local.get $9) - (i32.or - (local.get $0) - (i32.const 3) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (local.get $2) ) + (i32.const 8) ) - (block $do-once48 - (if - (i32.eq + (then + (local.set $4 + (i32.const 624) + ) + ) + (else + (block + (i32.store (local.get $5) - (local.get $6) + (local.get $1) ) - (block - (i32.store - (i32.const 188) - (local.tee $0 + (i32.store + (local.tee $2 + (i32.add + (local.get $2) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (local.get $2) + ) + (local.get $3) + ) + ) + (local.set $8 + (i32.add + (local.tee $9 (i32.add - (i32.load - (i32.const 188) + (local.get $1) + (select + (i32.and + (i32.sub + (i32.const 0) + (local.tee $1 + (i32.add + (local.get $1) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (local.get $1) + (i32.const 7) + ) ) - (local.get $7) ) ) + (local.get $0) ) - (i32.store - (i32.const 200) - (local.get $8) - ) - (i32.store offset=4 - (local.get $8) - (i32.or - (local.get $0) - (i32.const 1) + ) + (local.set $7 + (i32.sub + (i32.sub + (local.tee $5 + (i32.add + (local.get $11) + (select + (i32.and + (i32.sub + (i32.const 0) + (local.tee $1 + (i32.add + (local.get $11) + (i32.const 8) + ) + ) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (local.get $1) + (i32.const 7) + ) + ) + ) + ) + (local.get $9) ) + (local.get $0) ) ) - (block + (i32.store offset=4 + (local.get $9) + (i32.or + (local.get $0) + (i32.const 3) + ) + ) + (block $do-once48 (if (i32.eq (local.get $5) - (i32.load - (i32.const 196) - ) + (local.get $6) ) - (block - (i32.store - (i32.const 184) - (local.tee $0 - (i32.add - (i32.load - (i32.const 184) + (then + (block + (i32.store + (i32.const 188) + (local.tee $0 + (i32.add + (i32.load + (i32.const 188) + ) + (local.get $7) ) - (local.get $7) ) ) - ) - (i32.store - (i32.const 196) - (local.get $8) - ) - (i32.store offset=4 - (local.get $8) - (i32.or - (local.get $0) - (i32.const 1) + (i32.store + (i32.const 200) + (local.get $8) ) - ) - (i32.store - (i32.add + (i32.store offset=4 (local.get $8) - (local.get $0) + (i32.or + (local.get $0) + (i32.const 1) + ) ) - (local.get $0) ) - (br $do-once48) ) - ) - (i32.store - (local.tee $0 - (i32.add - (local.tee $0 - (if (result i32) - (i32.eq - (i32.and + (else + (block + (if + (i32.eq + (local.get $5) + (i32.load + (i32.const 196) + ) + ) + (then + (block + (i32.store + (i32.const 184) (local.tee $0 - (i32.load offset=4 - (local.get $5) + (i32.add + (i32.load + (i32.const 184) + ) + (local.get $7) ) ) - (i32.const 3) ) - (i32.const 1) - ) - (block (result i32) - (local.set $11 - (i32.and + (i32.store + (i32.const 196) + (local.get $8) + ) + (i32.store offset=4 + (local.get $8) + (i32.or (local.get $0) - (i32.const -8) + (i32.const 1) ) ) - (local.set $1 - (i32.shr_u + (i32.store + (i32.add + (local.get $8) (local.get $0) - (i32.const 3) ) + (local.get $0) ) - (block $label$break$L331 - (if - (i32.lt_u - (local.get $0) - (i32.const 256) - ) - (block - (local.set $2 - (i32.load offset=12 - (local.get $5) - ) - ) - (block $do-once51 - (if - (i32.ne - (local.tee $3 - (i32.load offset=8 - (local.get $5) - ) - ) - (local.tee $0 - (i32.add - (i32.shl - (local.get $1) - (i32.const 3) - ) - (i32.const 216) - ) - ) - ) - (block - (if - (i32.lt_u - (local.get $3) - (local.get $4) - ) - (call $_abort) - ) - (br_if $do-once51 - (i32.eq - (i32.load offset=12 - (local.get $3) - ) - (local.get $5) - ) - ) - (call $_abort) + (br $do-once48) + ) + ) + ) + (i32.store + (local.tee $0 + (i32.add + (local.tee $0 + (if (result i32) + (i32.eq + (i32.and + (local.tee $0 + (i32.load offset=4 + (local.get $5) ) ) + (i32.const 3) ) - (if - (i32.eq - (local.get $2) - (local.get $3) - ) - (block - (i32.store - (i32.const 176) - (i32.and - (i32.load - (i32.const 176) - ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $1) - ) - (i32.const -1) - ) - ) + (i32.const 1) + ) + (then + (block (result i32) + (local.set $11 + (i32.and + (local.get $0) + (i32.const -8) ) - (br $label$break$L331) ) - ) - (block $do-once53 - (if - (i32.eq - (local.get $2) + (local.set $1 + (i32.shr_u (local.get $0) + (i32.const 3) ) - (local.set $15 - (i32.add - (local.get $2) - (i32.const 8) - ) - ) - (block - (if - (i32.lt_u - (local.get $2) - (local.get $4) - ) - (call $_abort) + ) + (block $label$break$L331 + (if + (i32.lt_u + (local.get $0) + (i32.const 256) ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add + (then + (block + (local.set $2 + (i32.load offset=12 + (local.get $5) + ) + ) + (block $do-once51 + (if + (i32.ne + (local.tee $3 + (i32.load offset=8 + (local.get $5) + ) + ) + (local.tee $0 + (i32.add + (i32.shl + (local.get $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (then + (block + (if + (i32.lt_u + (local.get $3) + (local.get $4) + ) + (then + (call $_abort) + ) + ) + (br_if $do-once51 + (i32.eq + (i32.load offset=12 + (local.get $3) + ) + (local.get $5) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (i32.eq + (local.get $2) + (local.get $3) + ) + (then + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) + ) + ) + ) + (block $do-once53 + (if + (i32.eq (local.get $2) - (i32.const 8) + (local.get $0) + ) + (then + (local.set $15 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + ) + (else + (block + (if + (i32.lt_u + (local.get $2) + (local.get $4) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + ) + (local.get $5) + ) + (then + (block + (local.set $15 + (local.get $0) + ) + (br $do-once53) + ) + ) + ) + (call $_abort) + ) ) ) ) - (local.get $5) - ) - (block - (local.set $15 - (local.get $0) + (i32.store offset=12 + (local.get $3) + (local.get $2) + ) + (i32.store + (local.get $15) + (local.get $3) ) - (br $do-once53) - ) - ) - (call $_abort) - ) - ) - ) - (i32.store offset=12 - (local.get $3) - (local.get $2) - ) - (i32.store - (local.get $15) - (local.get $3) - ) - ) - (block - (local.set $6 - (i32.load offset=24 - (local.get $5) - ) - ) - (block $do-once55 - (if - (i32.eq - (local.tee $0 - (i32.load offset=12 - (local.get $5) ) ) - (local.get $5) - ) - (block - (if - (i32.eqz - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add - (local.tee $3 - (i32.add + (else + (block + (local.set $6 + (i32.load offset=24 + (local.get $5) + ) + ) + (block $do-once55 + (if + (i32.eq + (local.tee $0 + (i32.load offset=12 + (local.get $5) + ) + ) + (local.get $5) + ) + (then + (block + (if + (i32.eqz + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.tee $3 + (i32.add + (local.get $5) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (then + (if + (local.tee $1 + (i32.load + (local.get $3) + ) + ) + (then + (local.set $0 + (local.get $3) + ) + ) + (else + (block + (local.set $12 + (i32.const 0) + ) + (br $do-once55) + ) + ) + ) + ) + ) + (loop $while-in58 + (if + (local.tee $3 + (i32.load + (local.tee $2 + (i32.add + (local.get $1) + (i32.const 20) + ) + ) + ) + ) + (then + (block + (local.set $1 + (local.get $3) + ) + (local.set $0 + (local.get $2) + ) + (br $while-in58) + ) + ) + ) + (if + (local.tee $3 + (i32.load + (local.tee $2 + (i32.add + (local.get $1) + (i32.const 16) + ) + ) + ) + ) + (then + (block + (local.set $1 + (local.get $3) + ) + (local.set $0 + (local.get $2) + ) + (br $while-in58) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $0) + (local.get $4) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $0) + (i32.const 0) + ) + (local.set $12 + (local.get $1) + ) + ) + ) + ) + ) + ) + (else + (block + (if + (i32.lt_u + (local.tee $2 + (i32.load offset=8 + (local.get $5) + ) + ) + (local.get $4) + ) + (then + (call $_abort) + ) + ) + (if + (i32.ne + (i32.load + (local.tee $3 + (i32.add + (local.get $2) + (i32.const 12) + ) + ) + ) (local.get $5) - (i32.const 16) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $1 + (i32.add + (local.get $0) + (i32.const 8) + ) + ) + ) + (local.get $5) + ) + (then + (block + (i32.store + (local.get $3) + (local.get $0) + ) + (i32.store + (local.get $1) + (local.get $2) + ) + (local.set $12 + (local.get $0) + ) + ) + ) + (else + (call $_abort) ) ) - (i32.const 4) ) ) ) ) - ) - (if - (local.tee $1 - (i32.load - (local.get $3) - ) - ) - (local.set $0 - (local.get $3) - ) - (block - (local.set $12 - (i32.const 0) + (br_if $label$break$L331 + (i32.eqz + (local.get $6) ) - (br $do-once55) ) - ) - ) - (loop $while-in58 - (if - (local.tee $3 - (i32.load - (local.tee $2 - (i32.add - (local.get $1) - (i32.const 20) + (block $do-once59 + (if + (i32.eq + (local.get $5) + (i32.load + (local.tee $0 + (i32.add + (i32.shl + (local.tee $1 + (i32.load offset=28 + (local.get $5) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) ) ) - ) - ) - (block - (local.set $1 - (local.get $3) - ) - (local.set $0 - (local.get $2) - ) - (br $while-in58) - ) - ) - (if - (local.tee $3 - (i32.load - (local.tee $2 - (i32.add - (local.get $1) - (i32.const 16) + (then + (block + (i32.store + (local.get $0) + (local.get $12) + ) + (br_if $do-once59 + (local.get $12) + ) + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L331) ) ) - ) - ) - (block - (local.set $1 - (local.get $3) - ) - (local.set $0 - (local.get $2) - ) - (br $while-in58) - ) - ) - ) - (if - (i32.lt_u - (local.get $0) - (local.get $4) - ) - (call $_abort) - (block - (i32.store - (local.get $0) - (i32.const 0) - ) - (local.set $12 - (local.get $1) - ) - ) - ) - ) - (block - (if - (i32.lt_u - (local.tee $2 - (i32.load offset=8 - (local.get $5) - ) - ) - (local.get $4) - ) - (call $_abort) - ) - (if - (i32.ne - (i32.load - (local.tee $3 - (i32.add - (local.get $2) - (i32.const 12) - ) - ) - ) - (local.get $5) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $1 - (i32.add - (local.get $0) - (i32.const 8) + (else + (block + (if + (i32.lt_u + (local.get $6) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $6) + (i32.const 16) + ) + ) + ) + (local.get $5) + ) + (then + (i32.store + (local.get $0) + (local.get $12) + ) + ) + (else + (i32.store offset=20 + (local.get $6) + (local.get $12) + ) + ) + ) + (br_if $label$break$L331 + (i32.eqz + (local.get $12) + ) + ) + ) ) ) ) - (local.get $5) - ) - (block - (i32.store - (local.get $3) - (local.get $0) - ) - (i32.store - (local.get $1) - (local.get $2) - ) - (local.set $12 - (local.get $0) - ) - ) - (call $_abort) - ) - ) - ) - ) - (br_if $label$break$L331 - (i32.eqz - (local.get $6) - ) - ) - (block $do-once59 - (if - (i32.eq - (local.get $5) - (i32.load - (local.tee $0 - (i32.add - (i32.shl + (if + (i32.lt_u + (local.get $12) (local.tee $1 - (i32.load offset=28 - (local.get $5) + (i32.load + (i32.const 192) ) ) - (i32.const 2) ) - (i32.const 480) + (then + (call $_abort) + ) ) - ) - ) - ) - (block - (i32.store - (local.get $0) - (local.get $12) - ) - (br_if $do-once59 - (local.get $12) - ) - (i32.store - (i32.const 180) - (i32.and - (i32.load - (i32.const 180) + (i32.store offset=24 + (local.get $12) + (local.get $6) ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $1) + (if + (local.tee $3 + (i32.load + (local.tee $0 + (i32.add + (local.get $5) + (i32.const 16) + ) + ) + ) + ) + (then + (if + (i32.lt_u + (local.get $3) + (local.get $1) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=16 + (local.get $12) + (local.get $3) + ) + (i32.store offset=24 + (local.get $3) + (local.get $12) + ) + ) + ) + ) ) - (i32.const -1) - ) - ) - ) - (br $label$break$L331) - ) - (block - (if - (i32.lt_u - (local.get $6) - (i32.load - (i32.const 192) ) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $6) - (i32.const 16) + (br_if $label$break$L331 + (i32.eqz + (local.tee $0 + (i32.load offset=4 + (local.get $0) + ) + ) + ) + ) + (if + (i32.lt_u + (local.get $0) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=20 + (local.get $12) + (local.get $0) + ) + (i32.store offset=24 + (local.get $0) + (local.get $12) + ) ) ) ) - (local.get $5) - ) - (i32.store - (local.get $0) - (local.get $12) - ) - (i32.store offset=20 - (local.get $6) - (local.get $12) - ) - ) - (br_if $label$break$L331 - (i32.eqz - (local.get $12) - ) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $12) - (local.tee $1 - (i32.load - (i32.const 192) - ) - ) - ) - (call $_abort) - ) - (i32.store offset=24 - (local.get $12) - (local.get $6) - ) - (if - (local.tee $3 - (i32.load - (local.tee $0 - (i32.add - (local.get $5) - (i32.const 16) ) ) ) ) - (if - (i32.lt_u - (local.get $3) - (local.get $1) - ) - (call $_abort) - (block - (i32.store offset=16 - (local.get $12) - (local.get $3) - ) - (i32.store offset=24 - (local.get $3) - (local.get $12) - ) - ) - ) - ) - (br_if $label$break$L331 - (i32.eqz - (local.tee $0 - (i32.load offset=4 - (local.get $0) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $0) - (i32.load - (i32.const 192) + (local.set $7 + (i32.add + (local.get $11) + (local.get $7) ) ) - (call $_abort) - (block - (i32.store offset=20 - (local.get $12) - (local.get $0) - ) - (i32.store offset=24 - (local.get $0) - (local.get $12) - ) + (i32.add + (local.get $5) + (local.get $11) ) ) ) + (else + (local.get $5) + ) ) ) - (local.set $7 - (i32.add - (local.get $11) - (local.get $7) - ) - ) - (i32.add - (local.get $5) - (local.get $11) - ) + (i32.const 4) ) - (local.get $5) + ) + (i32.and + (i32.load + (local.get $0) + ) + (i32.const -2) ) ) - (i32.const 4) - ) - ) - (i32.and - (i32.load - (local.get $0) - ) - (i32.const -2) - ) - ) - (i32.store offset=4 - (local.get $8) - (i32.or - (local.get $7) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $8) - (local.get $7) - ) - (local.get $7) - ) - (local.set $0 - (i32.shr_u - (local.get $7) - (i32.const 3) - ) - ) - (if - (i32.lt_u - (local.get $7) - (i32.const 256) - ) - (block - (local.set $3 - (i32.add - (i32.shl - (local.get $0) + (i32.store offset=4 + (local.get $8) + (i32.or + (local.get $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (local.get $8) + (local.get $7) + ) + (local.get $7) + ) + (local.set $0 + (i32.shr_u + (local.get $7) (i32.const 3) ) - (i32.const 216) ) - ) - (block $do-once63 (if - (i32.and - (local.tee $1 - (i32.load - (i32.const 176) - ) - ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $0) - ) - ) + (i32.lt_u + (local.get $7) + (i32.const 256) ) - (block - (if - (i32.ge_u - (local.tee $0 - (i32.load + (then + (block + (local.set $3 + (i32.add + (i32.shl + (local.get $0) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (block $do-once63 + (if + (i32.and (local.tee $1 - (i32.add + (i32.load + (i32.const 176) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $0) + ) + ) + ) + (then + (block + (if + (i32.ge_u + (local.tee $0 + (i32.load + (local.tee $1 + (i32.add + (local.get $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (block + (local.set $16 + (local.get $1) + ) + (local.set $10 + (local.get $0) + ) + (br $do-once63) + ) + ) + ) + (call $_abort) + ) + ) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (local.set $16 + (i32.add + (local.get $3) + (i32.const 8) + ) + ) + (local.set $10 (local.get $3) - (i32.const 8) ) ) ) ) - (i32.load - (i32.const 192) - ) ) - (block - (local.set $16 - (local.get $1) - ) - (local.set $10 - (local.get $0) - ) - (br $do-once63) + (i32.store + (local.get $16) + (local.get $8) ) - ) - (call $_abort) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (local.get $1) - (local.get $0) + (i32.store offset=12 + (local.get $10) + (local.get $8) ) - ) - (local.set $16 - (i32.add + (i32.store offset=8 + (local.get $8) + (local.get $10) + ) + (i32.store offset=12 + (local.get $8) (local.get $3) - (i32.const 8) ) - ) - (local.set $10 - (local.get $3) + (br $do-once48) ) ) ) - ) - (i32.store - (local.get $16) - (local.get $8) - ) - (i32.store offset=12 - (local.get $10) - (local.get $8) - ) - (i32.store offset=8 - (local.get $8) - (local.get $10) - ) - (i32.store offset=12 - (local.get $8) - (local.get $3) - ) - (br $do-once48) - ) - ) - (local.set $3 - (i32.add - (i32.shl - (local.tee $2 - (block $do-once65 (result i32) - (if (result i32) - (local.tee $0 - (i32.shr_u - (local.get $7) - (i32.const 8) - ) - ) - (block (result i32) - (drop - (br_if $do-once65 - (i32.const 31) - (i32.gt_u - (local.get $7) - (i32.const 16777215) + (local.set $3 + (i32.add + (i32.shl + (local.tee $2 + (block $do-once65 (result i32) + (if (result i32) + (local.tee $0 + (i32.shr_u + (local.get $7) + (i32.const 8) + ) ) - ) - ) - (i32.or - (i32.and - (i32.shr_u - (local.get $7) - (i32.add - (local.tee $0 - (i32.add - (i32.sub - (i32.const 14) - (i32.or - (i32.or - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $0) - (local.tee $3 - (i32.and - (i32.shr_u - (i32.add + (then + (block (result i32) + (drop + (br_if $do-once65 + (i32.const 31) + (i32.gt_u + (local.get $7) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (local.get $7) + (i32.add + (local.tee $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl (local.get $0) - (i32.const 1048320) + (local.tee $3 + (i32.and + (i32.shr_u + (i32.add + (local.get $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) ) - (i32.const 16) ) - (i32.const 8) + (i32.const 520192) ) + (i32.const 16) ) + (i32.const 4) ) ) - (i32.const 520192) + (local.get $3) + ) + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $1) + (local.get $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) ) - (i32.const 16) ) - (i32.const 4) ) - ) - (local.get $3) - ) - (local.tee $0 - (i32.and (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $1) - (local.get $0) - ) - ) - (i32.const 245760) + (i32.shl + (local.get $1) + (local.get $0) ) - (i32.const 16) + (i32.const 15) ) - (i32.const 2) ) ) + (i32.const 7) ) ) - (i32.shr_u - (i32.shl - (local.get $1) - (local.get $0) - ) - (i32.const 15) - ) + (i32.const 1) ) - ) - (i32.const 7) - ) - ) - (i32.const 1) - ) - (i32.shl - (local.get $0) - (i32.const 1) - ) - ) - ) - (i32.const 0) - ) - ) - ) - (i32.const 2) - ) - (i32.const 480) - ) - ) - (i32.store offset=28 - (local.get $8) - (local.get $2) - ) - (i32.store offset=4 - (local.tee $0 - (i32.add - (local.get $8) - (i32.const 16) - ) - ) - (i32.const 0) - ) - (i32.store - (local.get $0) - (i32.const 0) - ) - (if - (i32.eqz - (i32.and - (local.tee $1 - (i32.load - (i32.const 180) - ) - ) - (local.tee $0 - (i32.shl - (i32.const 1) - (local.get $2) - ) - ) - ) - ) - (block - (i32.store - (i32.const 180) - (i32.or - (local.get $1) - (local.get $0) - ) - ) - (i32.store - (local.get $3) - (local.get $8) - ) - (i32.store offset=24 - (local.get $8) - (local.get $3) - ) - (i32.store offset=12 - (local.get $8) - (local.get $8) - ) - (i32.store offset=8 - (local.get $8) - (local.get $8) - ) - (br $do-once48) - ) - ) - (local.set $2 - (i32.shl - (local.get $7) - (select - (i32.const 0) - (i32.sub - (i32.const 25) - (i32.shr_u - (local.get $2) - (i32.const 1) - ) - ) - (i32.eq - (local.get $2) - (i32.const 31) - ) - ) - ) - ) - (local.set $0 - (i32.load - (local.get $3) - ) - ) - (block $__rjto$7 - (block $__rjti$7 - (loop $while-in68 - (br_if $__rjti$7 - (i32.eq - (i32.and - (i32.load offset=4 - (local.get $0) + (i32.shl + (local.get $0) + (i32.const 1) + ) + ) + ) + ) + (else + (i32.const 0) + ) + ) + ) ) - (i32.const -8) + (i32.const 2) ) - (local.get $7) + (i32.const 480) ) ) - (local.set $3 - (i32.shl - (local.get $2) - (i32.const 1) + (i32.store offset=28 + (local.get $8) + (local.get $2) + ) + (i32.store offset=4 + (local.tee $0 + (i32.add + (local.get $8) + (i32.const 16) + ) ) + (i32.const 0) + ) + (i32.store + (local.get $0) + (i32.const 0) ) (if - (local.tee $1 - (i32.load - (local.tee $2 - (i32.add - (i32.add - (local.get $0) - (i32.const 16) - ) - (i32.shl - (i32.shr_u - (local.get $2) - (i32.const 31) - ) - (i32.const 2) - ) + (i32.eqz + (i32.and + (local.tee $1 + (i32.load + (i32.const 180) + ) + ) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $2) ) ) ) ) - (block - (local.set $2 - (local.get $3) - ) - (local.set $0 - (local.get $1) + (then + (block + (i32.store + (i32.const 180) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (i32.store + (local.get $3) + (local.get $8) + ) + (i32.store offset=24 + (local.get $8) + (local.get $3) + ) + (i32.store offset=12 + (local.get $8) + (local.get $8) + ) + (i32.store offset=8 + (local.get $8) + (local.get $8) + ) + (br $do-once48) ) - (br $while-in68) ) ) - ) - (if - (i32.lt_u - (local.get $2) - (i32.load - (i32.const 192) + (local.set $2 + (i32.shl + (local.get $7) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (local.get $2) + (i32.const 1) + ) + ) + (i32.eq + (local.get $2) + (i32.const 31) + ) + ) ) ) - (call $_abort) - (block - (i32.store - (local.get $2) - (local.get $8) - ) - (i32.store offset=24 - (local.get $8) - (local.get $0) - ) - (i32.store offset=12 - (local.get $8) - (local.get $8) - ) - (i32.store offset=8 - (local.get $8) - (local.get $8) + (local.set $0 + (i32.load + (local.get $3) ) - (br $do-once48) ) - ) - (br $__rjto$7) - ) - (if - (i32.and - (i32.ge_u - (local.tee $2 - (i32.load - (local.tee $3 - (i32.add - (local.get $0) - (i32.const 8) + (block $__rjto$7 + (block $__rjti$7 + (loop $while-in68 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (local.get $0) + ) + (i32.const -8) + ) + (local.get $7) + ) + ) + (local.set $3 + (i32.shl + (local.get $2) + (i32.const 1) + ) + ) + (if + (local.tee $1 + (i32.load + (local.tee $2 + (i32.add + (i32.add + (local.get $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (local.get $2) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (then + (block + (local.set $2 + (local.get $3) + ) + (local.set $0 + (local.get $1) + ) + (br $while-in68) + ) ) ) ) - ) - (local.tee $1 - (i32.load - (i32.const 192) + (if + (i32.lt_u + (local.get $2) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $2) + (local.get $8) + ) + (i32.store offset=24 + (local.get $8) + (local.get $0) + ) + (i32.store offset=12 + (local.get $8) + (local.get $8) + ) + (i32.store offset=8 + (local.get $8) + (local.get $8) + ) + (br $do-once48) + ) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (local.tee $2 + (i32.load + (local.tee $3 + (i32.add + (local.get $0) + (i32.const 8) + ) + ) + ) + ) + (local.tee $1 + (i32.load + (i32.const 192) + ) + ) + ) + (i32.ge_u + (local.get $0) + (local.get $1) + ) + ) + (then + (block + (i32.store offset=12 + (local.get $2) + (local.get $8) + ) + (i32.store + (local.get $3) + (local.get $8) + ) + (i32.store offset=8 + (local.get $8) + (local.get $2) + ) + (i32.store offset=12 + (local.get $8) + (local.get $0) + ) + (i32.store offset=24 + (local.get $8) + (i32.const 0) + ) + ) + ) + (else + (call $_abort) ) ) - ) - (i32.ge_u - (local.get $0) - (local.get $1) - ) - ) - (block - (i32.store offset=12 - (local.get $2) - (local.get $8) - ) - (i32.store - (local.get $3) - (local.get $8) - ) - (i32.store offset=8 - (local.get $8) - (local.get $2) - ) - (i32.store offset=12 - (local.get $8) - (local.get $0) - ) - (i32.store offset=24 - (local.get $8) - (i32.const 0) ) ) - (call $_abort) ) ) ) - ) - ) - (return - (i32.add - (local.get $9) - (i32.const 8) + (return + (i32.add + (local.get $9) + (i32.const 8) + ) + ) ) ) ) ) - ) - (loop $while-in70 - (block $while-out69 - (if - (i32.le_u - (local.tee $2 - (i32.load - (local.get $4) + (loop $while-in70 + (block $while-out69 + (if + (i32.le_u + (local.tee $2 + (i32.load + (local.get $4) + ) ) + (local.get $6) ) - (local.get $6) - ) - (br_if $while-out69 - (i32.gt_u - (local.tee $2 - (i32.add - (local.get $2) - (i32.load offset=4 - (local.get $4) + (then + (br_if $while-out69 + (i32.gt_u + (local.tee $2 + (i32.add + (local.get $2) + (i32.load offset=4 + (local.get $4) + ) + ) ) + (local.get $6) ) ) - (local.get $6) ) ) - ) - (local.set $4 - (i32.load offset=8 - (local.get $4) + (local.set $4 + (i32.load offset=8 + (local.get $4) + ) ) + (br $while-in70) ) - (br $while-in70) ) - ) - (local.set $10 - (i32.add - (local.tee $4 - (i32.add - (local.get $2) - (i32.const -47) + (local.set $10 + (i32.add + (local.tee $4 + (i32.add + (local.get $2) + (i32.const -47) + ) ) + (i32.const 8) ) - (i32.const 8) ) - ) - (local.set $12 - (i32.add - (local.tee $11 - (select - (local.get $6) - (local.tee $4 - (i32.add - (local.get $4) - (select - (i32.and - (i32.sub - (i32.const 0) + (local.set $12 + (i32.add + (local.tee $11 + (select + (local.get $6) + (local.tee $4 + (i32.add + (local.get $4) + (select + (i32.and + (i32.sub + (i32.const 0) + (local.get $10) + ) + (i32.const 7) + ) + (i32.const 0) + (i32.and (local.get $10) + (i32.const 7) ) - (i32.const 7) - ) - (i32.const 0) - (i32.and - (local.get $10) - (i32.const 7) ) ) ) - ) - (i32.lt_u - (local.get $4) - (local.tee $10 - (i32.add - (local.get $6) - (i32.const 16) + (i32.lt_u + (local.get $4) + (local.tee $10 + (i32.add + (local.get $6) + (i32.const 16) + ) ) ) ) ) + (i32.const 8) ) - (i32.const 8) ) - ) - (i32.store - (i32.const 200) - (local.tee $5 - (i32.add - (local.get $1) - (local.tee $4 - (select - (i32.and - (i32.sub - (i32.const 0) - (local.tee $4 - (i32.add - (local.get $1) - (i32.const 8) + (i32.store + (i32.const 200) + (local.tee $5 + (i32.add + (local.get $1) + (local.tee $4 + (select + (i32.and + (i32.sub + (i32.const 0) + (local.tee $4 + (i32.add + (local.get $1) + (i32.const 8) + ) ) ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (local.get $4) + (i32.const 7) ) - (i32.const 7) - ) - (i32.const 0) - (i32.and - (local.get $4) - (i32.const 7) ) ) ) ) ) - ) - (i32.store - (i32.const 188) - (local.tee $4 - (i32.sub - (i32.add - (local.get $3) - (i32.const -40) + (i32.store + (i32.const 188) + (local.tee $4 + (i32.sub + (i32.add + (local.get $3) + (i32.const -40) + ) + (local.get $4) ) - (local.get $4) ) ) - ) - (i32.store offset=4 - (local.get $5) - (i32.or - (local.get $4) - (i32.const 1) - ) - ) - (i32.store offset=4 - (i32.add + (i32.store offset=4 (local.get $5) - (local.get $4) - ) - (i32.const 40) - ) - (i32.store - (i32.const 204) - (i32.load - (i32.const 664) + (i32.or + (local.get $4) + (i32.const 1) + ) ) - ) - (i32.store - (local.tee $4 + (i32.store offset=4 (i32.add - (local.get $11) - (i32.const 4) + (local.get $5) + (local.get $4) ) + (i32.const 40) ) - (i32.const 27) - ) - (i32.store - (local.get $12) - (i32.load - (i32.const 624) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) ) - ) - (i32.store offset=4 - (local.get $12) - (i32.load - (i32.const 628) + (i32.store + (local.tee $4 + (i32.add + (local.get $11) + (i32.const 4) + ) + ) + (i32.const 27) ) - ) - (i32.store offset=8 - (local.get $12) - (i32.load - (i32.const 632) + (i32.store + (local.get $12) + (i32.load + (i32.const 624) + ) ) - ) - (i32.store offset=12 - (local.get $12) - (i32.load - (i32.const 636) + (i32.store offset=4 + (local.get $12) + (i32.load + (i32.const 628) + ) ) - ) - (i32.store - (i32.const 624) - (local.get $1) - ) - (i32.store - (i32.const 628) - (local.get $3) - ) - (i32.store - (i32.const 636) - (i32.const 0) - ) - (i32.store - (i32.const 632) - (local.get $12) - ) - (local.set $1 - (i32.add - (local.get $11) - (i32.const 24) + (i32.store offset=8 + (local.get $12) + (i32.load + (i32.const 632) + ) + ) + (i32.store offset=12 + (local.get $12) + (i32.load + (i32.const 636) + ) + ) + (i32.store + (i32.const 624) + (local.get $1) ) - ) - (loop $while-in72 (i32.store - (local.tee $1 - (i32.add - (local.get $1) - (i32.const 4) - ) - ) - (i32.const 7) + (i32.const 628) + (local.get $3) ) - (br_if $while-in72 - (i32.lt_u - (i32.add - (local.get $1) - (i32.const 4) - ) - (local.get $2) - ) + (i32.store + (i32.const 636) + (i32.const 0) ) - ) - (if - (i32.ne - (local.get $11) - (local.get $6) + (i32.store + (i32.const 632) + (local.get $12) ) - (block + (local.set $1 + (i32.add + (local.get $11) + (i32.const 24) + ) + ) + (loop $while-in72 (i32.store - (local.get $4) - (i32.and - (i32.load - (local.get $4) + (local.tee $1 + (i32.add + (local.get $1) + (i32.const 4) ) - (i32.const -2) ) + (i32.const 7) ) - (i32.store offset=4 - (local.get $6) - (i32.or - (local.tee $5 - (i32.sub - (local.get $11) - (local.get $6) - ) + (br_if $while-in72 + (i32.lt_u + (i32.add + (local.get $1) + (i32.const 4) ) - (i32.const 1) + (local.get $2) ) ) - (i32.store + ) + (if + (i32.ne (local.get $11) - (local.get $5) - ) - (local.set $1 - (i32.shr_u - (local.get $5) - (i32.const 3) - ) + (local.get $6) ) - (if - (i32.lt_u - (local.get $5) - (i32.const 256) - ) + (then (block - (local.set $2 - (i32.add - (i32.shl - (local.get $1) - (i32.const 3) + (i32.store + (local.get $4) + (i32.and + (i32.load + (local.get $4) ) - (i32.const 216) + (i32.const -2) ) ) - (if - (i32.and - (local.tee $3 - (i32.load - (i32.const 176) - ) - ) - (local.tee $1 - (i32.shl - (i32.const 1) - (local.get $1) + (i32.store offset=4 + (local.get $6) + (i32.or + (local.tee $5 + (i32.sub + (local.get $11) + (local.get $6) ) ) + (i32.const 1) ) - (if - (i32.lt_u - (local.tee $1 - (i32.load + ) + (i32.store + (local.get $11) + (local.get $5) + ) + (local.set $1 + (i32.shr_u + (local.get $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (local.get $5) + (i32.const 256) + ) + (then + (block + (local.set $2 + (i32.add + (i32.shl + (local.get $1) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (if + (i32.and (local.tee $3 - (i32.add + (i32.load + (i32.const 176) + ) + ) + (local.tee $1 + (i32.shl + (i32.const 1) + (local.get $1) + ) + ) + ) + (then + (if + (i32.lt_u + (local.tee $1 + (i32.load + (local.tee $3 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (local.set $17 + (local.get $3) + ) + (local.set $7 + (local.get $1) + ) + ) + ) + ) + ) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $3) + (local.get $1) + ) + ) + (local.set $17 + (i32.add + (local.get $2) + (i32.const 8) + ) + ) + (local.set $7 (local.get $2) - (i32.const 8) ) ) ) ) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (local.set $17 - (local.get $3) + (i32.store + (local.get $17) + (local.get $6) ) - (local.set $7 - (local.get $1) + (i32.store offset=12 + (local.get $7) + (local.get $6) ) - ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (local.get $3) - (local.get $1) + (i32.store offset=8 + (local.get $6) + (local.get $7) ) - ) - (local.set $17 - (i32.add + (i32.store offset=12 + (local.get $6) (local.get $2) - (i32.const 8) ) - ) - (local.set $7 - (local.get $2) + (br $do-once40) ) ) ) - (i32.store - (local.get $17) - (local.get $6) - ) - (i32.store offset=12 - (local.get $7) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $7) - ) - (i32.store offset=12 - (local.get $6) - (local.get $2) - ) - (br $do-once40) - ) - ) - (local.set $2 - (i32.add - (i32.shl - (local.tee $4 - (if (result i32) - (local.tee $1 - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (if (result i32) - (i32.gt_u - (local.get $5) - (i32.const 16777215) - ) - (i32.const 31) - (i32.or - (i32.and + (local.set $2 + (i32.add + (i32.shl + (local.tee $4 + (if (result i32) + (local.tee $1 (i32.shr_u (local.get $5) - (i32.add - (local.tee $1 - (i32.add - (i32.sub - (i32.const 14) - (i32.or - (i32.or - (local.tee $1 - (i32.and - (i32.shr_u - (i32.add - (local.tee $3 - (i32.shl - (local.get $1) - (local.tee $2 - (i32.and - (i32.shr_u - (i32.add + (i32.const 8) + ) + ) + (then + (if (result i32) + (i32.gt_u + (local.get $5) + (i32.const 16777215) + ) + (then + (i32.const 31) + ) + (else + (i32.or + (i32.and + (i32.shr_u + (local.get $5) + (i32.add + (local.tee $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (local.tee $1 + (i32.and + (i32.shr_u + (i32.add + (local.tee $3 + (i32.shl (local.get $1) - (i32.const 1048320) + (local.tee $2 + (i32.and + (i32.shr_u + (i32.add + (local.get $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) ) - (i32.const 16) ) - (i32.const 8) + (i32.const 520192) ) + (i32.const 16) ) + (i32.const 4) ) ) - (i32.const 520192) + (local.get $2) + ) + (local.tee $1 + (i32.and + (i32.shr_u + (i32.add + (local.tee $3 + (i32.shl + (local.get $3) + (local.get $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) ) - (i32.const 16) ) - (i32.const 4) ) - ) - (local.get $2) - ) - (local.tee $1 - (i32.and (i32.shr_u - (i32.add - (local.tee $3 - (i32.shl - (local.get $3) - (local.get $1) - ) - ) - (i32.const 245760) + (i32.shl + (local.get $3) + (local.get $1) ) - (i32.const 16) + (i32.const 15) ) - (i32.const 2) ) ) + (i32.const 7) ) ) - (i32.shr_u - (i32.shl - (local.get $3) - (local.get $1) - ) - (i32.const 15) - ) + (i32.const 1) + ) + (i32.shl + (local.get $1) + (i32.const 1) ) ) - (i32.const 7) ) ) - (i32.const 1) ) - (i32.shl - (local.get $1) - (i32.const 1) + (else + (i32.const 0) ) ) ) - (i32.const 0) - ) - ) - (i32.const 2) - ) - (i32.const 480) - ) - ) - (i32.store offset=28 - (local.get $6) - (local.get $4) - ) - (i32.store offset=20 - (local.get $6) - (i32.const 0) - ) - (i32.store - (local.get $10) - (i32.const 0) - ) - (if - (i32.eqz - (i32.and - (local.tee $3 - (i32.load - (i32.const 180) - ) - ) - (local.tee $1 - (i32.shl - (i32.const 1) - (local.get $4) + (i32.const 2) ) + (i32.const 480) ) ) - ) - (block - (i32.store - (i32.const 180) - (i32.or - (local.get $3) - (local.get $1) - ) - ) - (i32.store - (local.get $2) + (i32.store offset=28 (local.get $6) + (local.get $4) ) - (i32.store offset=24 + (i32.store offset=20 (local.get $6) - (local.get $2) + (i32.const 0) ) - (i32.store offset=12 - (local.get $6) - (local.get $6) + (i32.store + (local.get $10) + (i32.const 0) ) - (i32.store offset=8 - (local.get $6) - (local.get $6) + (if + (i32.eqz + (i32.and + (local.tee $3 + (i32.load + (i32.const 180) + ) + ) + (local.tee $1 + (i32.shl + (i32.const 1) + (local.get $4) + ) + ) + ) + ) + (then + (block + (i32.store + (i32.const 180) + (i32.or + (local.get $3) + (local.get $1) + ) + ) + (i32.store + (local.get $2) + (local.get $6) + ) + (i32.store offset=24 + (local.get $6) + (local.get $2) + ) + (i32.store offset=12 + (local.get $6) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $6) + ) + (br $do-once40) + ) + ) ) - (br $do-once40) - ) - ) - (local.set $4 - (i32.shl - (local.get $5) - (select - (i32.const 0) - (i32.sub - (i32.const 25) - (i32.shr_u - (local.get $4) - (i32.const 1) + (local.set $4 + (i32.shl + (local.get $5) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (local.get $4) + (i32.const 1) + ) + ) + (i32.eq + (local.get $4) + (i32.const 31) + ) ) ) - (i32.eq - (local.get $4) - (i32.const 31) + ) + (local.set $1 + (i32.load + (local.get $2) ) ) - ) - ) - (local.set $1 - (i32.load - (local.get $2) - ) - ) - (block $__rjto$9 - (block $__rjti$9 - (loop $while-in74 - (br_if $__rjti$9 - (i32.eq - (i32.and - (i32.load offset=4 - (local.get $1) + (block $__rjto$9 + (block $__rjti$9 + (loop $while-in74 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (local.get $1) + ) + (i32.const -8) + ) + (local.get $5) + ) + ) + (local.set $2 + (i32.shl + (local.get $4) + (i32.const 1) + ) + ) + (if + (local.tee $3 + (i32.load + (local.tee $4 + (i32.add + (i32.add + (local.get $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (local.get $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (then + (block + (local.set $4 + (local.get $2) + ) + (local.set $1 + (local.get $3) + ) + (br $while-in74) + ) ) - (i32.const -8) ) - (local.get $5) ) - ) - (local.set $2 - (i32.shl - (local.get $4) - (i32.const 1) + (if + (i32.lt_u + (local.get $4) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $4) + (local.get $6) + ) + (i32.store offset=24 + (local.get $6) + (local.get $1) + ) + (i32.store offset=12 + (local.get $6) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $6) + ) + (br $do-once40) + ) + ) ) + (br $__rjto$9) ) (if - (local.tee $3 - (i32.load + (i32.and + (i32.ge_u (local.tee $4 - (i32.add - (i32.add - (local.get $1) - (i32.const 16) - ) - (i32.shl - (i32.shr_u - (local.get $4) - (i32.const 31) + (i32.load + (local.tee $2 + (i32.add + (local.get $1) + (i32.const 8) ) - (i32.const 2) ) ) ) + (local.tee $3 + (i32.load + (i32.const 192) + ) + ) ) - ) - (block - (local.set $4 - (local.get $2) - ) - (local.set $1 + (i32.ge_u + (local.get $1) (local.get $3) ) - (br $while-in74) - ) - ) - ) - (if - (i32.lt_u - (local.get $4) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (i32.store - (local.get $4) - (local.get $6) - ) - (i32.store offset=24 - (local.get $6) - (local.get $1) - ) - (i32.store offset=12 - (local.get $6) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $6) ) - (br $do-once40) - ) - ) - (br $__rjto$9) - ) - (if - (i32.and - (i32.ge_u - (local.tee $4 - (i32.load - (local.tee $2 - (i32.add - (local.get $1) - (i32.const 8) - ) + (then + (block + (i32.store offset=12 + (local.get $4) + (local.get $6) + ) + (i32.store + (local.get $2) + (local.get $6) + ) + (i32.store offset=8 + (local.get $6) + (local.get $4) + ) + (i32.store offset=12 + (local.get $6) + (local.get $1) + ) + (i32.store offset=24 + (local.get $6) + (i32.const 0) ) ) ) - (local.tee $3 - (i32.load - (i32.const 192) - ) + (else + (call $_abort) ) ) - (i32.ge_u - (local.get $1) - (local.get $3) - ) - ) - (block - (i32.store offset=12 - (local.get $4) - (local.get $6) - ) - (i32.store - (local.get $2) - (local.get $6) - ) - (i32.store offset=8 - (local.get $6) - (local.get $4) - ) - (i32.store offset=12 - (local.get $6) - (local.get $1) - ) - (i32.store offset=24 - (local.get $6) - (i32.const 0) - ) ) - (call $_abort) ) ) ) ) ) - (block - (if - (i32.or - (i32.eqz - (local.tee $2 - (i32.load - (i32.const 192) + (else + (block + (if + (i32.or + (i32.eqz + (local.tee $2 + (i32.load + (i32.const 192) + ) ) ) + (i32.lt_u + (local.get $1) + (local.get $2) + ) ) - (i32.lt_u - (local.get $1) - (local.get $2) + (then + (i32.store + (i32.const 192) + (local.get $1) + ) ) ) (i32.store - (i32.const 192) + (i32.const 624) (local.get $1) ) - ) - (i32.store - (i32.const 624) - (local.get $1) - ) - (i32.store - (i32.const 628) - (local.get $3) - ) - (i32.store - (i32.const 636) - (i32.const 0) - ) - (i32.store - (i32.const 212) - (i32.load - (i32.const 648) + (i32.store + (i32.const 628) + (local.get $3) ) - ) - (i32.store - (i32.const 208) - (i32.const -1) - ) - (local.set $2 - (i32.const 0) - ) - (loop $while-in43 - (i32.store offset=12 - (local.tee $4 - (i32.add - (i32.shl - (local.get $2) - (i32.const 3) - ) - (i32.const 216) - ) + (i32.store + (i32.const 636) + (i32.const 0) + ) + (i32.store + (i32.const 212) + (i32.load + (i32.const 648) ) - (local.get $4) ) - (i32.store offset=8 - (local.get $4) - (local.get $4) + (i32.store + (i32.const 208) + (i32.const -1) ) - (br_if $while-in43 - (i32.ne - (local.tee $2 + (local.set $2 + (i32.const 0) + ) + (loop $while-in43 + (i32.store offset=12 + (local.tee $4 (i32.add - (local.get $2) - (i32.const 1) + (i32.shl + (local.get $2) + (i32.const 3) + ) + (i32.const 216) + ) + ) + (local.get $4) + ) + (i32.store offset=8 + (local.get $4) + (local.get $4) + ) + (br_if $while-in43 + (i32.ne + (local.tee $2 + (i32.add + (local.get $2) + (i32.const 1) + ) ) + (i32.const 32) ) - (i32.const 32) ) ) - ) - (i32.store - (i32.const 200) - (local.tee $2 - (i32.add - (local.get $1) - (local.tee $1 - (select - (i32.and - (i32.sub - (i32.const 0) - (local.tee $1 - (i32.add - (local.get $1) - (i32.const 8) + (i32.store + (i32.const 200) + (local.tee $2 + (i32.add + (local.get $1) + (local.tee $1 + (select + (i32.and + (i32.sub + (i32.const 0) + (local.tee $1 + (i32.add + (local.get $1) + (i32.const 8) + ) ) ) + (i32.const 7) + ) + (i32.const 0) + (i32.and + (local.get $1) + (i32.const 7) ) - (i32.const 7) - ) - (i32.const 0) - (i32.and - (local.get $1) - (i32.const 7) ) ) ) ) ) - ) - (i32.store - (i32.const 188) - (local.tee $1 - (i32.sub - (i32.add - (local.get $3) - (i32.const -40) + (i32.store + (i32.const 188) + (local.tee $1 + (i32.sub + (i32.add + (local.get $3) + (i32.const -40) + ) + (local.get $1) ) - (local.get $1) ) ) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $1) - (i32.const 1) - ) - ) - (i32.store offset=4 - (i32.add + (i32.store offset=4 (local.get $2) - (local.get $1) + (i32.or + (local.get $1) + (i32.const 1) + ) ) - (i32.const 40) - ) - (i32.store - (i32.const 204) - (i32.load - (i32.const 664) + (i32.store offset=4 + (i32.add + (local.get $2) + (local.get $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 204) + (i32.load + (i32.const 664) + ) ) ) ) @@ -26275,7 +27741,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u @@ -26291,7 +27759,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -26310,7 +27780,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $8 ;; CHECK-NEXT: (i32.add @@ -26329,7 +27801,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -26337,7 +27809,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $7 ;; CHECK-NEXT: (i32.load ;; CHECK-NEXT: (local.get $1) @@ -26347,7 +27819,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u @@ -26362,7 +27836,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add @@ -26377,7 +27853,7 @@ ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne ;; CHECK-NEXT: (i32.and @@ -26395,7 +27871,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -26444,7 +27920,7 @@ ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $1) @@ -26467,13 +27943,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -26482,7 +27960,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -26491,7 +27971,7 @@ ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and @@ -26521,19 +28001,23 @@ ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -26547,10 +28031,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -26586,7 +28074,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $5 @@ -26605,20 +28093,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $5 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $5 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $4 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $6 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -26634,7 +28126,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) @@ -26655,7 +28147,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) @@ -26671,8 +28163,10 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (i32.const 0) @@ -26683,7 +28177,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $10 @@ -26693,7 +28187,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -26707,7 +28203,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -26721,7 +28219,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: (local.get $4) @@ -26734,14 +28232,16 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $1) @@ -26761,7 +28261,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $6) @@ -26770,7 +28270,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and @@ -26796,7 +28296,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $12) @@ -26804,7 +28304,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -26818,20 +28320,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $12) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -26852,7 +28358,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $6) @@ -26869,20 +28377,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $5) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=16 - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=16 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -26893,32 +28405,36 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -26928,7 +28444,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $2 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -26945,7 +28461,9 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz @@ -26963,14 +28481,16 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.and @@ -26993,7 +28513,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $8) @@ -27001,7 +28521,7 @@ ;; CHECK-NEXT: (i32.const 200) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 188) ;; CHECK-NEXT: (local.tee $0 @@ -27031,7 +28551,9 @@ ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 196) @@ -27051,7 +28573,7 @@ ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.tee $0 @@ -27105,7 +28627,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $4 ;; CHECK-NEXT: (i32.load offset=12 ;; CHECK-NEXT: (local.get $8) @@ -27128,7 +28650,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) @@ -27136,7 +28658,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -27145,7 +28669,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27154,7 +28680,7 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.and @@ -27178,13 +28704,15 @@ ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $4) @@ -27192,7 +28720,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -27206,10 +28736,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $14 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27222,7 +28756,7 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.load offset=24 ;; CHECK-NEXT: (local.get $8) @@ -27238,7 +28772,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.tee $3 @@ -27257,20 +28791,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $9 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $do-once6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $do-once6) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27286,7 +28824,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -27307,7 +28845,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -27325,8 +28863,10 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 0) @@ -27337,7 +28877,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.tee $4 @@ -27349,7 +28889,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.ne @@ -27363,7 +28905,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -27377,7 +28921,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $0) @@ -27390,14 +28934,16 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (local.get $8) @@ -27417,7 +28963,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $9) @@ -27426,7 +28972,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $9) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.and @@ -27446,7 +28992,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $6) @@ -27454,7 +29000,9 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eq @@ -27468,13 +29016,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $do-once4 @@ -27493,7 +29045,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store offset=24 ;; CHECK-NEXT: (local.get $9) @@ -27510,20 +29064,24 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=16 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=16 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27534,22 +29092,26 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (i32.store offset=20 - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.store offset=24 - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.store offset=20 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=24 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27580,15 +29142,17 @@ ;; CHECK-NEXT: (i32.const 196) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 184) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -27604,7 +29168,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 256) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.shl @@ -27628,33 +29192,37 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 192) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.load - ;; CHECK-NEXT: (i32.const 192) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (local.set $15 - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $13 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 176) ;; CHECK-NEXT: (i32.or @@ -27703,93 +29271,101 @@ ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.gt_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.const 16777215) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 31) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.gt_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16777215) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 31) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (i32.const 14) - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (i32.or - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.tee $4 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (i32.const 14) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.tee $4 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1048320) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 520192) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 520192) + ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.tee $0 - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.tee $0 + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 245760) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 245760) + ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shr_u - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 15) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.shl - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) @@ -27824,7 +29400,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (i32.shl ;; CHECK-NEXT: (local.get $3) @@ -27889,7 +29465,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $5 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) @@ -27907,8 +29483,10 @@ ;; CHECK-NEXT: (i32.const 192) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: (local.get $2) @@ -27954,7 +29532,7 @@ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store offset=12 ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: (local.get $2) @@ -27976,11 +29554,13 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $_abort) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.const 180) ;; CHECK-NEXT: (i32.or @@ -28020,9 +29600,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (local.set $0 - ;; CHECK-NEXT: (i32.const 632) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 632) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $while-in17 @@ -28065,7 +29649,9 @@ (i32.eqz (local.get $0) ) - (return) + (then + (return) + ) ) (if (i32.lt_u @@ -28081,7 +29667,9 @@ ) ) ) - (call $_abort) + (then + (call $_abort) + ) ) (if (i32.eq @@ -28100,7 +29688,9 @@ ) (i32.const 1) ) - (call $_abort) + (then + (call $_abort) + ) ) (local.set $8 (i32.add @@ -28119,184 +29709,269 @@ (local.get $7) (i32.const 1) ) - (block - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) - ) - ) - (block - (local.set $7 - (i32.load + (then + (block + (local.set $2 (local.get $1) ) - ) - (if - (i32.eqz - (local.get $5) + (local.set $3 + (local.get $0) ) - (return) ) - (if - (i32.lt_u - (local.tee $1 - (i32.add - (local.get $1) - (i32.sub - (i32.const 0) - (local.get $7) + ) + (else + (block + (local.set $7 + (i32.load + (local.get $1) + ) + ) + (if + (i32.eqz + (local.get $5) + ) + (then + (return) + ) + ) + (if + (i32.lt_u + (local.tee $1 + (i32.add + (local.get $1) + (i32.sub + (i32.const 0) + (local.get $7) + ) ) ) + (local.get $11) + ) + (then + (call $_abort) ) - (local.get $11) - ) - (call $_abort) - ) - (local.set $0 - (i32.add - (local.get $7) - (local.get $0) ) - ) - (if - (i32.eq - (local.get $1) - (i32.load - (i32.const 196) + (local.set $0 + (i32.add + (local.get $7) + (local.get $0) ) ) - (block - (if - (i32.ne - (i32.and - (local.tee $3 - (i32.load - (local.tee $2 - (i32.add - (local.get $8) - (i32.const 4) + (if + (i32.eq + (local.get $1) + (i32.load + (i32.const 196) + ) + ) + (then + (block + (if + (i32.ne + (i32.and + (local.tee $3 + (i32.load + (local.tee $2 + (i32.add + (local.get $8) + (i32.const 4) + ) + ) ) ) + (i32.const 3) + ) + (i32.const 3) + ) + (then + (block + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + (br $do-once) ) ) - (i32.const 3) ) - (i32.const 3) - ) - (block - (local.set $2 + (i32.store + (i32.const 184) + (local.get $0) + ) + (i32.store + (local.get $2) + (i32.and + (local.get $3) + (i32.const -2) + ) + ) + (i32.store offset=4 (local.get $1) + (i32.or + (local.get $0) + (i32.const 1) + ) ) - (local.set $3 + (i32.store + (i32.add + (local.get $1) + (local.get $0) + ) (local.get $0) ) - (br $do-once) - ) - ) - (i32.store - (i32.const 184) - (local.get $0) - ) - (i32.store - (local.get $2) - (i32.and - (local.get $3) - (i32.const -2) + (return) ) ) - (i32.store offset=4 - (local.get $1) - (i32.or - (local.get $0) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $1) - (local.get $0) - ) - (local.get $0) - ) - (return) - ) - ) - (local.set $5 - (i32.shr_u - (local.get $7) - (i32.const 3) ) - ) - (if - (i32.lt_u - (local.get $7) - (i32.const 256) + (local.set $5 + (i32.shr_u + (local.get $7) + (i32.const 3) + ) ) - (block - (local.set $6 - (i32.load offset=12 - (local.get $1) - ) + (if + (i32.lt_u + (local.get $7) + (i32.const 256) ) - (if - (i32.ne - (local.tee $2 - (i32.load offset=8 + (then + (block + (local.set $6 + (i32.load offset=12 (local.get $1) ) ) - (local.tee $3 - (i32.add - (i32.shl - (local.get $5) - (i32.const 3) + (if + (i32.ne + (local.tee $2 + (i32.load offset=8 + (local.get $1) + ) + ) + (local.tee $3 + (i32.add + (i32.shl + (local.get $5) + (i32.const 3) + ) + (i32.const 216) + ) + ) + ) + (then + (block + (if + (i32.lt_u + (local.get $2) + (local.get $11) + ) + (then + (call $_abort) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (local.get $2) + ) + (local.get $1) + ) + (then + (call $_abort) + ) + ) ) - (i32.const 216) ) ) - ) - (block (if - (i32.lt_u + (i32.eq + (local.get $6) (local.get $2) - (local.get $11) ) - (call $_abort) - ) - (if - (i32.ne - (i32.load offset=12 - (local.get $2) + (then + (block + (i32.store + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $5) + ) + (i32.const -1) + ) + ) + ) + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + (br $do-once) ) - (local.get $1) ) - (call $_abort) ) - ) - ) - (if - (i32.eq - (local.get $6) - (local.get $2) - ) - (block - (i32.store - (i32.const 176) - (i32.and - (i32.load - (i32.const 176) + (if + (i32.eq + (local.get $6) + (local.get $3) + ) + (then + (local.set $4 + (i32.add + (local.get $6) + (i32.const 8) + ) ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $5) + ) + (else + (block + (if + (i32.lt_u + (local.get $6) + (local.get $11) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $3 + (i32.add + (local.get $6) + (i32.const 8) + ) + ) + ) + (local.get $1) + ) + (then + (local.set $4 + (local.get $3) + ) + ) + (else + (call $_abort) + ) ) - (i32.const -1) ) ) ) + (i32.store offset=12 + (local.get $2) + (local.get $6) + ) + (i32.store + (local.get $4) + (local.get $2) + ) (local.set $2 (local.get $1) ) @@ -28306,408 +29981,423 @@ (br $do-once) ) ) + ) + (local.set $12 + (i32.load offset=24 + (local.get $1) + ) + ) + (block $do-once0 (if (i32.eq - (local.get $6) - (local.get $3) - ) - (local.set $4 - (i32.add - (local.get $6) - (i32.const 8) - ) - ) - (block - (if - (i32.lt_u - (local.get $6) - (local.get $11) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $3 - (i32.add - (local.get $6) - (i32.const 8) - ) - ) - ) + (local.tee $4 + (i32.load offset=12 (local.get $1) ) - (local.set $4 - (local.get $3) - ) - (call $_abort) - ) - ) - ) - (i32.store offset=12 - (local.get $2) - (local.get $6) - ) - (i32.store - (local.get $4) - (local.get $2) - ) - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) - ) - (br $do-once) - ) - ) - (local.set $12 - (i32.load offset=24 - (local.get $1) - ) - ) - (block $do-once0 - (if - (i32.eq - (local.tee $4 - (i32.load offset=12 - (local.get $1) ) + (local.get $1) ) - (local.get $1) - ) - (block - (if - (i32.eqz - (local.tee $5 - (i32.load - (local.tee $4 - (i32.add - (local.tee $7 + (then + (block + (if + (i32.eqz + (local.tee $5 + (i32.load + (local.tee $4 (i32.add - (local.get $1) - (i32.const 16) + (local.tee $7 + (i32.add + (local.get $1) + (i32.const 16) + ) + ) + (i32.const 4) ) ) - (i32.const 4) ) ) ) - ) - ) - (if - (local.tee $5 - (i32.load - (local.get $7) - ) - ) - (local.set $4 - (local.get $7) - ) - (block - (local.set $6 - (i32.const 0) - ) - (br $do-once0) - ) - ) - ) - (loop $while-in - (if - (local.tee $7 - (i32.load - (local.tee $10 - (i32.add - (local.get $5) - (i32.const 20) + (then + (if + (local.tee $5 + (i32.load + (local.get $7) + ) + ) + (then + (local.set $4 + (local.get $7) + ) + ) + (else + (block + (local.set $6 + (i32.const 0) + ) + (br $do-once0) + ) ) ) ) ) - (block - (local.set $5 - (local.get $7) - ) - (local.set $4 - (local.get $10) + (loop $while-in + (if + (local.tee $7 + (i32.load + (local.tee $10 + (i32.add + (local.get $5) + (i32.const 20) + ) + ) + ) + ) + (then + (block + (local.set $5 + (local.get $7) + ) + (local.set $4 + (local.get $10) + ) + (br $while-in) + ) + ) ) - (br $while-in) - ) - ) - (if - (local.tee $7 - (i32.load - (local.tee $10 - (i32.add - (local.get $5) - (i32.const 16) + (if + (local.tee $7 + (i32.load + (local.tee $10 + (i32.add + (local.get $5) + (i32.const 16) + ) + ) + ) + ) + (then + (block + (local.set $5 + (local.get $7) + ) + (local.set $4 + (local.get $10) + ) + (br $while-in) ) ) ) ) - (block - (local.set $5 - (local.get $7) + (if + (i32.lt_u + (local.get $4) + (local.get $11) ) - (local.set $4 - (local.get $10) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $4) + (i32.const 0) + ) + (local.set $6 + (local.get $5) + ) + ) ) - (br $while-in) ) ) ) - (if - (i32.lt_u - (local.get $4) - (local.get $11) - ) - (call $_abort) + (else (block - (i32.store - (local.get $4) - (i32.const 0) - ) - (local.set $6 - (local.get $5) + (if + (i32.lt_u + (local.tee $10 + (i32.load offset=8 + (local.get $1) + ) + ) + (local.get $11) + ) + (then + (call $_abort) + ) ) - ) - ) - ) - (block - (if - (i32.lt_u - (local.tee $10 - (i32.load offset=8 + (if + (i32.ne + (i32.load + (local.tee $7 + (i32.add + (local.get $10) + (i32.const 12) + ) + ) + ) (local.get $1) ) + (then + (call $_abort) + ) ) - (local.get $11) - ) - (call $_abort) - ) - (if - (i32.ne - (i32.load - (local.tee $7 - (i32.add - (local.get $10) - (i32.const 12) + (if + (i32.eq + (i32.load + (local.tee $5 + (i32.add + (local.get $4) + (i32.const 8) + ) + ) ) + (local.get $1) ) - ) - (local.get $1) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $5 - (i32.add - (local.get $4) - (i32.const 8) + (then + (block + (i32.store + (local.get $7) + (local.get $4) + ) + (i32.store + (local.get $5) + (local.get $10) + ) + (local.set $6 + (local.get $4) + ) ) ) - ) - (local.get $1) - ) - (block - (i32.store - (local.get $7) - (local.get $4) - ) - (i32.store - (local.get $5) - (local.get $10) - ) - (local.set $6 - (local.get $4) + (else + (call $_abort) + ) ) ) - (call $_abort) ) ) ) - ) - (if - (local.get $12) - (block - (if - (i32.eq - (local.get $1) - (i32.load - (local.tee $4 - (i32.add - (i32.shl - (local.tee $5 - (i32.load offset=28 - (local.get $1) + (if + (local.get $12) + (then + (block + (if + (i32.eq + (local.get $1) + (i32.load + (local.tee $4 + (i32.add + (i32.shl + (local.tee $5 + (i32.load offset=28 + (local.get $1) + ) + ) + (i32.const 2) ) + (i32.const 480) ) - (i32.const 2) ) - (i32.const 480) ) ) - ) - ) - (block - (i32.store - (local.get $4) - (local.get $6) - ) - (if - (i32.eqz - (local.get $6) - ) - (block - (i32.store - (i32.const 180) - (i32.and - (i32.load - (i32.const 180) + (then + (block + (i32.store + (local.get $4) + (local.get $6) + ) + (if + (i32.eqz + (local.get $6) ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $5) + (then + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $5) + ) + (i32.const -1) + ) + ) + ) + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + (br $do-once) ) - (i32.const -1) ) ) ) - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) + ) + (else + (block + (if + (i32.lt_u + (local.get $12) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $4 + (i32.add + (local.get $12) + (i32.const 16) + ) + ) + ) + (local.get $1) + ) + (then + (i32.store + (local.get $4) + (local.get $6) + ) + ) + (else + (i32.store offset=20 + (local.get $12) + (local.get $6) + ) + ) + ) + (if + (i32.eqz + (local.get $6) + ) + (then + (block + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + (br $do-once) + ) + ) + ) ) - (br $do-once) ) ) - ) - (block (if (i32.lt_u - (local.get $12) - (i32.load - (i32.const 192) + (local.get $6) + (local.tee $5 + (i32.load + (i32.const 192) + ) ) ) - (call $_abort) + (then + (call $_abort) + ) + ) + (i32.store offset=24 + (local.get $6) + (local.get $12) ) (if - (i32.eq + (local.tee $7 (i32.load (local.tee $4 (i32.add - (local.get $12) + (local.get $1) (i32.const 16) ) ) ) - (local.get $1) - ) - (i32.store - (local.get $4) - (local.get $6) - ) - (i32.store offset=20 - (local.get $12) - (local.get $6) - ) - ) - (if - (i32.eqz - (local.get $6) ) - (block - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) + (then + (if + (i32.lt_u + (local.get $7) + (local.get $5) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=16 + (local.get $6) + (local.get $7) + ) + (i32.store offset=24 + (local.get $7) + (local.get $6) + ) + ) + ) ) - (br $do-once) - ) - ) - ) - ) - (if - (i32.lt_u - (local.get $6) - (local.tee $5 - (i32.load - (i32.const 192) ) ) - ) - (call $_abort) - ) - (i32.store offset=24 - (local.get $6) - (local.get $12) - ) - (if - (local.tee $7 - (i32.load + (if (local.tee $4 - (i32.add - (local.get $1) - (i32.const 16) + (i32.load offset=4 + (local.get $4) ) ) - ) - ) - (if - (i32.lt_u - (local.get $7) - (local.get $5) - ) - (call $_abort) - (block - (i32.store offset=16 - (local.get $6) - (local.get $7) + (then + (if + (i32.lt_u + (local.get $4) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=20 + (local.get $6) + (local.get $4) + ) + (i32.store offset=24 + (local.get $4) + (local.get $6) + ) + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + ) + ) + ) ) - (i32.store offset=24 - (local.get $7) - (local.get $6) + (else + (block + (local.set $2 + (local.get $1) + ) + (local.set $3 + (local.get $0) + ) + ) ) ) ) ) - (if - (local.tee $4 - (i32.load offset=4 - (local.get $4) - ) - ) - (if - (i32.lt_u - (local.get $4) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (i32.store offset=20 - (local.get $6) - (local.get $4) - ) - (i32.store offset=24 - (local.get $4) - (local.get $6) - ) - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) - ) - ) - ) + (else (block (local.set $2 (local.get $1) @@ -28718,628 +30408,710 @@ ) ) ) - (block - (local.set $2 - (local.get $1) - ) - (local.set $3 - (local.get $0) - ) - ) - ) - ) - ) - ) - (if - (i32.ge_u - (local.get $2) - (local.get $8) - ) - (call $_abort) - ) - (if - (i32.eqz - (i32.and - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add - (local.get $8) - (i32.const 4) - ) - ) - ) - ) - (i32.const 1) - ) - ) - (call $_abort) - ) - (if - (i32.and - (local.get $1) - (i32.const 2) - ) - (block - (i32.store - (local.get $0) - (i32.and - (local.get $1) - (i32.const -2) - ) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $3) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $2) - (local.get $3) - ) - (local.get $3) - ) - ) - (block - (if - (i32.eq - (local.get $8) - (i32.load - (i32.const 200) - ) - ) - (block - (i32.store - (i32.const 188) - (local.tee $0 - (i32.add - (i32.load - (i32.const 188) - ) - (local.get $3) - ) - ) - ) - (i32.store - (i32.const 200) - (local.get $2) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $0) - (i32.const 1) - ) - ) - (if - (i32.ne - (local.get $2) - (i32.load - (i32.const 196) - ) - ) - (return) - ) - (i32.store - (i32.const 196) - (i32.const 0) - ) - (i32.store - (i32.const 184) - (i32.const 0) - ) - (return) - ) - ) - (if - (i32.eq - (local.get $8) - (i32.load - (i32.const 196) - ) - ) - (block - (i32.store - (i32.const 184) - (local.tee $0 - (i32.add - (i32.load - (i32.const 184) - ) - (local.get $3) - ) - ) - ) - (i32.store - (i32.const 196) - (local.get $2) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $0) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $2) - (local.get $0) + ) + ) + ) + ) + (if + (i32.ge_u + (local.get $2) + (local.get $8) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eqz + (i32.and + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.get $8) + (i32.const 4) + ) ) - (local.get $0) ) - (return) ) + (i32.const 1) ) - (local.set $5 - (i32.add + ) + (then + (call $_abort) + ) + ) + (if + (i32.and + (local.get $1) + (i32.const 2) + ) + (then + (block + (i32.store + (local.get $0) (i32.and (local.get $1) - (i32.const -8) + (i32.const -2) ) - (local.get $3) ) - ) - (local.set $3 - (i32.shr_u - (local.get $1) - (i32.const 3) + (i32.store offset=4 + (local.get $2) + (i32.or + (local.get $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (local.get $2) + (local.get $3) + ) + (local.get $3) ) ) - (block $do-once4 + ) + (else + (block (if - (i32.lt_u - (local.get $1) - (i32.const 256) - ) - (block - (local.set $4 - (i32.load offset=12 - (local.get $8) - ) + (i32.eq + (local.get $8) + (i32.load + (i32.const 200) ) - (if - (i32.ne - (local.tee $1 - (i32.load offset=8 - (local.get $8) - ) - ) + ) + (then + (block + (i32.store + (i32.const 188) (local.tee $0 (i32.add - (i32.shl - (local.get $3) - (i32.const 3) + (i32.load + (i32.const 188) ) - (i32.const 216) + (local.get $3) ) ) ) - (block - (if - (i32.lt_u - (local.get $1) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) + (i32.store + (i32.const 200) + (local.get $2) + ) + (i32.store offset=4 + (local.get $2) + (i32.or + (local.get $0) + (i32.const 1) ) - (if - (i32.ne - (i32.load offset=12 - (local.get $1) - ) - (local.get $8) + ) + (if + (i32.ne + (local.get $2) + (i32.load + (i32.const 196) ) - (call $_abort) + ) + (then + (return) ) ) - ) - (if - (i32.eq - (local.get $4) - (local.get $1) + (i32.store + (i32.const 196) + (i32.const 0) ) - (block - (i32.store - (i32.const 176) - (i32.and + (i32.store + (i32.const 184) + (i32.const 0) + ) + (return) + ) + ) + ) + (if + (i32.eq + (local.get $8) + (i32.load + (i32.const 196) + ) + ) + (then + (block + (i32.store + (i32.const 184) + (local.tee $0 + (i32.add (i32.load - (i32.const 176) - ) - (i32.xor - (i32.shl - (i32.const 1) - (local.get $3) - ) - (i32.const -1) + (i32.const 184) ) + (local.get $3) ) ) - (br $do-once4) ) - ) - (if - (i32.eq - (local.get $4) - (local.get $0) + (i32.store + (i32.const 196) + (local.get $2) ) - (local.set $14 - (i32.add - (local.get $4) - (i32.const 8) + (i32.store offset=4 + (local.get $2) + (i32.or + (local.get $0) + (i32.const 1) ) ) - (block - (if - (i32.lt_u - (local.get $4) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $4) - (i32.const 8) - ) - ) - ) - (local.get $8) - ) - (local.set $14 - (local.get $0) - ) - (call $_abort) + (i32.store + (i32.add + (local.get $2) + (local.get $0) ) + (local.get $0) ) + (return) ) - (i32.store offset=12 - (local.get $1) - (local.get $4) - ) - (i32.store - (local.get $14) + ) + ) + (local.set $5 + (i32.add + (i32.and (local.get $1) + (i32.const -8) ) + (local.get $3) ) - (block - (local.set $6 - (i32.load offset=24 - (local.get $8) - ) + ) + (local.set $3 + (i32.shr_u + (local.get $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (local.get $1) + (i32.const 256) ) - (block $do-once6 - (if - (i32.eq - (local.tee $0 - (i32.load offset=12 - (local.get $8) - ) - ) - (local.get $8) - ) - (block - (if - (i32.eqz - (local.tee $3 - (i32.load - (local.tee $0 - (i32.add - (local.tee $1 - (i32.add - (local.get $8) - (i32.const 16) - ) - ) - (i32.const 4) - ) - ) - ) + (then + (block + (local.set $4 + (i32.load offset=12 + (local.get $8) + ) + ) + (if + (i32.ne + (local.tee $1 + (i32.load offset=8 + (local.get $8) ) ) - (if - (local.tee $3 - (i32.load - (local.get $1) - ) - ) - (local.set $0 - (local.get $1) - ) - (block - (local.set $9 - (i32.const 0) + (local.tee $0 + (i32.add + (i32.shl + (local.get $3) + (i32.const 3) ) - (br $do-once6) + (i32.const 216) ) ) ) - (loop $while-in9 - (if - (local.tee $1 - (i32.load - (local.tee $4 - (i32.add - (local.get $3) - (i32.const 20) - ) - ) - ) - ) - (block - (local.set $3 + (then + (block + (if + (i32.lt_u (local.get $1) + (i32.load + (i32.const 192) + ) ) - (local.set $0 - (local.get $4) + (then + (call $_abort) ) - (br $while-in9) ) - ) - (if - (local.tee $1 - (i32.load - (local.tee $4 - (i32.add - (local.get $3) - (i32.const 16) - ) + (if + (i32.ne + (i32.load offset=12 + (local.get $1) ) + (local.get $8) ) - ) - (block - (local.set $3 - (local.get $1) - ) - (local.set $0 - (local.get $4) + (then + (call $_abort) ) - (br $while-in9) ) ) ) - (if - (i32.lt_u - (local.get $0) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) + ) + (if + (i32.eq + (local.get $4) + (local.get $1) + ) + (then (block (i32.store - (local.get $0) - (i32.const 0) - ) - (local.set $9 - (local.get $3) + (i32.const 176) + (i32.and + (i32.load + (i32.const 176) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $3) + ) + (i32.const -1) + ) + ) ) + (br $do-once4) ) ) ) - (block - (if - (i32.lt_u - (local.tee $4 - (i32.load offset=8 - (local.get $8) - ) - ) - (i32.load - (i32.const 192) + (if + (i32.eq + (local.get $4) + (local.get $0) + ) + (then + (local.set $14 + (i32.add + (local.get $4) + (i32.const 8) ) ) - (call $_abort) ) - (if - (i32.ne - (i32.load - (local.tee $1 - (i32.add - (local.get $4) - (i32.const 12) + (else + (block + (if + (i32.lt_u + (local.get $4) + (i32.load + (i32.const 192) ) ) + (then + (call $_abort) + ) ) - (local.get $8) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $3 - (i32.add + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $4) + (i32.const 8) + ) + ) + ) + (local.get $8) + ) + (then + (local.set $14 (local.get $0) - (i32.const 8) ) ) - ) - (local.get $8) - ) - (block - (i32.store - (local.get $1) - (local.get $0) - ) - (i32.store - (local.get $3) - (local.get $4) - ) - (local.set $9 - (local.get $0) + (else + (call $_abort) + ) ) ) - (call $_abort) ) ) + (i32.store offset=12 + (local.get $1) + (local.get $4) + ) + (i32.store + (local.get $14) + (local.get $1) + ) ) ) - (if - (local.get $6) + (else (block - (if - (i32.eq + (local.set $6 + (i32.load offset=24 (local.get $8) - (i32.load + ) + ) + (block $do-once6 + (if + (i32.eq (local.tee $0 - (i32.add - (i32.shl + (i32.load offset=12 + (local.get $8) + ) + ) + (local.get $8) + ) + (then + (block + (if + (i32.eqz (local.tee $3 - (i32.load offset=28 - (local.get $8) + (i32.load + (local.tee $0 + (i32.add + (local.tee $1 + (i32.add + (local.get $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (then + (if + (local.tee $3 + (i32.load + (local.get $1) + ) + ) + (then + (local.set $0 + (local.get $1) + ) + ) + (else + (block + (local.set $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + ) + ) + (loop $while-in9 + (if + (local.tee $1 + (i32.load + (local.tee $4 + (i32.add + (local.get $3) + (i32.const 20) + ) + ) + ) + ) + (then + (block + (local.set $3 + (local.get $1) + ) + (local.set $0 + (local.get $4) + ) + (br $while-in9) + ) + ) + ) + (if + (local.tee $1 + (i32.load + (local.tee $4 + (i32.add + (local.get $3) + (i32.const 16) + ) + ) + ) + ) + (then + (block + (local.set $3 + (local.get $1) + ) + (local.set $0 + (local.get $4) + ) + (br $while-in9) ) ) - (i32.const 2) ) - (i32.const 480) ) - ) - ) - ) - (block - (i32.store - (local.get $0) - (local.get $9) - ) - (if - (i32.eqz - (local.get $9) - ) - (block - (i32.store - (i32.const 180) - (i32.and + (if + (i32.lt_u + (local.get $0) (i32.load - (i32.const 180) + (i32.const 192) ) - (i32.xor - (i32.shl - (i32.const 1) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store + (local.get $0) + (i32.const 0) + ) + (local.set $9 (local.get $3) ) - (i32.const -1) ) ) ) - (br $do-once4) ) ) - ) - (block - (if - (i32.lt_u - (local.get $6) - (i32.load - (i32.const 192) + (else + (block + (if + (i32.lt_u + (local.tee $4 + (i32.load offset=8 + (local.get $8) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) ) - ) - (call $_abort) - ) - (if - (i32.eq - (i32.load - (local.tee $0 - (i32.add - (local.get $6) - (i32.const 16) + (if + (i32.ne + (i32.load + (local.tee $1 + (i32.add + (local.get $4) + (i32.const 12) + ) + ) ) + (local.get $8) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $3 + (i32.add + (local.get $0) + (i32.const 8) + ) + ) + ) + (local.get $8) + ) + (then + (block + (i32.store + (local.get $1) + (local.get $0) + ) + (i32.store + (local.get $3) + (local.get $4) + ) + (local.set $9 + (local.get $0) + ) + ) + ) + (else + (call $_abort) ) ) - (local.get $8) - ) - (i32.store - (local.get $0) - (local.get $9) - ) - (i32.store offset=20 - (local.get $6) - (local.get $9) - ) - ) - (br_if $do-once4 - (i32.eqz - (local.get $9) ) ) ) ) (if - (i32.lt_u - (local.get $9) - (local.tee $3 - (i32.load - (i32.const 192) - ) - ) - ) - (call $_abort) - ) - (i32.store offset=24 - (local.get $9) (local.get $6) - ) - (if - (local.tee $1 - (i32.load - (local.tee $0 - (i32.add + (then + (block + (if + (i32.eq (local.get $8) - (i32.const 16) + (i32.load + (local.tee $0 + (i32.add + (i32.shl + (local.tee $3 + (i32.load offset=28 + (local.get $8) + ) + ) + (i32.const 2) + ) + (i32.const 480) + ) + ) + ) + ) + (then + (block + (i32.store + (local.get $0) + (local.get $9) + ) + (if + (i32.eqz + (local.get $9) + ) + (then + (block + (i32.store + (i32.const 180) + (i32.and + (i32.load + (i32.const 180) + ) + (i32.xor + (i32.shl + (i32.const 1) + (local.get $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + ) + ) + (else + (block + (if + (i32.lt_u + (local.get $6) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + ) + (if + (i32.eq + (i32.load + (local.tee $0 + (i32.add + (local.get $6) + (i32.const 16) + ) + ) + ) + (local.get $8) + ) + (then + (i32.store + (local.get $0) + (local.get $9) + ) + ) + (else + (i32.store offset=20 + (local.get $6) + (local.get $9) + ) + ) + ) + (br_if $do-once4 + (i32.eqz + (local.get $9) + ) + ) + ) ) ) - ) - ) - (if - (i32.lt_u - (local.get $1) - (local.get $3) - ) - (call $_abort) - (block - (i32.store offset=16 - (local.get $9) - (local.get $1) + (if + (i32.lt_u + (local.get $9) + (local.tee $3 + (i32.load + (i32.const 192) + ) + ) + ) + (then + (call $_abort) + ) ) (i32.store offset=24 - (local.get $1) (local.get $9) + (local.get $6) ) - ) - ) - ) - (if - (local.tee $0 - (i32.load offset=4 - (local.get $0) - ) - ) - (if - (i32.lt_u - (local.get $0) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (i32.store offset=20 - (local.get $9) - (local.get $0) + (if + (local.tee $1 + (i32.load + (local.tee $0 + (i32.add + (local.get $8) + (i32.const 16) + ) + ) + ) + ) + (then + (if + (i32.lt_u + (local.get $1) + (local.get $3) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=16 + (local.get $9) + (local.get $1) + ) + (i32.store offset=24 + (local.get $1) + (local.get $9) + ) + ) + ) + ) + ) ) - (i32.store offset=24 - (local.get $0) - (local.get $9) + (if + (local.tee $0 + (i32.load offset=4 + (local.get $0) + ) + ) + (then + (if + (i32.lt_u + (local.get $0) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (i32.store offset=20 + (local.get $9) + (local.get $0) + ) + (i32.store offset=24 + (local.get $0) + (local.get $9) + ) + ) + ) + ) + ) ) ) ) @@ -29348,38 +31120,42 @@ ) ) ) - ) - (i32.store offset=4 - (local.get $2) - (i32.or - (local.get $5) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (local.get $2) - (local.get $5) - ) - (local.get $5) - ) - (if - (i32.eq + (i32.store offset=4 (local.get $2) - (i32.load - (i32.const 196) + (i32.or + (local.get $5) + (i32.const 1) ) ) - (block - (i32.store - (i32.const 184) + (i32.store + (i32.add + (local.get $2) (local.get $5) ) - (return) - ) - (local.set $3 (local.get $5) ) + (if + (i32.eq + (local.get $2) + (i32.load + (i32.const 196) + ) + ) + (then + (block + (i32.store + (i32.const 184) + (local.get $5) + ) + (return) + ) + ) + (else + (local.set $3 + (local.get $5) + ) + ) + ) ) ) ) @@ -29394,92 +31170,102 @@ (local.get $3) (i32.const 256) ) - (block - (local.set $1 - (i32.add - (i32.shl - (local.get $0) - (i32.const 3) - ) - (i32.const 216) - ) - ) - (if - (i32.and - (local.tee $3 - (i32.load - (i32.const 176) - ) - ) - (local.tee $0 + (then + (block + (local.set $1 + (i32.add (i32.shl - (i32.const 1) (local.get $0) + (i32.const 3) ) + (i32.const 216) ) ) (if - (i32.lt_u - (local.tee $0 + (i32.and + (local.tee $3 (i32.load - (local.tee $3 - (i32.add - (local.get $1) - (i32.const 8) - ) - ) + (i32.const 176) ) ) - (i32.load - (i32.const 192) - ) - ) - (call $_abort) - (block - (local.set $15 - (local.get $3) - ) - (local.set $13 - (local.get $0) + (local.tee $0 + (i32.shl + (i32.const 1) + (local.get $0) + ) ) ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (local.get $3) - (local.get $0) + (then + (if + (i32.lt_u + (local.tee $0 + (i32.load + (local.tee $3 + (i32.add + (local.get $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 192) + ) + ) + (then + (call $_abort) + ) + (else + (block + (local.set $15 + (local.get $3) + ) + (local.set $13 + (local.get $0) + ) + ) + ) ) ) - (local.set $15 - (i32.add - (local.get $1) - (i32.const 8) + (else + (block + (i32.store + (i32.const 176) + (i32.or + (local.get $3) + (local.get $0) + ) + ) + (local.set $15 + (i32.add + (local.get $1) + (i32.const 8) + ) + ) + (local.set $13 + (local.get $1) + ) ) ) - (local.set $13 - (local.get $1) - ) ) + (i32.store + (local.get $15) + (local.get $2) + ) + (i32.store offset=12 + (local.get $13) + (local.get $2) + ) + (i32.store offset=8 + (local.get $2) + (local.get $13) + ) + (i32.store offset=12 + (local.get $2) + (local.get $1) + ) + (return) ) - (i32.store - (local.get $15) - (local.get $2) - ) - (i32.store offset=12 - (local.get $13) - (local.get $2) - ) - (i32.store offset=8 - (local.get $2) - (local.get $13) - ) - (i32.store offset=12 - (local.get $2) - (local.get $1) - ) - (return) ) ) (local.set $4 @@ -29488,98 +31274,106 @@ (local.tee $5 (if (result i32) (local.tee $0 - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (if (result i32) - (i32.gt_u - (local.get $3) - (i32.const 16777215) - ) - (i32.const 31) - (i32.or - (i32.and - (i32.shr_u - (local.get $3) - (i32.add - (local.tee $0 + (i32.shr_u + (local.get $3) + (i32.const 8) + ) + ) + (then + (if (result i32) + (i32.gt_u + (local.get $3) + (i32.const 16777215) + ) + (then + (i32.const 31) + ) + (else + (i32.or + (i32.and + (i32.shr_u + (local.get $3) (i32.add - (i32.sub - (i32.const 14) - (i32.or - (i32.or - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $0) - (local.tee $4 - (i32.and - (i32.shr_u - (i32.add - (local.get $0) - (i32.const 1048320) + (local.tee $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $0) + (local.tee $4 + (i32.and + (i32.shr_u + (i32.add + (local.get $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) ) - (i32.const 16) ) - (i32.const 8) ) ) + (i32.const 520192) ) + (i32.const 16) ) - (i32.const 520192) + (i32.const 4) ) - (i32.const 16) ) - (i32.const 4) + (local.get $4) ) - ) - (local.get $4) - ) - (local.tee $0 - (i32.and - (i32.shr_u - (i32.add - (local.tee $1 - (i32.shl - (local.get $1) - (local.get $0) + (local.tee $0 + (i32.and + (i32.shr_u + (i32.add + (local.tee $1 + (i32.shl + (local.get $1) + (local.get $0) + ) + ) + (i32.const 245760) ) + (i32.const 16) ) - (i32.const 245760) + (i32.const 2) ) - (i32.const 16) ) - (i32.const 2) ) ) + (i32.shr_u + (i32.shl + (local.get $1) + (local.get $0) + ) + (i32.const 15) + ) ) ) - (i32.shr_u - (i32.shl - (local.get $1) - (local.get $0) - ) - (i32.const 15) - ) + (i32.const 7) ) ) - (i32.const 7) + (i32.const 1) + ) + (i32.shl + (local.get $0) + (i32.const 1) ) ) - (i32.const 1) - ) - (i32.shl - (local.get $0) - (i32.const 1) ) ) ) - (i32.const 0) + (else + (i32.const 0) + ) ) ) (i32.const 2) @@ -29614,185 +31408,199 @@ ) ) ) - (block - (local.set $5 - (i32.shl - (local.get $3) - (select - (i32.const 0) - (i32.sub - (i32.const 25) - (i32.shr_u + (then + (block + (local.set $5 + (i32.shl + (local.get $3) + (select + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (local.get $5) + (i32.const 1) + ) + ) + (i32.eq (local.get $5) - (i32.const 1) + (i32.const 31) ) ) - (i32.eq - (local.get $5) - (i32.const 31) - ) ) ) - ) - (local.set $0 - (i32.load - (local.get $4) + (local.set $0 + (i32.load + (local.get $4) + ) ) - ) - (block $__rjto$1 - (block $__rjti$1 - (loop $while-in15 - (br_if $__rjti$1 - (i32.eq - (i32.and - (i32.load offset=4 - (local.get $0) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (local.get $0) + ) + (i32.const -8) ) - (i32.const -8) + (local.get $3) ) - (local.get $3) ) - ) - (local.set $4 - (i32.shl - (local.get $5) - (i32.const 1) + (local.set $4 + (i32.shl + (local.get $5) + (i32.const 1) + ) ) - ) - (if - (local.tee $1 - (i32.load - (local.tee $5 - (i32.add + (if + (local.tee $1 + (i32.load + (local.tee $5 (i32.add - (local.get $0) - (i32.const 16) - ) - (i32.shl - (i32.shr_u - (local.get $5) - (i32.const 31) + (i32.add + (local.get $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (local.get $5) + (i32.const 31) + ) + (i32.const 2) ) - (i32.const 2) ) ) ) ) - ) - (block - (local.set $5 - (local.get $4) - ) - (local.set $0 - (local.get $1) + (then + (block + (local.set $5 + (local.get $4) + ) + (local.set $0 + (local.get $1) + ) + (br $while-in15) + ) ) - (br $while-in15) - ) - ) - ) - (if - (i32.lt_u - (local.get $5) - (i32.load - (i32.const 192) ) ) - (call $_abort) - (block - (i32.store + (if + (i32.lt_u (local.get $5) - (local.get $2) - ) - (i32.store offset=24 - (local.get $2) - (local.get $0) + (i32.load + (i32.const 192) + ) ) - (i32.store offset=12 - (local.get $2) - (local.get $2) + (then + (call $_abort) ) - (i32.store offset=8 - (local.get $2) - (local.get $2) + (else + (block + (i32.store + (local.get $5) + (local.get $2) + ) + (i32.store offset=24 + (local.get $2) + (local.get $0) + ) + (i32.store offset=12 + (local.get $2) + (local.get $2) + ) + (i32.store offset=8 + (local.get $2) + (local.get $2) + ) + (br $do-once12) + ) ) - (br $do-once12) ) - ) - (br $__rjto$1) - ) - (if - (i32.and - (i32.ge_u - (local.tee $4 - (i32.load - (local.tee $1 - (i32.add - (local.get $0) - (i32.const 8) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (local.tee $4 + (i32.load + (local.tee $1 + (i32.add + (local.get $0) + (i32.const 8) + ) ) ) ) - ) - (local.tee $3 - (i32.load - (i32.const 192) + (local.tee $3 + (i32.load + (i32.const 192) + ) ) ) + (i32.ge_u + (local.get $0) + (local.get $3) + ) ) - (i32.ge_u - (local.get $0) - (local.get $3) - ) - ) - (block - (i32.store offset=12 - (local.get $4) - (local.get $2) - ) - (i32.store - (local.get $1) - (local.get $2) - ) - (i32.store offset=8 - (local.get $2) - (local.get $4) - ) - (i32.store offset=12 - (local.get $2) - (local.get $0) + (then + (block + (i32.store offset=12 + (local.get $4) + (local.get $2) + ) + (i32.store + (local.get $1) + (local.get $2) + ) + (i32.store offset=8 + (local.get $2) + (local.get $4) + ) + (i32.store offset=12 + (local.get $2) + (local.get $0) + ) + (i32.store offset=24 + (local.get $2) + (i32.const 0) + ) + ) ) - (i32.store offset=24 - (local.get $2) - (i32.const 0) + (else + (call $_abort) ) ) - (call $_abort) ) ) ) - (block - (i32.store - (i32.const 180) - (i32.or - (local.get $1) - (local.get $0) + (else + (block + (i32.store + (i32.const 180) + (i32.or + (local.get $1) + (local.get $0) + ) + ) + (i32.store + (local.get $4) + (local.get $2) + ) + (i32.store offset=24 + (local.get $2) + (local.get $4) + ) + (i32.store offset=12 + (local.get $2) + (local.get $2) + ) + (i32.store offset=8 + (local.get $2) + (local.get $2) ) - ) - (i32.store - (local.get $4) - (local.get $2) - ) - (i32.store offset=24 - (local.get $2) - (local.get $4) - ) - (i32.store offset=12 - (local.get $2) - (local.get $2) - ) - (i32.store offset=8 - (local.get $2) - (local.get $2) ) ) ) @@ -29810,9 +31618,13 @@ ) (if (local.get $0) - (return) - (local.set $0 - (i32.const 632) + (then + (return) + ) + (else + (local.set $0 + (i32.const 632) + ) ) ) (loop $while-in17 @@ -29934,7 +31746,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $1) @@ -29948,7 +31760,7 @@ ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $3 ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add @@ -29964,7 +31776,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -30014,7 +31826,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $3) @@ -30037,7 +31849,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (local.get $1) @@ -30072,98 +31884,106 @@ (local.get $2) (i32.const 20) ) - (block - (local.set $1 - (i32.and - (local.get $1) - (i32.const 255) - ) - ) - (if - (local.tee $3 + (then + (block + (local.set $1 (i32.and - (local.get $0) - (i32.const 3) + (local.get $1) + (i32.const 255) ) ) - (block - (local.set $3 - (i32.sub - (i32.add - (local.get $0) - (i32.const 4) - ) - (local.get $3) + (if + (local.tee $3 + (i32.and + (local.get $0) + (i32.const 3) ) ) - (loop $while-in - (if - (i32.lt_s - (local.get $0) - (local.get $3) - ) - (block - (i32.store8 - (local.get $0) - (local.get $1) - ) - (local.set $0 + (then + (block + (local.set $3 + (i32.sub (i32.add (local.get $0) - (i32.const 1) + (i32.const 4) + ) + (local.get $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (local.get $0) + (local.get $3) + ) + (then + (block + (i32.store8 + (local.get $0) + (local.get $1) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (br $while-in) + ) ) ) - (br $while-in) ) ) ) ) - ) - (local.set $3 - (i32.or + (local.set $3 (i32.or (i32.or - (local.get $1) + (i32.or + (local.get $1) + (i32.shl + (local.get $1) + (i32.const 8) + ) + ) (i32.shl (local.get $1) - (i32.const 8) + (i32.const 16) ) ) (i32.shl (local.get $1) - (i32.const 16) + (i32.const 24) ) ) - (i32.shl - (local.get $1) - (i32.const 24) - ) - ) - ) - (local.set $5 - (i32.and - (local.get $4) - (i32.const -4) ) - ) - (loop $while-in1 - (if - (i32.lt_s - (local.get $0) - (local.get $5) + (local.set $5 + (i32.and + (local.get $4) + (i32.const -4) ) - (block - (i32.store + ) + (loop $while-in1 + (if + (i32.lt_s (local.get $0) - (local.get $3) + (local.get $5) ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 4) + (then + (block + (i32.store + (local.get $0) + (local.get $3) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 4) + ) + ) + (br $while-in1) ) ) - (br $while-in1) ) ) ) @@ -30175,18 +31995,20 @@ (local.get $0) (local.get $4) ) - (block - (i32.store8 - (local.get $0) - (local.get $1) - ) - (local.set $0 - (i32.add + (then + (block + (i32.store8 (local.get $0) - (i32.const 1) + (local.get $1) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) ) + (br $while-in3) ) - (br $while-in3) ) ) ) @@ -30201,7 +32023,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.shr_u ;; CHECK-NEXT: (local.get $1) @@ -30251,33 +32073,35 @@ (local.get $2) (i32.const 32) ) - (block - (global.set $tempRet0 - (i32.shr_u - (local.get $1) - (local.get $2) - ) - ) - (return - (i32.or + (then + (block + (global.set $tempRet0 (i32.shr_u - (local.get $0) + (local.get $1) (local.get $2) ) - (i32.shl - (i32.and - (local.get $1) - (i32.sub - (i32.shl + ) + (return + (i32.or + (i32.shr_u + (local.get $0) + (local.get $2) + ) + (i32.shl + (i32.and + (local.get $1) + (i32.sub + (i32.shl + (i32.const 1) + (local.get $2) + ) (i32.const 1) - (local.get $2) ) - (i32.const 1) ) - ) - (i32.sub - (i32.const 32) - (local.get $2) + (i32.sub + (i32.const 32) + (local.get $2) + ) ) ) ) @@ -30301,7 +32125,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 32) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $tempRet0 ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (i32.shl @@ -30357,41 +32181,43 @@ (local.get $2) (i32.const 32) ) - (block - (global.set $tempRet0 - (i32.or - (i32.shl - (local.get $1) - (local.get $2) - ) - (i32.shr_u - (i32.and - (local.get $0) - (i32.shl - (i32.sub - (i32.shl + (then + (block + (global.set $tempRet0 + (i32.or + (i32.shl + (local.get $1) + (local.get $2) + ) + (i32.shr_u + (i32.and + (local.get $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (local.get $2) + ) (i32.const 1) + ) + (i32.sub + (i32.const 32) (local.get $2) ) - (i32.const 1) - ) - (i32.sub - (i32.const 32) - (local.get $2) ) ) - ) - (i32.sub - (i32.const 32) - (local.get $2) + (i32.sub + (i32.const 32) + (local.get $2) + ) ) ) ) - ) - (return - (i32.shl - (local.get $0) - (local.get $2) + (return + (i32.shl + (local.get $0) + (local.get $2) + ) ) ) ) @@ -30414,11 +32240,13 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4096) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (call $_emscripten_memcpy_big - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (call $_emscripten_memcpy_big + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -30436,20 +32264,22 @@ ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (loop $while-in ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store8 @@ -30486,7 +32316,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load @@ -30523,7 +32353,7 @@ ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store8 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.load8_s @@ -30561,11 +32391,13 @@ (local.get $2) (i32.const 4096) ) - (return - (call $_emscripten_memcpy_big - (local.get $0) - (local.get $1) - (local.get $2) + (then + (return + (call $_emscripten_memcpy_big + (local.get $0) + (local.get $1) + (local.get $2) + ) ) ) ) @@ -30583,82 +32415,90 @@ (i32.const 3) ) ) - (block - (loop $while-in - (if - (i32.and - (local.get $0) - (i32.const 3) - ) - (block - (if - (i32.eqz - (local.get $2) - ) - (return - (local.get $3) - ) - ) - (i32.store8 + (then + (block + (loop $while-in + (if + (i32.and (local.get $0) - (i32.load8_s - (local.get $1) - ) - ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 1) - ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 1) - ) + (i32.const 3) ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 1) + (then + (block + (if + (i32.eqz + (local.get $2) + ) + (then + (return + (local.get $3) + ) + ) + ) + (i32.store8 + (local.get $0) + (i32.load8_s + (local.get $1) + ) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 1) + ) + ) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 1) + ) + ) + (br $while-in) ) ) - (br $while-in) ) ) - ) - (loop $while-in1 - (if - (i32.ge_s - (local.get $2) - (i32.const 4) - ) - (block - (i32.store - (local.get $0) - (i32.load - (local.get $1) - ) - ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 4) - ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 4) - ) + (loop $while-in1 + (if + (i32.ge_s + (local.get $2) + (i32.const 4) ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 4) + (then + (block + (i32.store + (local.get $0) + (i32.load + (local.get $1) + ) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 4) + ) + ) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 4) + ) + ) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 4) + ) + ) + (br $while-in1) ) ) - (br $while-in1) ) ) ) @@ -30670,32 +32510,34 @@ (local.get $2) (i32.const 0) ) - (block - (i32.store8 - (local.get $0) - (i32.load8_s - (local.get $1) - ) - ) - (local.set $0 - (i32.add + (then + (block + (i32.store8 (local.get $0) - (i32.const 1) + (i32.load8_s + (local.get $1) + ) ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 1) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) ) - ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 1) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 1) + ) + ) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 1) + ) ) + (br $while-in3) ) - (br $while-in3) ) ) ) @@ -30809,11 +32651,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $r) - ;; CHECK-NEXT: (i64.store - ;; CHECK-NEXT: (local.get $r) - ;; CHECK-NEXT: (i64.rem_u - ;; CHECK-NEXT: (local.get $x64) - ;; CHECK-NEXT: (local.get $y64) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i64.store + ;; CHECK-NEXT: (local.get $r) + ;; CHECK-NEXT: (i64.rem_u + ;; CHECK-NEXT: (local.get $x64) + ;; CHECK-NEXT: (local.get $y64) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -30866,11 +32710,13 @@ ) (if (local.get $r) - (i64.store - (local.get $r) - (i64.rem_u - (local.get $x64) - (local.get $y64) + (then + (i64.store + (local.get $r) + (i64.rem_u + (local.get $x64) + (local.get $y64) + ) ) ) ) diff --git a/test/lit/passes/inlining_enable-tail-call.wast b/test/lit/passes/inlining_enable-tail-call.wast index ff1a9efbf6c..d2d7772cdd4 100644 --- a/test/lit/passes/inlining_enable-tail-call.wast +++ b/test/lit/passes/inlining_enable-tail-call.wast @@ -294,8 +294,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $hangLimit) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 54) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 54) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $hangLimit @@ -308,27 +310,35 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (block (result i32) - ;; CHECK-NEXT: (block $__inlined_func$func_3 (result i32) - ;; CHECK-NEXT: (local.set $8 - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (select - ;; CHECK-NEXT: (local.get $8) - ;; CHECK-NEXT: (local.tee $8 - ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (block $__inlined_func$func_3 (result i32) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (select + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.tee $8 + ;; CHECK-NEXT: (i32.const -1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $label$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label$0) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -346,8 +356,10 @@ (i32.eqz (global.get $hangLimit) ) - (return - (i32.const 54) + (then + (return + (i32.const 54) + ) ) ) (global.set $hangLimit @@ -360,14 +372,22 @@ (i32.eqz (if (result i32) (i32.const 1) - (if (result i32) - (i32.eqz - (call $func_3) + (then + (if (result i32) + (i32.eqz + (call $func_3) + ) + (then + (br $label$0) + ) + (else + (i32.const 0) + ) ) - (br $label$0) - (i32.const 0) ) - (unreachable) + (else + (unreachable) + ) ) ) ) @@ -396,8 +416,12 @@ ;; CHECK-NEXT: (call_indirect (type $T) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -410,8 +434,12 @@ (call_indirect (type $T) (if (result i32) ;; if copy must preserve the forced type (i32.const 0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) (i32.const 1) ) @@ -653,7 +681,9 @@ (func $2 (; 2 ;) (type $6) (if (global.get $global$0) - (return) + (then + (return) + ) ) (global.set $global$0 (i32.const 1) @@ -662,7 +692,9 @@ (func $13 (; 13 ;) (type $6) (if (global.get $global$0) - (unreachable) + (then + (unreachable) + ) ) (return_call $2) ) @@ -673,7 +705,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block @@ -681,7 +715,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (br $__inlined_func$2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $global$0 ;; CHECK-NEXT: (i32.const 1) @@ -714,26 +750,34 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (block $__inlined_func$is_odd (result i32) - ;; CHECK-NEXT: (local.set $1 - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $i) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return_call $is_even + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (block $__inlined_func$is_odd (result i32) + ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $i) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return_call $is_even + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -742,11 +786,15 @@ (func $is_even (param $i i32) (result i32) (if (result i32) (i32.eqz (local.get $i)) - (i32.const 1) - (return_call $is_odd - (i32.sub - (local.get $i) - (i32.const 1) + (then + (i32.const 1) + ) + (else + (return_call $is_odd + (i32.sub + (local.get $i) + (i32.const 1) + ) ) ) ) @@ -754,11 +802,15 @@ (func $is_odd (param $i i32) (result i32) (if (result i32) (i32.eqz (local.get $i)) - (i32.const 0) - (return_call $is_even - (i32.sub - (local.get $i) - (i32.const 1) + (then + (i32.const 0) + ) + (else + (return_call $is_even + (i32.sub + (local.get $i) + (i32.const 1) + ) ) ) ) diff --git a/test/lit/passes/inlining_splitting.wast b/test/lit/passes/inlining_splitting.wast index 145a69016c3..b34f74cf4f5 100644 --- a/test/lit/passes/inlining_splitting.wast +++ b/test/lit/passes/inlining_splitting.wast @@ -38,7 +38,9 @@ ;; the rest will be outlined into a new function with suffix "outlined". (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -59,8 +61,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -74,8 +78,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -89,8 +95,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$maybe-work-hard + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -113,10 +121,12 @@ ;; As above, but all we have is an if. (if (local.get $x) - (loop $l - (call $import) - (br_if $l - (local.get $x) + (then + (loop $l + (call $import) + (br_if $l + (local.get $x) + ) ) ) ) @@ -132,8 +142,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -145,8 +157,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$just-if + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -161,10 +175,16 @@ ;; CHECK-NEXT: (block $toplevel ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (br $toplevel) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $toplevel) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -173,13 +193,19 @@ (block $toplevel (if (local.get $x) - (block - (if - (local.get $x) - ;; A br to the toplevel block prevents us from outlining this code, - ;; as we can't outline a br without its target. - (br $toplevel) - (call $import) + (then + (block + (if + (local.get $x) + ;; A br to the toplevel block prevents us from outlining this code, + ;; as we can't outline a br without its target. + (then + (br $toplevel) + ) + (else + (call $import) + ) + ) ) ) ) @@ -203,7 +229,9 @@ ;; We can inline despite the non-initial, non-defaultable param. (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -224,7 +252,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (br $__inlined_func$nondefaultable-param$5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$nondefaultable-param$5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -243,7 +273,9 @@ ;; condition. (if (local.get $y) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -273,10 +305,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -296,10 +330,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $4) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params - ;; CHECK-NEXT: (local.get $3) - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$many-params + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -321,7 +357,9 @@ (i32.eqz (local.get $x) ) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -343,8 +381,10 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -360,8 +400,10 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-eqz + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -376,7 +418,9 @@ (if ;; A global read, also worth splitting. (global.get $glob) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -391,7 +435,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -401,7 +447,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-global) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -417,7 +465,9 @@ (ref.is_null (local.get $x) ) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -439,8 +489,10 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -456,8 +508,10 @@ ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$condition-ref.is + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -474,7 +528,9 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -488,7 +544,9 @@ (local.get $x) (local.get $x) ) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -514,7 +572,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -527,7 +587,9 @@ (i32.eqz (unreachable) ) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -551,7 +613,9 @@ ;; CHECK: (func $start-used-globally (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -565,7 +629,9 @@ ;; it). (if (global.get $glob) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -580,7 +646,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -590,7 +658,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $glob) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$start-used-globally) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -606,7 +676,9 @@ ;; that is split out. (if (global.get $glob) - (return) + (then + (return) + ) ) ) @@ -615,7 +687,9 @@ ;; CHECK-NEXT: (block $__inlined_func$inlineable$16 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) - ;; CHECK-NEXT: (br $__inlined_func$inlineable$16) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$inlineable$16) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -623,7 +697,9 @@ ;; CHECK-NEXT: (block $__inlined_func$inlineable$17 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $glob) - ;; CHECK-NEXT: (br $__inlined_func$inlineable$17) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$inlineable$17) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -637,7 +713,9 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -650,7 +728,9 @@ (nop) (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -674,8 +754,12 @@ ;; CHECK: (func $if-else (type $1) (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -686,8 +770,12 @@ ;; An else in the if prevents us from recognizing the pattern we want. (if (local.get $x) - (return) - (nop) + (then + (return) + ) + (else + (nop) + ) ) (loop $l (call $import) @@ -711,7 +799,9 @@ ;; CHECK: (func $if-non-return (type $1) (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $l ;; CHECK-NEXT: (call $import) @@ -722,7 +812,9 @@ ;; Something other than a return in the if body prevents us from outlining. (if (local.get $x) - (unreachable) + (then + (unreachable) + ) ) (loop $l (call $import) @@ -748,7 +840,9 @@ ;; function after us. (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -768,8 +862,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_67 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_67 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -783,8 +879,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_67 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$colliding-name_67 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -817,9 +915,11 @@ (ref.is_null (local.get $x) ) - (block - (call $import) - (unreachable) + (then + (block + (call $import) + (unreachable) + ) ) ) (local.get $x) @@ -839,9 +939,11 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null$20 - ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null$20 + ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -861,9 +963,11 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null$21 - ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$error-if-null$21 + ;; CHECK-NEXT: (call $byn-split-outlined-B$error-if-null + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -883,7 +987,7 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -896,9 +1000,11 @@ (ref.is_null (local.get $x) ) - (block - (call $import) - (unreachable) + (then + (block + (call $import) + (unreachable) + ) ) ) (nop) ;; An extra operation here prevents us from identifying the pattern. @@ -927,7 +1033,7 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) @@ -939,9 +1045,11 @@ (ref.is_null (local.get $x) ) - (block - (call $import) - (unreachable) + (then + (block + (call $import) + (unreachable) + ) ) ) (unreachable) ;; This prevents us from optimizing @@ -972,11 +1080,13 @@ ;; It is ok if the body is not unreachable (so long as it contains no ;; returns). We will optimize this, and just do a call to the outlined ;; code, without a return of a value here. - (block - ;; We need to have a loop here to avoid normal inlining from kicking in - ;; on the outlined code. - (loop $loop - (call $import) + (then + (block + ;; We need to have a loop here to avoid normal inlining from kicking in + ;; on the outlined code. + (loop $loop + (call $import) + ) ) ) ) @@ -997,8 +1107,10 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$reachable-if-body - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$reachable-if-body + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) @@ -1017,8 +1129,10 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$reachable-if-body - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$reachable-if-body + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) @@ -1038,7 +1152,9 @@ (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (local.get $x) ) @@ -1057,7 +1173,9 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -1075,7 +1193,9 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) @@ -1096,12 +1216,18 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) @@ -1111,13 +1237,19 @@ (ref.is_null (local.get $x) ) - (if - (i32.const 1) - ;; The return here prevents the optimization. - (return - (local.get $x) + (then + (if + (i32.const 1) + ;; The return here prevents the optimization. + (then + (return + (local.get $x) + ) + ) + (else + (call $import) + ) ) - (call $import) ) ) (local.get $x) @@ -1147,9 +1279,11 @@ ) ;; The if body is unreachable, but the function has no returned value. ;; When we outline this code, we should not try to return a value. - (block - (call $import) - (unreachable) + (then + (block + (call $import) + (unreachable) + ) ) ) ) @@ -1166,8 +1300,10 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1181,8 +1317,10 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$unreachable-if-body-no-result + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1198,17 +1336,21 @@ (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) ;; A second if. We can outline both if bodies. (if (ref.is_null (local.get $x) ) - (loop $x - (call $import) - (br_if $x - (global.get $glob) + (then + (loop $x + (call $import) + (br_if $x + (global.get $glob) + ) ) ) ) @@ -1231,19 +1373,23 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if$30 - ;; CHECK-NEXT: (local.set $2 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if$30 + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_76 - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_76 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $0) @@ -1262,19 +1408,23 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if$31 - ;; CHECK-NEXT: (local.set $3 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-B$multi-if$31 + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_76 - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-B$multi-if_76 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $1) @@ -1293,31 +1443,41 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $import) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -1327,31 +1487,41 @@ (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (if (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (if (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (if (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (if (ref.is_null (local.get $x) ) - (call $import) + (then + (call $import) + ) ) (local.get $x) ) @@ -1468,7 +1638,9 @@ ;; CHECK: (func $0 (type $none_=>_none) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global$0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block $__inlined_func$1 @@ -1489,7 +1661,9 @@ ;; A function that is a good candidate to partially inline. (if (global.get $global$0) - (return) + (then + (return) + ) ) (call $1) (call $1) @@ -1501,37 +1675,43 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-A$0$3 - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $__inlined_func$byn-split-outlined-A$0$3 ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $__inlined_func$1 - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $__inlined_func$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0$4 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (global.get $global$0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0$4 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (global.get $global$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $__inlined_func$1$1 - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $__inlined_func$1$1 ;; CHECK-NEXT: (block ;; CHECK-NEXT: (block - ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0$5 - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (global.get $global$0) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (block $__inlined_func$byn-split-inlineable-A$0$5 + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (global.get $global$0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1668,7 +1848,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (call $byn-split-outlined-A$0_21) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (call $byn-split-outlined-A$0_21) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1684,7 +1866,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (call $byn-split-outlined-A$0_21) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (call $byn-split-outlined-A$0_21) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1703,7 +1887,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (call $byn-split-outlined-A$0_22) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (call $byn-split-outlined-A$0_22) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1719,7 +1905,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (call $byn-split-outlined-A$0_22) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (call $byn-split-outlined-A$0_22) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1752,7 +1940,9 @@ ;; case, to avoid wasted work. (if (local.get $x) - (return) + (then + (return) + ) ) ;; 6x3 = 18 items, close to the default size limit of 20. With the if, we ;; hit that limit and are too big. But if we did partial inlining then the @@ -1779,7 +1969,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (br $__inlined_func$middle-size-A) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$middle-size-A) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) @@ -1819,7 +2011,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (br $__inlined_func$middle-size-A$1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$middle-size-A$1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) @@ -1869,7 +2063,9 @@ ;; it. (if (local.get $x) - (return) + (then + (return) + ) ) ;; 6x4 = 24 items, which is more than the inlining limit. (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) @@ -1890,8 +2086,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$big-size-A - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$big-size-A + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1905,8 +2103,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $byn-split-outlined-A$big-size-A - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $byn-split-outlined-A$big-size-A + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1926,11 +2126,13 @@ ;; As above, but for pattern B and not A. (if (local.get $x) - (block - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (unreachable) + (then + (block + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (unreachable) + ) ) ) (local.get $x) @@ -1948,7 +2150,7 @@ ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -1993,7 +2195,7 @@ ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) @@ -2049,12 +2251,14 @@ ;; it. (if (local.get $x) - (block - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) - (unreachable) + (then + (block + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (drop (i32.const 0)) (drop (i32.const 0)) (drop (i32.const 0)) + (unreachable) + ) ) ) (local.get $x) @@ -2072,9 +2276,11 @@ ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$big-size-B$6 - ;; CHECK-NEXT: (call $byn-split-outlined-B$big-size-B - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$big-size-B$6 + ;; CHECK-NEXT: (call $byn-split-outlined-B$big-size-B + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2092,9 +2298,11 @@ ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$big-size-B$7 - ;; CHECK-NEXT: (call $byn-split-outlined-B$big-size-B - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $__inlined_func$byn-split-inlineable-B$big-size-B$7 + ;; CHECK-NEXT: (call $byn-split-outlined-B$big-size-B + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/inlining_splitting_basics.wast b/test/lit/passes/inlining_splitting_basics.wast index 017e043a7f2..fe07a3926cb 100644 --- a/test/lit/passes/inlining_splitting_basics.wast +++ b/test/lit/passes/inlining_splitting_basics.wast @@ -33,7 +33,9 @@ ;; NORMAL_: (func $pattern-A (type $1) (param $x i32) ;; NORMAL_-NEXT: (if ;; NORMAL_-NEXT: (local.get $x) - ;; NORMAL_-NEXT: (return) + ;; NORMAL_-NEXT: (then + ;; NORMAL_-NEXT: (return) + ;; NORMAL_-NEXT: ) ;; NORMAL_-NEXT: ) ;; NORMAL_-NEXT: (loop $l ;; NORMAL_-NEXT: (call $import) @@ -43,7 +45,9 @@ (func $pattern-A (param $x i32) (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -71,8 +75,10 @@ ;; PARTIAL-NEXT: (i32.eqz ;; PARTIAL-NEXT: (local.get $0) ;; PARTIAL-NEXT: ) - ;; PARTIAL-NEXT: (call $byn-split-outlined-A$pattern-A - ;; PARTIAL-NEXT: (local.get $0) + ;; PARTIAL-NEXT: (then + ;; PARTIAL-NEXT: (call $byn-split-outlined-A$pattern-A + ;; PARTIAL-NEXT: (local.get $0) + ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) @@ -86,8 +92,10 @@ ;; PARTIAL-NEXT: (i32.eqz ;; PARTIAL-NEXT: (local.get $1) ;; PARTIAL-NEXT: ) - ;; PARTIAL-NEXT: (call $byn-split-outlined-A$pattern-A - ;; PARTIAL-NEXT: (local.get $1) + ;; PARTIAL-NEXT: (then + ;; PARTIAL-NEXT: (call $byn-split-outlined-A$pattern-A + ;; PARTIAL-NEXT: (local.get $1) + ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) @@ -109,7 +117,7 @@ ;; NORMAL_-NEXT: (i32.eqz ;; NORMAL_-NEXT: (local.get $x) ;; NORMAL_-NEXT: ) - ;; NORMAL_-NEXT: (block + ;; NORMAL_-NEXT: (then ;; NORMAL_-NEXT: (call $import) ;; NORMAL_-NEXT: (unreachable) ;; NORMAL_-NEXT: ) @@ -121,9 +129,11 @@ (i32.eqz (local.get $x) ) - (block - (call $import) - (unreachable) + (then + (block + (call $import) + (unreachable) + ) ) ) (local.get $x) @@ -155,9 +165,11 @@ ;; PARTIAL-NEXT: (i32.eqz ;; PARTIAL-NEXT: (local.get $0) ;; PARTIAL-NEXT: ) - ;; PARTIAL-NEXT: (br $__inlined_func$byn-split-inlineable-B$pattern-B$2 - ;; PARTIAL-NEXT: (call $byn-split-outlined-B$pattern-B - ;; PARTIAL-NEXT: (local.get $0) + ;; PARTIAL-NEXT: (then + ;; PARTIAL-NEXT: (br $__inlined_func$byn-split-inlineable-B$pattern-B$2 + ;; PARTIAL-NEXT: (call $byn-split-outlined-B$pattern-B + ;; PARTIAL-NEXT: (local.get $0) + ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) @@ -177,9 +189,11 @@ ;; PARTIAL-NEXT: (i32.eqz ;; PARTIAL-NEXT: (local.get $1) ;; PARTIAL-NEXT: ) - ;; PARTIAL-NEXT: (br $__inlined_func$byn-split-inlineable-B$pattern-B$3 - ;; PARTIAL-NEXT: (call $byn-split-outlined-B$pattern-B - ;; PARTIAL-NEXT: (local.get $1) + ;; PARTIAL-NEXT: (then + ;; PARTIAL-NEXT: (br $__inlined_func$byn-split-inlineable-B$pattern-B$3 + ;; PARTIAL-NEXT: (call $byn-split-outlined-B$pattern-B + ;; PARTIAL-NEXT: (local.get $1) + ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) ;; PARTIAL-NEXT: ) diff --git a/test/lit/passes/j2cl-inline.wast b/test/lit/passes/j2cl-inline.wast index 263be0726fc..9b6d4127b9a 100644 --- a/test/lit/passes/j2cl-inline.wast +++ b/test/lit/passes/j2cl-inline.wast @@ -24,7 +24,9 @@ ;; CHECK: (func $clinit-non-trivial__@Zoo (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $$class-initialized@Zoo) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $$class-initialized@Zoo ;; CHECK-NEXT: (i32.const 1) @@ -32,7 +34,9 @@ ;; CHECK-NEXT: ) (func $clinit-non-trivial__@Zoo (if (global.get $$class-initialized@Zoo) - (return) + (then + (return) + ) ) (global.set $$class-initialized@Zoo (i32.const 1)) ) diff --git a/test/lit/passes/local-cse.wast b/test/lit/passes/local-cse.wast index c0e4c9b59cc..c38ca243a72 100644 --- a/test/lit/passes/local-cse.wast +++ b/test/lit/passes/local-cse.wast @@ -31,7 +31,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.add @@ -77,7 +79,7 @@ (drop (i32.add (i32.const 1) (i32.const 2)) ) - (if (i32.const 0) (nop)) + (if (i32.const 0) (then (nop))) ;; This add is after an if, which means we are no longer in the same basic ;; block - which means we cannot optimize it with the previous identical ;; adds. @@ -399,13 +401,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -420,17 +426,21 @@ (if (i32.const 0) ;; This add is dominated by the above, so we can use a tee of it. - (drop - (i32.add - (i32.const 2) - (i32.const 3) + (then + (drop + (i32.add + (i32.const 2) + (i32.const 3) + ) ) ) ;; We could optimize this add as well, but do not yet. TODO - (drop - (i32.add - (i32.const 2) - (i32.const 3) + (else + (drop + (i32.add + (i32.const 2) + (i32.const 3) + ) ) ) ) diff --git a/test/lit/passes/local-subtyping-nn.wast b/test/lit/passes/local-subtyping-nn.wast index 04cade7e0e8..3754230d82f 100644 --- a/test/lit/passes/local-subtyping-nn.wast +++ b/test/lit/passes/local-subtyping-nn.wast @@ -44,9 +44,11 @@ ;; CHECK-NEXT: (local $x nullref) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (ref.as_non_null - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (ref.as_non_null + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -59,8 +61,10 @@ (if (local.get $i) ;; The only set to this local uses a non-nullable type. - (local.set $x - (ref.as_non_null (ref.null $struct)) + (then + (local.set $x + (ref.as_non_null (ref.null $struct)) + ) ) ) (drop diff --git a/test/lit/passes/local-subtyping.wast b/test/lit/passes/local-subtyping.wast index 17ad5dc135e..74f9d53a82f 100644 --- a/test/lit/passes/local-subtyping.wast +++ b/test/lit/passes/local-subtyping.wast @@ -30,11 +30,15 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref i31)) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (ref.i31 - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (ref.i31 + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.i31 - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.i31 + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -55,8 +59,12 @@ (drop (if (result anyref) (local.get $x) - (ref.i31 (i32.const 0)) - (ref.i31 (i32.const 1)) + (then + (ref.i31 (i32.const 0)) + ) + (else + (ref.i31 (i32.const 1)) + ) ) ) (drop @@ -324,8 +332,10 @@ ;; CHECK-NEXT: (local $x (ref null $2)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (ref.func $uses-default) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (ref.func $uses-default) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -337,7 +347,9 @@ (if (local.get $i) ;; The only set to this local uses a more specific type than funcref. - (local.set $x (ref.func $uses-default)) + (then + (local.set $x (ref.func $uses-default)) + ) ) (drop ;; This get may use the default value, but it is ok to have a null of a @@ -472,8 +484,10 @@ ;; CHECK-NEXT: (local $x (ref null $0)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (ref.func $become-non-nullable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (ref.func $become-non-nullable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -487,8 +501,10 @@ ;; though.) (if (i32.const 1) - (local.set $x - (ref.func $become-non-nullable) + (then + (local.set $x + (ref.func $become-non-nullable) + ) ) ) (drop diff --git a/test/lit/passes/memory-packing_all-features.wast b/test/lit/passes/memory-packing_all-features.wast index 1f0886d66a8..cf6c2aeef49 100644 --- a/test/lit/passes/memory-packing_all-features.wast +++ b/test/lit/passes/memory-packing_all-features.wast @@ -118,7 +118,9 @@ ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -186,7 +188,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -511,7 +515,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -573,7 +579,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -624,7 +632,9 @@ ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -763,7 +773,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $0) @@ -881,7 +893,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -993,7 +1007,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -1055,7 +1071,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_4) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -1112,7 +1130,9 @@ ;; CHECK-NEXT: (block ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_5) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -1175,7 +1195,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_6) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_6 @@ -1209,7 +1231,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $zero-size-undropped @@ -1312,7 +1336,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_8) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_8 @@ -1380,7 +1406,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state @@ -1414,7 +1442,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1 @@ -1448,7 +1478,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2 @@ -1481,7 +1513,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (block ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_3 @@ -2234,7 +2268,9 @@ ;; CHECK: (func $0 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i32.const 0) @@ -2316,7 +2352,9 @@ ;; CHECK: (func $0 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (i64.const 0) @@ -2364,7 +2402,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $0) diff --git a/test/lit/passes/memory-packing_zero-filled-memory64.wast b/test/lit/passes/memory-packing_zero-filled-memory64.wast index 308666de3f1..23571184070 100644 --- a/test/lit/passes/memory-packing_zero-filled-memory64.wast +++ b/test/lit/passes/memory-packing_zero-filled-memory64.wast @@ -22,7 +22,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $__mem_segment_drop_state) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.fill ;; CHECK-NEXT: (local.get $1) diff --git a/test/lit/passes/merge-blocks.wast b/test/lit/passes/merge-blocks.wast index b6fa8f58532..66b0e8b71f5 100644 --- a/test/lit/passes/merge-blocks.wast +++ b/test/lit/passes/merge-blocks.wast @@ -192,13 +192,13 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 2) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 4) ;; CHECK-NEXT: ) @@ -213,13 +213,17 @@ (drop (i32.const 0)) (i32.const 1) ) - (block (result i32) - (drop (i32.const 2)) - (i32.const 3) + (then + (block (result i32) + (drop (i32.const 2)) + (i32.const 3) + ) ) - (block (result i32) - (drop (i32.const 4)) - (i32.const 5) + (else + (block (result i32) + (drop (i32.const 4)) + (i32.const 5) + ) ) ) ) diff --git a/test/lit/passes/multi-memory-lowering.wast b/test/lit/passes/multi-memory-lowering.wast index 7463b7810ad..7508a5627ca 100644 --- a/test/lit/passes/multi-memory-lowering.wast +++ b/test/lit/passes/multi-memory-lowering.wast @@ -96,7 +96,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory1_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $0) ;; BOUNDS-NEXT: ) @@ -122,7 +124,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $1) ;; BOUNDS-NEXT: ) @@ -148,7 +152,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory3_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -212,7 +218,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory1_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $0) ;; BOUNDS-NEXT: ) @@ -237,7 +245,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $1) ;; BOUNDS-NEXT: ) @@ -262,7 +272,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory3_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -307,7 +319,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory1_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $1) ;; BOUNDS-NEXT: ) @@ -349,7 +363,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -392,7 +408,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory3_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $1) ;; BOUNDS-NEXT: ) @@ -432,7 +450,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $1) ;; BOUNDS-NEXT: ) @@ -506,7 +526,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory3_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -533,7 +555,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $3) ;; BOUNDS-NEXT: ) @@ -558,7 +582,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory1_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $4) ;; BOUNDS-NEXT: ) @@ -586,7 +612,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $5) ;; BOUNDS-NEXT: ) @@ -653,7 +681,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory1_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -708,7 +738,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -721,7 +753,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory3_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $0) ;; BOUNDS-NEXT: ) @@ -772,7 +806,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (call $memory2_size) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (if ;; BOUNDS-NEXT: (i32.gt_u @@ -782,7 +818,9 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (i32.const 1) ;; BOUNDS-NEXT: ) - ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: (then + ;; BOUNDS-NEXT: (unreachable) + ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $2) ;; BOUNDS-NEXT: ) @@ -851,8 +889,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy @@ -909,8 +949,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy @@ -954,8 +996,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $return_size) @@ -1013,8 +1057,10 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (i32.const -1) ;; BOUNDS-NEXT: ) -;; BOUNDS-NEXT: (return -;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: (then +;; BOUNDS-NEXT: (return +;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (memory.copy @@ -1071,8 +1117,10 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (i32.const -1) ;; BOUNDS-NEXT: ) -;; BOUNDS-NEXT: (return -;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: (then +;; BOUNDS-NEXT: (return +;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (memory.copy @@ -1116,8 +1164,10 @@ ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (i32.const -1) ;; BOUNDS-NEXT: ) -;; BOUNDS-NEXT: (return -;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: (then +;; BOUNDS-NEXT: (return +;; BOUNDS-NEXT: (i32.const -1) +;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: ) ;; BOUNDS-NEXT: (local.get $return_size) diff --git a/test/lit/passes/no-inline.wast b/test/lit/passes/no-inline.wast index 5e5c1ea0e35..9fd95d0b769 100644 --- a/test/lit/passes/no-inline.wast +++ b/test/lit/passes/no-inline.wast @@ -49,7 +49,9 @@ (func $partial-yes-inline (param $x i32) (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -60,7 +62,9 @@ ;; NO_PART: (func $partial-maybe-inline (param $x i32) ;; NO_PART-NEXT: (if ;; NO_PART-NEXT: (local.get $x) - ;; NO_PART-NEXT: (return) + ;; NO_PART-NEXT: (then + ;; NO_PART-NEXT: (return) + ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: (loop $l ;; NO_PART-NEXT: (call $import) @@ -70,7 +74,9 @@ ;; NO_BOTH: (func $partial-maybe-inline (param $x i32) ;; NO_BOTH-NEXT: (if ;; NO_BOTH-NEXT: (local.get $x) - ;; NO_BOTH-NEXT: (return) + ;; NO_BOTH-NEXT: (then + ;; NO_BOTH-NEXT: (return) + ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: (loop $l ;; NO_BOTH-NEXT: (call $import) @@ -80,7 +86,9 @@ (func $partial-maybe-inline (param $x i32) (if (local.get $x) - (return) + (then + (return) + ) ) (loop $l (call $import) @@ -118,8 +126,10 @@ ;; YES_ALL-NEXT: (i32.eqz ;; YES_ALL-NEXT: (local.get $2) ;; YES_ALL-NEXT: ) - ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; YES_ALL-NEXT: (local.get $2) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; YES_ALL-NEXT: (local.get $2) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -133,8 +143,10 @@ ;; YES_ALL-NEXT: (i32.eqz ;; YES_ALL-NEXT: (local.get $3) ;; YES_ALL-NEXT: ) - ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline - ;; YES_ALL-NEXT: (local.get $3) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline + ;; YES_ALL-NEXT: (local.get $3) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -169,8 +181,10 @@ ;; NO_PART-NEXT: (i32.eqz ;; NO_PART-NEXT: (local.get $2) ;; NO_PART-NEXT: ) - ;; NO_PART-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_PART-NEXT: (local.get $2) + ;; NO_PART-NEXT: (then + ;; NO_PART-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_PART-NEXT: (local.get $2) + ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) @@ -203,8 +217,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $1) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -218,8 +234,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $2) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline - ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline + ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -248,8 +266,10 @@ ;; NO_BOTH-NEXT: (i32.eqz ;; NO_BOTH-NEXT: (local.get $1) ;; NO_BOTH-NEXT: ) - ;; NO_BOTH-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_BOTH-NEXT: (local.get $1) + ;; NO_BOTH-NEXT: (then + ;; NO_BOTH-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_BOTH-NEXT: (local.get $1) + ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) @@ -303,8 +323,10 @@ ;; YES_ALL-NEXT: (i32.eqz ;; YES_ALL-NEXT: (local.get $2) ;; YES_ALL-NEXT: ) - ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; YES_ALL-NEXT: (local.get $2) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; YES_ALL-NEXT: (local.get $2) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -318,8 +340,10 @@ ;; YES_ALL-NEXT: (i32.eqz ;; YES_ALL-NEXT: (local.get $3) ;; YES_ALL-NEXT: ) - ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline - ;; YES_ALL-NEXT: (local.get $3) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline + ;; YES_ALL-NEXT: (local.get $3) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -354,8 +378,10 @@ ;; NO_PART-NEXT: (i32.eqz ;; NO_PART-NEXT: (local.get $2) ;; NO_PART-NEXT: ) - ;; NO_PART-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_PART-NEXT: (local.get $2) + ;; NO_PART-NEXT: (then + ;; NO_PART-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_PART-NEXT: (local.get $2) + ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) @@ -388,8 +414,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $1) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -403,8 +431,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $2) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline - ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$partial-maybe-inline + ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -433,8 +463,10 @@ ;; NO_BOTH-NEXT: (i32.eqz ;; NO_BOTH-NEXT: (local.get $1) ;; NO_BOTH-NEXT: ) - ;; NO_BOTH-NEXT: (call $byn-split-outlined-A$partial-yes-inline - ;; NO_BOTH-NEXT: (local.get $1) + ;; NO_BOTH-NEXT: (then + ;; NO_BOTH-NEXT: (call $byn-split-outlined-A$partial-yes-inline + ;; NO_BOTH-NEXT: (local.get $1) + ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) @@ -526,13 +558,17 @@ ;; NO_PART: (func $maybe-partial-or-full-1 (param $x i32) ;; NO_PART-NEXT: (if ;; NO_PART-NEXT: (local.get $x) - ;; NO_PART-NEXT: (call $import) + ;; NO_PART-NEXT: (then + ;; NO_PART-NEXT: (call $import) + ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_BOTH: (func $maybe-partial-or-full-1 (param $x i32) ;; NO_BOTH-NEXT: (if ;; NO_BOTH-NEXT: (local.get $x) - ;; NO_BOTH-NEXT: (call $import) + ;; NO_BOTH-NEXT: (then + ;; NO_BOTH-NEXT: (call $import) + ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) (func $maybe-partial-or-full-1 (param $x i32) @@ -542,14 +578,18 @@ ;; partially inline it. (if (local.get $x) - (call $import) + (then + (call $import) + ) ) ) ;; NO_PART: (func $maybe-partial-or-full-2 (param $x i32) ;; NO_PART-NEXT: (if ;; NO_PART-NEXT: (local.get $x) - ;; NO_PART-NEXT: (return) + ;; NO_PART-NEXT: (then + ;; NO_PART-NEXT: (return) + ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: ) ;; NO_PART-NEXT: (nop) ;; NO_PART-NEXT: (drop @@ -580,7 +620,9 @@ ;; NO_BOTH: (func $maybe-partial-or-full-2 (param $x i32) ;; NO_BOTH-NEXT: (if ;; NO_BOTH-NEXT: (local.get $x) - ;; NO_BOTH-NEXT: (return) + ;; NO_BOTH-NEXT: (then + ;; NO_BOTH-NEXT: (return) + ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: ) ;; NO_BOTH-NEXT: (nop) ;; NO_BOTH-NEXT: (drop @@ -613,7 +655,9 @@ ;; some extra things to the function size for partial inlining to kick in. (if (local.get $x) - (return) + (then + (return) + ) ) (nop) (drop @@ -654,7 +698,9 @@ ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: (if ;; YES_ALL-NEXT: (local.get $0) - ;; YES_ALL-NEXT: (call $import) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $import) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -665,7 +711,9 @@ ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: (if ;; YES_ALL-NEXT: (local.get $1) - ;; YES_ALL-NEXT: (call $import) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (call $import) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) @@ -677,7 +725,9 @@ ;; YES_ALL-NEXT: (block ;; YES_ALL-NEXT: (if ;; YES_ALL-NEXT: (local.get $2) - ;; YES_ALL-NEXT: (br $__inlined_func$maybe-partial-or-full-2$2) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (br $__inlined_func$maybe-partial-or-full-2$2) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: (nop) ;; YES_ALL-NEXT: (drop @@ -715,7 +765,9 @@ ;; YES_ALL-NEXT: (block ;; YES_ALL-NEXT: (if ;; YES_ALL-NEXT: (local.get $3) - ;; YES_ALL-NEXT: (br $__inlined_func$maybe-partial-or-full-2$3) + ;; YES_ALL-NEXT: (then + ;; YES_ALL-NEXT: (br $__inlined_func$maybe-partial-or-full-2$3) + ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: ) ;; YES_ALL-NEXT: (nop) ;; YES_ALL-NEXT: (drop @@ -772,8 +824,10 @@ ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: (if ;; NO_FULL-NEXT: (local.get $0) - ;; NO_FULL-NEXT: (call $byn-split-outlined-B$maybe-partial-or-full-1 - ;; NO_FULL-NEXT: (local.get $0) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-B$maybe-partial-or-full-1 + ;; NO_FULL-NEXT: (local.get $0) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -785,8 +839,10 @@ ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: (if ;; NO_FULL-NEXT: (local.get $1) - ;; NO_FULL-NEXT: (call $byn-split-outlined-B$maybe-partial-or-full-1 - ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-B$maybe-partial-or-full-1 + ;; NO_FULL-NEXT: (local.get $1) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -800,8 +856,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $2) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$maybe-partial-or-full-2 - ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$maybe-partial-or-full-2 + ;; NO_FULL-NEXT: (local.get $2) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) @@ -815,8 +873,10 @@ ;; NO_FULL-NEXT: (i32.eqz ;; NO_FULL-NEXT: (local.get $3) ;; NO_FULL-NEXT: ) - ;; NO_FULL-NEXT: (call $byn-split-outlined-A$maybe-partial-or-full-2 - ;; NO_FULL-NEXT: (local.get $3) + ;; NO_FULL-NEXT: (then + ;; NO_FULL-NEXT: (call $byn-split-outlined-A$maybe-partial-or-full-2 + ;; NO_FULL-NEXT: (local.get $3) + ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) ;; NO_FULL-NEXT: ) diff --git a/test/lit/passes/once-reduction.wast b/test/lit/passes/once-reduction.wast index 45170a0e185..af9f4f113ed 100644 --- a/test/lit/passes/once-reduction.wast +++ b/test/lit/passes/once-reduction.wast @@ -14,7 +14,9 @@ ;; A minimal "once" function. It is so trivial we can remove its body. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -40,7 +42,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -52,7 +56,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ;; Add some more content in the function. @@ -62,7 +68,7 @@ ;; CHECK: (func $caller-if-1 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -76,11 +82,13 @@ ;; Add more calls, and ones that are conditional. (if (i32.const 1) - (block - (call $once) - (call $once) - (call $once) - (call $once) + (then + (block + (call $once) + (call $once) + (call $once) + (call $once) + ) ) ) (call $once) @@ -90,8 +98,10 @@ ;; CHECK: (func $caller-if-2 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -104,11 +114,15 @@ ;; call after the if is *not* optimized. (if (i32.const 1) - (call $once) - (block - (call $once) + (then (call $once) ) + (else + (block + (call $once) + (call $once) + ) + ) ) (call $once) (call $once) @@ -118,7 +132,9 @@ ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (nop) @@ -134,7 +150,9 @@ (loop $loop (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (call $once) @@ -148,7 +166,9 @@ ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $loop ;; CHECK-NEXT: (i32.const 1) @@ -162,7 +182,9 @@ (loop $loop (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (br_if $loop (i32.const 1)) ) @@ -202,7 +224,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -212,7 +236,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $foo) @@ -243,7 +269,9 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -254,7 +282,9 @@ (nop) (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $foo) @@ -283,7 +313,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (global.set $once @@ -294,7 +326,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (nop) (global.set $once (i32.const 1)) @@ -324,8 +358,12 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (call $foo) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $foo) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -335,8 +373,12 @@ (func $once (if (global.get $once) - (return) - (call $foo) + (then + (return) + ) + (else + (call $foo) + ) ) (global.set $once (i32.const 1)) (call $foo) @@ -364,7 +406,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once1) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once2 ;; CHECK-NEXT: (i32.const 1) @@ -373,7 +417,9 @@ (func $once (if (global.get $once1) - (return) + (then + (return) + ) ) (global.set $once2 (i32.const 1)) ) @@ -398,7 +444,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 0) @@ -407,7 +455,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 0)) ) @@ -432,7 +482,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -441,7 +493,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -475,7 +529,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 42)) ) @@ -517,7 +573,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -527,7 +585,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $once) @@ -546,7 +606,9 @@ ;; CHECK-NEXT: (i32.trunc_f64_s ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (f64.const 1) @@ -558,7 +620,9 @@ (i32.trunc_f64_s (global.get $once) ) - (return) + (then + (return) + ) ) (global.set $once (f64.const 1)) ) @@ -592,7 +656,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -617,7 +683,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.eqz @@ -630,7 +698,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.eqz (i32.eqz (i32.const 1)))) ) @@ -657,7 +727,9 @@ ;; CHECK: (func $once (type $0) (param $x i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -666,7 +738,9 @@ (func $once (param $x i32) (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -697,8 +771,10 @@ ;; CHECK: (func $once (type $0) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once @@ -709,7 +785,9 @@ (func $once (result i32) (if (global.get $once) - (return (i32.const 2)) + (then + (return (i32.const 2)) + ) ) (global.set $once (i32.const 1)) (i32.const 3) @@ -740,7 +818,9 @@ ;; CHECK-NEXT: (loop $loop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -751,7 +831,9 @@ (loop $loop (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -777,13 +859,17 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $once (if (global.get $once) - (return) + (then + (return) + ) ) ) @@ -807,7 +893,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -816,7 +904,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -845,7 +935,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -857,7 +949,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (drop (global.get $once)) @@ -887,7 +981,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -921,7 +1017,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -929,53 +1027,79 @@ ;; CHECK: (func $caller (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $once) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) @@ -983,53 +1107,79 @@ (func $caller (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (if (i32.const 1) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (call $once) (if (i32.const 1) - (nop) - (call $once) + (then + (nop) + ) + (else + (call $once) + ) ) (call $once) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (if (i32.const 1) - (nop) - (call $once) + (then + (nop) + ) + (else + (call $once) + ) ) (call $once) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) (call $once) (call $once) @@ -1056,7 +1206,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -1066,7 +1218,9 @@ ;; CHECK-NEXT: (do ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $once) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch $tag @@ -1081,7 +1235,9 @@ (do (if (i32.const 1) - (call $once) + (then + (call $once) + ) ) ) (catch $tag @@ -1111,7 +1267,9 @@ ;; CHECK: (func $once1 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once1) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once1 ;; CHECK-NEXT: (i32.const 1) @@ -1128,7 +1286,9 @@ (func $once1 (if (global.get $once1) - (return) + (then + (return) + ) ) (global.set $once1 (i32.const 1)) (call $once1) @@ -1144,7 +1304,9 @@ ;; CHECK: (func $many1 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $many1) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $many1 ;; CHECK-NEXT: (i32.const 0) @@ -1161,7 +1323,9 @@ (func $many1 (if (global.get $many1) - (return) + (then + (return) + ) ) (global.set $many1 (i32.const 0)) ;; prevent this global being "once" (call $many2) @@ -1177,7 +1341,9 @@ ;; CHECK: (func $once2 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once2) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once2 ;; CHECK-NEXT: (i32.const 2) @@ -1194,7 +1360,9 @@ (func $once2 (if (global.get $once2) - (return) + (then + (return) + ) ) (global.set $once2 (i32.const 2)) (call $once2) @@ -1210,7 +1378,9 @@ ;; CHECK: (func $many2 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $many2) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $many1 ;; CHECK-NEXT: (i32.const 0) @@ -1227,7 +1397,9 @@ (func $many2 (if (global.get $many2) - (return) + (then + (return) + ) ) (global.set $many1 (i32.const 0)) (call $many1) @@ -1256,7 +1428,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -1324,7 +1498,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -1333,7 +1509,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -1362,7 +1540,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -1371,7 +1551,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -1406,7 +1588,9 @@ ;; two lines here (the early-exit logic). (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $once.1) @@ -1420,7 +1604,9 @@ ;; out. (if (global.get $once.1) - (return) + (then + (return) + ) ) (global.set $once.1 (i32.const 1)) ) @@ -1501,7 +1687,9 @@ ;; logic. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $once.1) @@ -1510,7 +1698,9 @@ ;; CHECK: (func $once.1 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once.1) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once.1 ;; CHECK-NEXT: (i32.const 1) @@ -1523,7 +1713,9 @@ ;; cannot do so here (it would risk an infinite loop). (if (global.get $once.1) - (return) + (then + (return) + ) ) (global.set $once.1 (i32.const 1)) (call $once) ;; This call was added. @@ -1593,7 +1785,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -1607,7 +1801,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) (call $once.1) @@ -1634,7 +1830,9 @@ ;; CHECK: (func $once.1 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once.1) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once.1 ;; CHECK-NEXT: (i32.const 1) @@ -1648,7 +1846,9 @@ (func $once.1 (if (global.get $once.1) - (return) + (then + (return) + ) ) (global.set $once.1 (i32.const 1)) (call $once) @@ -1662,7 +1862,9 @@ ;; CHECK: (func $once.2 (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once.2) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once.2 ;; CHECK-NEXT: (i32.const 1) @@ -1676,7 +1878,9 @@ (func $once.2 (if (global.get $once.2) - (return) + (then + (return) + ) ) (global.set $once.2 (i32.const 1)) (call $once) @@ -1699,7 +1903,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -1709,7 +1915,9 @@ (func $once (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ;; A recursive call. This of course does not recurse infinitely since the @@ -1743,7 +1951,9 @@ ;; A minimal "once" function. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ) @@ -1789,7 +1999,9 @@ ;; CHECK: (func $once (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -1800,7 +2012,9 @@ ;; We should not remove this early-exit logic. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1)) ;; A call to a non-"once" function. diff --git a/test/lit/passes/optimize-casts.wast b/test/lit/passes/optimize-casts.wast index d0b4d05d79f..512a04e9dc4 100644 --- a/test/lit/passes/optimize-casts.wast +++ b/test/lit/passes/optimize-casts.wast @@ -437,7 +437,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $x) @@ -453,7 +455,9 @@ ;; this atm. (if (i32.const 0) - (return) + (then + (return) + ) ) (drop (local.get $x) @@ -1291,7 +1295,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (ref.as_non_null @@ -1322,17 +1326,19 @@ ) (if (i32.const 0) - (block - (drop - ;; The ref.as_non_null can be moved here because - ;; it is in the same block in the same arm of the - ;; if statement. - (local.get $x) - ) - (drop - (ref.as_non_null + (then + (block + (drop + ;; The ref.as_non_null can be moved here because + ;; it is in the same block in the same arm of the + ;; if statement. (local.get $x) ) + (drop + (ref.as_non_null + (local.get $x) + ) + ) ) ) ) diff --git a/test/lit/passes/optimize-instructions-call_ref.wast b/test/lit/passes/optimize-instructions-call_ref.wast index 29c09eb0ffb..f83ddb09127 100644 --- a/test/lit/passes/optimize-instructions-call_ref.wast +++ b/test/lit/passes/optimize-instructions-call_ref.wast @@ -256,13 +256,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (call $foo - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $foo + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $bar - ;; CHECK-NEXT: (local.get $4) - ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $bar + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -311,13 +315,17 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $get-i32) - ;; CHECK-NEXT: (return_call $foo - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return_call $foo + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return_call $bar - ;; CHECK-NEXT: (local.get $2) - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return_call $bar + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/optimize-instructions-exceptions.wast b/test/lit/passes/optimize-instructions-exceptions.wast index 9d22224fbb8..dcb6491290f 100644 --- a/test/lit/passes/optimize-instructions-exceptions.wast +++ b/test/lit/passes/optimize-instructions-exceptions.wast @@ -13,7 +13,9 @@ ;; CHECK-NEXT: (i32.const 456) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $test @@ -34,7 +36,9 @@ ) ) ) - (nop) + (then + (nop) + ) ) ) ) diff --git a/test/lit/passes/optimize-instructions-gc-tnh.wast b/test/lit/passes/optimize-instructions-gc-tnh.wast index 98372bed247..3cf7a72d2f9 100644 --- a/test/lit/passes/optimize-instructions-gc-tnh.wast +++ b/test/lit/passes/optimize-instructions-gc-tnh.wast @@ -243,16 +243,24 @@ ;; NO_TNH-NEXT: (struct.set $struct 0 ;; NO_TNH-NEXT: (if (result (ref null $struct)) ;; NO_TNH-NEXT: (local.get $x) - ;; NO_TNH-NEXT: (local.get $ref) - ;; NO_TNH-NEXT: (ref.null none) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (local.get $ref) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (ref.null none) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (i32.const 1) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (struct.set $struct 0 ;; NO_TNH-NEXT: (if (result (ref null $struct)) ;; NO_TNH-NEXT: (local.get $x) - ;; NO_TNH-NEXT: (ref.null none) - ;; NO_TNH-NEXT: (local.get $ref) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (ref.null none) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (local.get $ref) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (i32.const 2) ;; NO_TNH-NEXT: ) @@ -263,16 +271,24 @@ (struct.set $struct 0 (if (result (ref null $struct)) (local.get $x) - (local.get $ref) - (ref.null none) + (then + (local.get $ref) + ) + (else + (ref.null none) + ) ) (i32.const 1) ) (struct.set $struct 0 (if (result (ref null $struct)) (local.get $x) - (ref.null none) - (local.get $ref) + (then + (ref.null none) + ) + (else + (local.get $ref) + ) ) (i32.const 2) ) @@ -655,8 +671,12 @@ ;; NO_TNH-NEXT: (drop ;; NO_TNH-NEXT: (if (result (ref none)) ;; NO_TNH-NEXT: (i32.const 1) - ;; NO_TNH-NEXT: (unreachable) - ;; NO_TNH-NEXT: (local.get $x) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (local.get $x) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (unreachable) @@ -668,8 +688,12 @@ (ref.cast (ref $struct) (if (result (ref none)) (i32.const 1) - (unreachable) - (local.get $x) + (then + (unreachable) + ) + (else + (local.get $x) + ) ) ) ) @@ -689,8 +713,12 @@ ;; NO_TNH-NEXT: (drop ;; NO_TNH-NEXT: (if (result (ref none)) ;; NO_TNH-NEXT: (i32.const 1) - ;; NO_TNH-NEXT: (local.get $x) - ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (local.get $x) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (unreachable) @@ -700,8 +728,12 @@ (ref.cast (ref $struct) (if (result (ref none)) (i32.const 1) - (local.get $x) - (unreachable) + (then + (local.get $x) + ) + (else + (unreachable) + ) ) ) ) @@ -936,8 +968,12 @@ ;; TNH-NEXT: (drop ;; TNH-NEXT: (if (result (ref nofunc)) ;; TNH-NEXT: (i32.const 1) - ;; TNH-NEXT: (return) - ;; TNH-NEXT: (unreachable) + ;; TNH-NEXT: (then + ;; TNH-NEXT: (return) + ;; TNH-NEXT: ) + ;; TNH-NEXT: (else + ;; TNH-NEXT: (unreachable) + ;; TNH-NEXT: ) ;; TNH-NEXT: ) ;; TNH-NEXT: ) ;; TNH-NEXT: (unreachable) @@ -950,8 +986,12 @@ ;; NO_TNH-NEXT: (drop ;; NO_TNH-NEXT: (if (result (ref nofunc)) ;; NO_TNH-NEXT: (i32.const 1) - ;; NO_TNH-NEXT: (return) - ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (return) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (unreachable) @@ -968,10 +1008,14 @@ (ref.cast (ref func) (if (result (ref nofunc)) (i32.const 1) - (block (result (ref nofunc)) - (return) + (then + (block (result (ref nofunc)) + (return) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) ) diff --git a/test/lit/passes/optimize-instructions-gc.wast b/test/lit/passes/optimize-instructions-gc.wast index cb732d68b31..c7c7f601fbf 100644 --- a/test/lit/passes/optimize-instructions-gc.wast +++ b/test/lit/passes/optimize-instructions-gc.wast @@ -52,23 +52,35 @@ (func $if-arms-subtype-fold (result anyref) (if (result anyref) (i32.const 0) - (ref.null eq) - (ref.null eq) + (then + (ref.null eq) + ) + (else + (ref.null eq) + ) ) ) ;; 2. if its `ifTrue` and `ifFalse` arms are not identical (cannot fold) ;; CHECK: (func $if-arms-subtype-nofold (type $27) (param $i31ref i31ref) (result anyref) ;; CHECK-NEXT: (if (result anyref) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (ref.null none) - ;; CHECK-NEXT: (local.get $i31ref) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $i31ref) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-arms-subtype-nofold (param $i31ref i31ref) (result anyref) (if (result anyref) (i32.const 0) - (ref.null none) - (local.get $i31ref) + (then + (ref.null none) + ) + (else + (local.get $i31ref) + ) ) ) @@ -669,8 +681,12 @@ ;; CHECK-NEXT: (ref.is_null ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: (local.get $z) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $z) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -679,8 +695,12 @@ (drop (if (result i32) (local.get $x) - (ref.is_null (local.get $y)) - (ref.is_null (local.get $z)) + (then + (ref.is_null (local.get $y)) + ) + (else + (ref.is_null (local.get $z)) + ) ) ) ) @@ -741,8 +761,12 @@ ;; CHECK-NEXT: (struct.get_u $struct $i8 ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -753,11 +777,15 @@ (local.get $z) ;; the arms are equal and have side effects, but that is ok with an if ;; which only executes one side anyhow - (struct.get_u $struct 0 - (local.get $x) + (then + (struct.get_u $struct 0 + (local.get $x) + ) ) - (struct.get_u $struct 0 - (local.get $y) + (else + (struct.get_u $struct 0 + (local.get $y) + ) ) ) ) @@ -1058,11 +1086,15 @@ ;; CHECK: (func $hoist-LUB-danger (type $33) (param $x i32) (param $b (ref $B)) (param $c (ref $C)) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (struct.get $B 1 - ;; CHECK-NEXT: (local.get $b) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (struct.get $B 1 + ;; CHECK-NEXT: (local.get $b) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (struct.get $C 1 - ;; CHECK-NEXT: (local.get $c) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (struct.get $C 1 + ;; CHECK-NEXT: (local.get $c) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1077,11 +1109,15 @@ ;; nominal typing. (if (result i32) (local.get $x) - (struct.get $B 1 - (local.get $b) + (then + (struct.get $B 1 + (local.get $b) + ) ) - (struct.get $C 1 - (local.get $c) + (else + (struct.get $C 1 + (local.get $c) + ) ) ) ) @@ -3097,8 +3133,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (br $block) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $block) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 42) @@ -3117,8 +3157,12 @@ ) (if (result i32) (i32.const 1) - (br $block) - (i32.const 10) + (then + (br $block) + ) + (else + (i32.const 10) + ) ) ;; There are no tricky effects after this, so this cast can be removed. (ref.as_non_null diff --git a/test/lit/passes/optimize-instructions-ignore-traps.wast b/test/lit/passes/optimize-instructions-ignore-traps.wast index 0d31794e50e..e594b791c2a 100644 --- a/test/lit/passes/optimize-instructions-ignore-traps.wast +++ b/test/lit/passes/optimize-instructions-ignore-traps.wast @@ -51,20 +51,28 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.rem_u - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.rem_u + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.mul + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 11) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 @@ -149,8 +157,12 @@ ) ) ) - (local.get $7) - (local.get $6) + (then + (local.get $7) + ) + (else + (local.get $6) + ) ) ) (br_if $while-in6 @@ -232,8 +244,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $7) - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 @@ -318,8 +334,12 @@ ) ) ) - (local.get $7) - (local.get $6) + (then + (local.get $7) + ) + (else + (local.get $6) + ) ) ) (br_if $while-in6 @@ -384,22 +404,30 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.rem_s - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (i32.mul - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.rem_s + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (i32.mul ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 17) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 17) + ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 5) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $6) - ;; CHECK-NEXT: (local.get $7) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $while-in6 @@ -484,8 +512,12 @@ ) ) ) - (local.get $7) - (local.get $6) + (then + (local.get $7) + ) + (else + (local.get $6) + ) ) ) (br_if $while-in6 @@ -540,8 +572,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return @@ -576,7 +610,9 @@ ) ) ) - (return (local.get $0)) + (then + (return (local.get $0)) + ) ) (return (local.get $1)) ) @@ -587,23 +623,29 @@ ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.lt_u - ;; CHECK-NEXT: (i32.and - ;; CHECK-NEXT: (i32.extend8_s - ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.lt_u + ;; CHECK-NEXT: (i32.and + ;; CHECK-NEXT: (i32.extend8_s + ;; CHECK-NEXT: (i32.sub + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 255) + ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (return @@ -638,7 +680,9 @@ ) ) ) - (return (local.get $0)) + (then + (return (local.get $0)) + ) ) (return (local.get $1)) ) diff --git a/test/lit/passes/optimize-instructions-multivalue.wast b/test/lit/passes/optimize-instructions-multivalue.wast index 10b64e35476..e2a35336589 100644 --- a/test/lit/passes/optimize-instructions-multivalue.wast +++ b/test/lit/passes/optimize-instructions-multivalue.wast @@ -8,8 +8,12 @@ ;; CHECK-NEXT: (tuple.extract 2 0 ;; CHECK-NEXT: (if (type $2) (result i32 i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $tuple) - ;; CHECK-NEXT: (local.get $tuple2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $tuple) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $tuple2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -19,11 +23,15 @@ (if (result i32) (local.get $x) ;; The tuple.extract can be hoisted out. - (tuple.extract 2 0 - (local.get $tuple) + (then + (tuple.extract 2 0 + (local.get $tuple) + ) ) - (tuple.extract 2 0 - (local.get $tuple2) + (else + (tuple.extract 2 0 + (local.get $tuple2) + ) ) ) ) diff --git a/test/lit/passes/optimize-instructions-mvp.wast b/test/lit/passes/optimize-instructions-mvp.wast index 550db4094ed..9ac34145cee 100644 --- a/test/lit/passes/optimize-instructions-mvp.wast +++ b/test/lit/passes/optimize-instructions-mvp.wast @@ -92,8 +92,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $i1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -102,8 +104,10 @@ (i32.eqz (local.get $i1) ) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) ) ) @@ -111,8 +115,12 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $i1) - ;; CHECK-NEXT: (i32.const 12) - ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -121,11 +129,15 @@ (i32.eqz (local.get $i1) ) - (drop - (i32.const 11) + (then + (drop + (i32.const 11) + ) ) - (drop - (i32.const 12) + (else + (drop + (i32.const 12) + ) ) ) ) @@ -135,8 +147,12 @@ ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (local.get $i2) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 11) - ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -145,11 +161,15 @@ (i64.eqz (local.get $i2) ) - (drop - (i32.const 11) + (then + (drop + (i32.const 11) + ) ) - (drop - (i32.const 12) + (else + (drop + (i32.const 12) + ) ) ) ) @@ -510,7 +530,9 @@ ;; CHECK: (func $if-eqz-eqz ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 123) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-eqz-eqz @@ -520,7 +542,9 @@ (i32.const 123) ) ) - (nop) + (then + (nop) + ) ) ) ;; CHECK: (func $select-eqz (param $i1 i32) (result i32) @@ -2118,18 +2142,24 @@ ;; CHECK: (func $ne0 (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ne0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $ne0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.or ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.and @@ -2142,16 +2172,22 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) (func $ne0 (result i32) (if (i32.ne (call $ne0) (i32.const 0)) - (nop) + (then + (nop) + ) ) (if (i32.ne (i32.const 0) (call $ne0)) - (nop) + (then + (nop) + ) ) ;; through an or (if @@ -2159,7 +2195,9 @@ (i32.ne (i32.const 0) (call $ne0)) (i32.ne (i32.const 0) (call $ne0)) ) - (nop) + (then + (nop) + ) ) ;; but not an and (if @@ -2167,7 +2205,9 @@ (i32.ne (i32.const 0) (call $ne0)) (i32.ne (i32.const 0) (call $ne0)) ) - (nop) + (then + (nop) + ) ) (i32.const 1) ) @@ -2175,34 +2215,50 @@ ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $ne0) - ;; CHECK-NEXT: (call $ne1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $ne0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $ne1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (call $ne0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $recurse-bool (if (if (result i32) (i32.const 1) - (i32.ne (call $ne0) (i32.const 0)) - (i32.ne (call $ne1) (i32.const 0)) + (then + (i32.ne (call $ne0) (i32.const 0)) + ) + (else + (i32.ne (call $ne1) (i32.const 0)) + ) + ) + (then + (nop) ) - (nop) ) (if (block (result i32) (nop) (i32.ne (call $ne0) (i32.const 0)) ) - (nop) + (then + (nop) + ) ) ) ;; CHECK: (func $ne1 (result i32) @@ -2671,8 +2727,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 111) - ;; CHECK-NEXT: (i32.const 222) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 111) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 222) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-sext-unreachable (param $0 i32) (result i32) @@ -2684,8 +2744,12 @@ ) (i32.const 16) ) - (i32.const 111) - (i32.const 222) + (then + (i32.const 111) + ) + (else + (i32.const 222) + ) ) ) ;; CHECK: (func $sext-24-100 (result i32) @@ -4074,8 +4138,12 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: (i32.const 255) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -4089,8 +4157,12 @@ ) (i32.const 24) ) - (i32.const 100) - (i32.const 200) + (then + (i32.const 100) + ) + (else + (i32.const 200) + ) ) ) ) @@ -5703,13 +5775,17 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -5718,36 +5794,56 @@ (drop (if (result i32) (local.get $0) - (i32.add (local.get $1) (i32.const 1)) - (i32.add (local.get $1) (i32.const 1)) + (then + (i32.add (local.get $1) (i32.const 1)) + ) + (else + (i32.add (local.get $1) (i32.const 1)) + ) ) ) (drop (if (result i32) (local.tee $0 (local.get $1)) ;; side effects! - (i32.add (local.get $1) (i32.const 1)) - (i32.add (local.get $1) (i32.const 1)) + (then + (i32.add (local.get $1) (i32.const 1)) + ) + (else + (i32.add (local.get $1) (i32.const 1)) + ) ) ) (drop (if (result i32) (local.get $0) - (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if - (i32.add (local.get $1) (unreachable)) + (then + (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if + ) + (else + (i32.add (local.get $1) (unreachable)) + ) ) ) (drop (if (result i32) (local.tee $0 (local.get $1)) ;; side effects! - (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if - (i32.add (local.get $1) (unreachable)) + (then + (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if + ) + (else + (i32.add (local.get $1) (unreachable)) + ) ) ) (drop (if (result i32) (unreachable) ;; !!! - (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if - (i32.add (local.get $1) (unreachable)) + (then + (i32.add (local.get $1) (unreachable)) ;; folding them would change the type of the if + ) + (else + (i32.add (local.get $1) (unreachable)) + ) ) ) ) @@ -6830,8 +6926,12 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 40) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $return-proper-value-from-shift-left-by-zero (result i32) @@ -6855,8 +6955,12 @@ ) (i32.const -2) ) - (i32.const 1) - (i32.const 0) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) ) ) ;; CHECK: (func $de-morgan-2 (param $x i32) (param $y i32) @@ -9950,8 +10054,12 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -9960,8 +10068,12 @@ ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: (i32.const 2147483647) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -10146,8 +10258,12 @@ (local.get $x) (i32.const 4) ) - (i32.const 1) - (i32.const 0) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) )) ;; (signed)x % min_s ? 1 : 0 (drop (if (result i32) @@ -10155,8 +10271,12 @@ (local.get $x) (i32.const 0x80000000) ) - (i32.const 1) - (i32.const 0) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) )) ) ;; CHECK: (func $fold-eqz-eqz (param $x i32) (param $y i64) @@ -10244,8 +10364,12 @@ ;; CHECK-NEXT: (local.set $x4 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -10257,8 +10381,12 @@ ;; CHECK-NEXT: (local.set $x5 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -10267,8 +10395,12 @@ ;; CHECK-NEXT: (local.set $x6 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -10308,13 +10440,13 @@ (local.set $x3 (loop (result i32) (i32.const 1))) (drop (i32.and (local.get $x3) (i32.const 7))) ;; if - two sides, can't - (local.set $x4 (if (result i32) (i32.const 1) (i32.const 2) (i32.const 3))) + (local.set $x4 (if (result i32) (i32.const 1) (then (i32.const 2) )(else (i32.const 3)))) (drop (i32.and (local.get $x4) (i32.const 7))) ;; if - one side, can - (local.set $x5 (if (result i32) (i32.const 1) (unreachable) (i32.const 3))) + (local.set $x5 (if (result i32) (i32.const 1) (then (unreachable) )(else (i32.const 3)))) (drop (i32.and (local.get $x5) (i32.const 7))) ;; if - one side, can - (local.set $x6 (if (result i32) (i32.const 1) (i32.const 3) (unreachable))) + (local.set $x6 (if (result i32) (i32.const 1) (then (i32.const 3) )(else (unreachable)))) (drop (i32.and (local.get $x6) (i32.const 7))) ;; br_if with value (drop @@ -12136,7 +12268,9 @@ ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $select-into-arms (param $x i32) (param $y i32) @@ -12146,7 +12280,9 @@ (i32.eqz (i32.eqz (local.get $y))) (local.get $y) ) - (unreachable) + (then + (unreachable) + ) ) ) ;; CHECK: (func $select-with-same-arm-and-cond-32 (param $x i32) @@ -12443,7 +12579,9 @@ ;; CHECK: (func $optimize-boolean-context (param $x i32) (param $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (select @@ -12460,7 +12598,9 @@ (i32.const 0) (local.get $x) ) - (unreachable) + (then + (unreachable) + ) ) (drop (select (local.get $x) @@ -14646,8 +14786,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14693,10 +14837,14 @@ (drop (if (result i32) (local.get $x) - (i32.eqz - (local.get $y) + (then + (i32.eqz + (local.get $y) + ) + ) + (else + (i32.const 1) ) - (i32.const 1) ) ) ) @@ -14705,8 +14853,12 @@ ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (if (result i64) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (i64.const 1) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i64.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14715,9 +14867,13 @@ (drop (if (result i32) (local.get $x) - (i32.const 0) - (i64.eqz - (local.get $y) + (then + (i32.const 0) + ) + (else + (i64.eqz + (local.get $y) + ) ) ) ) @@ -14727,8 +14883,12 @@ ;; CHECK-NEXT: (i64.eqz ;; CHECK-NEXT: (if (result i64) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) - ;; CHECK-NEXT: (i64.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i64.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14737,10 +14897,14 @@ (drop (if (result i32) (local.get $x) - (i64.eqz - (local.get $y) + (then + (i64.eqz + (local.get $y) + ) + ) + (else + (i32.const 1) ) - (i32.const 1) ) ) ) @@ -14769,10 +14933,14 @@ ;; CHECK: (func $ternary-no-unreachable-1 (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-no-unreachable-1 (param $x i32) (result i32) @@ -14781,18 +14949,26 @@ ;; one arm is an eqz, the other is 0 or 1, so we can put an eqz on the ;; outside in theory, but we'd need to be careful with the unreachable ;; type here. ignore this case, as DCE is the proper optimization anyhow. - (i32.eqz - (unreachable) + (then + (i32.eqz + (unreachable) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) ;; CHECK: (func $ternary-no-unreachable-2 (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14800,9 +14976,13 @@ (if (result i32) (local.get $x) ;; as before, but flipped - (i32.const 0) - (i32.eqz - (unreachable) + (then + (i32.const 0) + ) + (else + (i32.eqz + (unreachable) + ) ) ) ) @@ -14831,8 +15011,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14841,8 +15025,12 @@ (drop (if (result i32) (local.get $z) - (i32.eqz (local.get $x)) - (i32.eqz (local.get $y)) + (then + (i32.eqz (local.get $x)) + ) + (else + (i32.eqz (local.get $y)) + ) ) ) ) @@ -14852,8 +15040,12 @@ ;; CHECK-NEXT: (f64.floor ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14865,8 +15057,12 @@ ;; f64 (if (result f32) (local.get $z) - (f32.demote_f64 (f64.floor (local.get $x))) - (f32.demote_f64 (f64.floor (local.get $y))) + (then + (f32.demote_f64 (f64.floor (local.get $x))) + ) + (else + (f32.demote_f64 (f64.floor (local.get $y))) + ) ) ) ) @@ -14921,8 +15117,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14930,18 +15130,26 @@ (func $ternary-identical-arms-and-type-is-none (param $x i32) (param $y i32) (param $z i32) (if (local.get $z) - (drop (i32.eqz (local.get $x))) - (drop (i32.eqz (local.get $y))) + (then + (drop (i32.eqz (local.get $x))) + ) + (else + (drop (i32.eqz (local.get $y))) + ) ) ) ;; CHECK: (func $ternary-identical-arms-and-type-is-none-child-types-mismatch (param $x i32) (param $y i32) (param $z i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (f64.const 2.34) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.const 2.34) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -14950,8 +15158,12 @@ (local.get $z) ;; the drop cannot be hoisted out, since the children's type mismatch ;; would not allow us to give a proper type to the if. - (drop (i32.const 1)) - (drop (f64.const 2.34)) + (then + (drop (i32.const 1)) + ) + (else + (drop (f64.const 2.34)) + ) ) ) ;; CHECK: (func $ternary-identical-arms-but-block (param $x i32) (param $y i32) (param $z i32) @@ -15021,8 +15233,12 @@ ;; CHECK-NEXT: (br_if $block ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15032,11 +15248,15 @@ (if (local.get $z) ;; two br_ifs with the same target are shallowly identical - (br_if $block - (local.get $x) + (then + (br_if $block + (local.get $x) + ) ) - (br_if $block - (local.get $y) + (else + (br_if $block + (local.get $y) + ) ) ) ) @@ -15046,11 +15266,15 @@ ;; CHECK-NEXT: (block $block2 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (br_if $block1 - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br_if $block1 + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br_if $block2 - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br_if $block2 + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15062,11 +15286,15 @@ (if (local.get $z) ;; two br_ifs with different targets are not shallowly identical - (br_if $block1 - (local.get $x) + (then + (br_if $block1 + (local.get $x) + ) ) - (br_if $block2 - (local.get $y) + (else + (br_if $block2 + (local.get $y) + ) ) ) ) @@ -15077,8 +15305,12 @@ ;; CHECK-NEXT: (return ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15087,11 +15319,15 @@ (block $block (if (local.get $z) - (return - (local.get $x) + (then + (return + (local.get $x) + ) ) - (return - (local.get $y) + (else + (return + (local.get $y) + ) ) ) ) @@ -15131,30 +15367,42 @@ ;; CHECK-NEXT: (call $send-i32 ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $z) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $ternary-identical-arms-call (param $x i32) (param $y i32) (param $z i32) (if (local.get $z) - (call $send-i32 - (local.get $x) + (then + (call $send-i32 + (local.get $x) + ) ) - (call $send-i32 - (local.get $y) + (else + (call $send-i32 + (local.get $y) + ) ) ) ) ;; CHECK: (func $if-dont-change-to-unreachable (param $x i32) (param $y i32) (param $z i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (local.get $z) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (local.get $z) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -15162,11 +15410,15 @@ ;; if we move the returns outside, we'd become unreachable; avoid that. (if (result i32) (local.get $x) - (return - (local.get $y) + (then + (return + (local.get $y) + ) ) - (return - (local.get $z) + (else + (return + (local.get $z) + ) ) ) ) diff --git a/test/lit/passes/optimize-stack-ir.wast b/test/lit/passes/optimize-stack-ir.wast index adb78787941..bb1e0f9f031 100644 --- a/test/lit/passes/optimize-stack-ir.wast +++ b/test/lit/passes/optimize-stack-ir.wast @@ -159,8 +159,10 @@ ) (i32.const 0) ) - (br $topmost - (f64.const -3.4) + (then + (br $topmost + (f64.const -3.4) + ) ) ) (if @@ -170,8 +172,10 @@ ) (f64.const 0) ) - (br $topmost - (f64.const 5.6) + (then + (br $topmost + (f64.const 5.6) + ) ) ) (f64.const 1.2) @@ -224,8 +228,10 @@ (local.get $x) (f64.const 0) ) - (br $topmost - (f64.const 1.2) + (then + (br $topmost + (f64.const 1.2) + ) ) ) (if @@ -233,8 +239,10 @@ (local.get $Int) (f64.const 0) ) - (br $topmost - (f64.const -3.4) + (then + (br $topmost + (f64.const -3.4) + ) ) ) (if @@ -242,8 +250,10 @@ (local.get $Double) (i32.const 0) ) - (br $topmost - (f64.const 5.6) + (then + (br $topmost + (f64.const 5.6) + ) ) ) (if @@ -251,8 +261,10 @@ (local.get $x) (local.get $y) ) - (br $topmost - (local.get $x) + (then + (br $topmost + (local.get $x) + ) ) ) (local.get $y) @@ -899,8 +911,12 @@ (f64.abs (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) - (return (i32.const 2)) - (return (i32.const 1)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 1)) + ) ) ) ) @@ -919,8 +935,12 @@ (func $unreachable-if-toplevel (result i32) (if ;; note no type - valid in binaryen IR, in wasm must be i32 (i32.const 3) - (return (i32.const 2)) - (return (i32.const 1)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 1)) + ) ) ) @@ -986,16 +1006,16 @@ ;; CHECK-NEXT: unreachable ;; CHECK-NEXT: ) (func $unreachable-ifs - (if (unreachable) (nop)) - (if (unreachable) (unreachable)) - (if (unreachable) (nop) (nop)) - (if (unreachable) (unreachable) (nop)) - (if (unreachable) (nop) (unreachable)) - (if (unreachable) (unreachable) (unreachable)) + (if (unreachable) (then (nop))) + (if (unreachable) (then (unreachable))) + (if (unreachable) (then (nop) )(else (nop))) + (if (unreachable) (then (unreachable) )(else (nop))) + (if (unreachable) (then (nop) )(else (unreachable))) + (if (unreachable) (then (unreachable) )(else (unreachable))) ;; - (if (i32.const 1) (unreachable) (nop)) - (if (i32.const 1) (nop) (unreachable)) - (if (i32.const 1) (unreachable) (unreachable)) + (if (i32.const 1) (then (unreachable) )(else (nop))) + (if (i32.const 1) (then (nop) )(else (unreachable))) + (if (i32.const 1) (then (unreachable) )(else (unreachable))) ) ;; CHECK: (func $unreachable-if-arm (type $FUNCSIG$v) @@ -1008,13 +1028,17 @@ (func $unreachable-if-arm (if (i32.const 1) - (block - (nop) + (then + (block + (nop) + ) ) - (block - (unreachable) - (drop - (i32.const 1) + (else + (block + (unreachable) + (drop + (i32.const 1) + ) ) ) ) @@ -1137,8 +1161,12 @@ (func $local-to-stack-3-no (param $x i32) (result i32) (local $temp i32) (if (i32.const 1) - (local.set $temp (call $local-to-stack (i32.const 1))) - (local.set $temp (call $local-to-stack (i32.const 2))) ;; two sets for that get + (then + (local.set $temp (call $local-to-stack (i32.const 1))) + ) + (else + (local.set $temp (call $local-to-stack (i32.const 2))) ;; two sets for that get + ) ) (drop (call $local-to-stack (i32.const 3))) (local.get $temp) @@ -1338,7 +1366,7 @@ (local $temp2 i32) (local.set $temp2 (call $local-to-stack-multi-4 (i32.const 0))) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) - (if (i32.const 0) (nop)) + (if (i32.const 0) (then (nop))) (drop (local.get $temp1)) (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 2))) (block $block (br $block)) @@ -1362,13 +1390,17 @@ (func $local-to-stack-in-control-flow (local $temp1 i32) (if (i32.const 0) - (block - (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 0))) - (drop (local.get $temp1)) + (then + (block + (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 0))) + (drop (local.get $temp1)) + ) ) - (block - (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) - (drop (local.get $temp1)) + (else + (block + (local.set $temp1 (call $local-to-stack-multi-4 (i32.const 1))) + (drop (local.get $temp1)) + ) ) ) ) diff --git a/test/lit/passes/outlining.wast b/test/lit/passes/outlining.wast index 349513dde3f..ee6dd5d90bf 100644 --- a/test/lit/passes/outlining.wast +++ b/test/lit/passes/outlining.wast @@ -255,8 +255,10 @@ ;; CHECK: (func $a (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $outline$) - ;; CHECK-NEXT: (global.set $global$1 - ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global$1 + ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -265,16 +267,20 @@ (i32.eqz (global.get $global$1) ) - (global.set $global$1 - (i32.const 15) + (then + (global.set $global$1 + (i32.const 15) + ) ) ) ) ;; CHECK: (func $b (type $0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $outline$) - ;; CHECK-NEXT: (global.set $global$1 - ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global$1 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -283,8 +289,10 @@ (i32.eqz (global.get $global$1) ) - (global.set $global$1 - (i32.const 20) + (then + (global.set $global$1 + (i32.const 20) + ) ) ) ) @@ -307,7 +315,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $outline$) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $outline$) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a (param i32) @@ -315,8 +325,10 @@ (i32.eqz (local.get 0) ) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) ) ) @@ -325,7 +337,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $outline$) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $outline$) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b (param i32) @@ -333,8 +347,10 @@ (i32.eqz (local.get 0) ) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) ) ) @@ -357,10 +373,14 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $global$1 - ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global$1 + ;; CHECK-NEXT: (i32.const 15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $outline$) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $outline$) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $a @@ -368,12 +388,16 @@ (i32.eqz (global.get $global$1) ) - (global.set $global$1 - (i32.const 15) - ) - (block + (then (global.set $global$1 - (i32.const 100) + (i32.const 15) + ) + ) + (else + (block + (global.set $global$1 + (i32.const 100) + ) ) ) ) @@ -383,10 +407,14 @@ ;; CHECK-NEXT: (i32.ctz ;; CHECK-NEXT: (global.get $global$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $global$1 - ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global$1 + ;; CHECK-NEXT: (i32.const 30) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $outline$) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $outline$) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $b @@ -394,12 +422,16 @@ (i32.ctz (global.get $global$1) ) - (global.set $global$1 - (i32.const 30) - ) - (block + (then (global.set $global$1 - (i32.const 100) + (i32.const 30) + ) + ) + (else + (block + (global.set $global$1 + (i32.const 100) + ) ) ) ) @@ -421,8 +453,12 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $global$1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $outline$_3) - ;; CHECK-NEXT: (call $outline$_4) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $outline$_3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $outline$_4) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -446,11 +482,15 @@ (i32.eqz (global.get $global$1) ) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) - (global.set $global$1 - (i32.const 20) + (else + (global.set $global$1 + (i32.const 20) + ) ) ) ) @@ -462,11 +502,15 @@ (i32.eqz (global.get $global$1) ) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) - (global.set $global$1 - (i32.const 20) + (else + (global.set $global$1 + (i32.const 20) + ) ) ) ) diff --git a/test/lit/passes/poppify.wast b/test/lit/passes/poppify.wast index 38bc920aa30..93a0353e364 100644 --- a/test/lit/passes/poppify.wast +++ b/test/lit/passes/poppify.wast @@ -184,13 +184,17 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (pop i32) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if (if (i32.const 0) - (nop) + (then + (nop) + ) ) ) @@ -198,15 +202,23 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (pop i32) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (result i32) (if i32 (i32.const 0) - (i32.const 1) - (i32.const 2) + (then + (i32.const 1) + ) + (else + (i32.const 2) + ) ) ) diff --git a/test/lit/passes/precompute-gc-immutable.wast b/test/lit/passes/precompute-gc-immutable.wast index 0ae99b26a1e..c2a96bd2371 100644 --- a/test/lit/passes/precompute-gc-immutable.wast +++ b/test/lit/passes/precompute-gc-immutable.wast @@ -160,14 +160,18 @@ ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $ref-imm - ;; CHECK-NEXT: (struct.new $struct-imm - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $ref-imm + ;; CHECK-NEXT: (struct.new $struct-imm + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $ref-imm - ;; CHECK-NEXT: (struct.new $struct-imm - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $ref-imm + ;; CHECK-NEXT: (struct.new $struct-imm + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -183,14 +187,18 @@ ;; different values. (if (local.get $x) - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 1) + (then + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 1) + ) ) ) - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 2) + (else + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 2) + ) ) ) ) @@ -205,14 +213,18 @@ ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.set $ref-imm - ;; CHECK-NEXT: (struct.new $struct-imm - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $ref-imm + ;; CHECK-NEXT: (struct.new $struct-imm + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $ref-imm - ;; CHECK-NEXT: (struct.new $struct-imm - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $ref-imm + ;; CHECK-NEXT: (struct.new $struct-imm + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -230,14 +242,18 @@ ;; possible values). (if (local.get $x) - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 1) + (then + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 1) + ) ) ) - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 1) + (else + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 1) + ) ) ) ) @@ -252,7 +268,7 @@ ;; CHECK-NEXT: (local $ref-imm (ref null $struct-imm)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 1) @@ -262,7 +278,7 @@ ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (local.set $ref-imm ;; CHECK-NEXT: (struct.new $struct-imm ;; CHECK-NEXT: (i32.const 2) @@ -280,27 +296,31 @@ ;; reused. (if (local.get $x) - (block - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 1) + (then + (block + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 1) + ) ) - ) - (call $helper - (struct.get $struct-imm 0 - (local.get $ref-imm) + (call $helper + (struct.get $struct-imm 0 + (local.get $ref-imm) + ) ) ) ) - (block - (local.set $ref-imm - (struct.new $struct-imm - (i32.const 2) + (else + (block + (local.set $ref-imm + (struct.new $struct-imm + (i32.const 2) + ) ) - ) - (call $helper - (struct.get $struct-imm 0 - (local.get $ref-imm) + (call $helper + (struct.get $struct-imm 0 + (local.get $ref-imm) + ) ) ) ) diff --git a/test/lit/passes/precompute-gc.wast b/test/lit/passes/precompute-gc.wast index 1c99d6e98db..29f64ba0771 100644 --- a/test/lit/passes/precompute-gc.wast +++ b/test/lit/passes/precompute-gc.wast @@ -125,14 +125,18 @@ ;; CHECK-NEXT: (local $x (ref null $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $i) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (struct.new $struct - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (struct.new $struct + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (struct.new $struct - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (struct.new $struct + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -147,14 +151,18 @@ ;; a merge of two different $x values cannot be precomputed (if (local.get $i) - (local.set $x - (struct.new $struct - (i32.const 1) + (then + (local.set $x + (struct.new $struct + (i32.const 1) + ) ) ) - (local.set $x - (struct.new $struct - (i32.const 2) + (else + (local.set $x + (struct.new $struct + (i32.const 2) + ) ) ) ) @@ -466,8 +474,10 @@ ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $tempref - ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $tempref + ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $tempresult @@ -494,8 +504,10 @@ (call $helper (i32.const 0) ) - (local.set $tempref - (struct.new $empty) + (then + (local.set $tempref + (struct.new $empty) + ) ) ) (local.set $tempresult @@ -669,8 +681,10 @@ ;; CHECK-NEXT: (call $helper ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.set $tempref - ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $tempref + ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $stashedref @@ -702,8 +716,10 @@ (call $helper (i32.const 0) ) - (local.set $tempref - (struct.new $empty) + (then + (local.set $tempref + (struct.new $empty) + ) ) ) (local.set $stashedref @@ -898,8 +914,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $param) - ;; CHECK-NEXT: (local.set $ref - ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $ref + ;; CHECK-NEXT: (struct.new_default $empty) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -938,8 +956,10 @@ ) (if (local.get $param) - (local.set $ref - (struct.new $empty) + (then + (local.set $ref + (struct.new $empty) + ) ) ) (drop @@ -1041,7 +1061,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -1062,7 +1084,9 @@ ;; later block. (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) (local.get $x) ) @@ -1105,7 +1129,9 @@ ;; CHECK-NEXT: (local $0 (ref any)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (local.set $0 @@ -1126,7 +1152,9 @@ ;; Otherwise this is the same as before. (if (local.get $x) - (nop) + (then + (nop) + ) ) (unreachable) (local.set $0 @@ -1149,7 +1177,9 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -1162,7 +1192,9 @@ ) (if (i32.const 1) - (unreachable) + (then + (unreachable) + ) ) (local.get $x) ) diff --git a/test/lit/passes/remove-unused-brs-gc.wast b/test/lit/passes/remove-unused-brs-gc.wast index 7a620193e01..84c16cab27a 100644 --- a/test/lit/passes/remove-unused-brs-gc.wast +++ b/test/lit/passes/remove-unused-brs-gc.wast @@ -36,8 +36,12 @@ ;; (that is not specifically intended to be tested here). (if (result (ref struct)) (i32.const 0) - (local.get $0) - (local.get $0) + (then + (local.get $0) + ) + (else + (local.get $0) + ) ) ) ) @@ -639,36 +643,48 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (ref.test (ref none) - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (ref.test (ref none) + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result nullref) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (ref.null none) - ;; CHECK-NEXT: (ref.cast nullref + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.cast nullref + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block $something (result (ref null $struct)) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (block (result nullref) - ;; CHECK-NEXT: (br_on_non_null $something - ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $something (result (ref null $struct)) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result nullref) + ;; CHECK-NEXT: (br_on_non_null $something + ;; CHECK-NEXT: (local.get $struct) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.null none) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -699,19 +715,27 @@ (drop (if (result i32) (local.get $x) - (ref.test (ref $struct) - (ref.null any) + (then + (ref.test (ref $struct) + (ref.null any) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) (drop (if (result anyref) (local.get $x) - (ref.null any) - (ref.cast (ref null $struct) + (then (ref.null any) ) + (else + (ref.cast (ref null $struct) + (ref.null any) + ) + ) ) ) ;; We do not selectify here because the amount of work in the if is @@ -719,34 +743,42 @@ (drop (if (result anyref) (local.get $x) - (block (result anyref) - (block $something (result anyref) - (drop - (br_on_cast $something anyref (ref $struct) - (local.get $struct) + (then + (block (result anyref) + (block $something (result anyref) + (drop + (br_on_cast $something anyref (ref $struct) + (local.get $struct) + ) ) + (ref.null any) ) - (ref.null any) ) ) - (ref.null any) + (else + (ref.null any) + ) ) ) ;; However, null checks are fairly fast, and we will emit a select here. (drop (if (result anyref) (local.get $x) - (block (result anyref) - (block $nothing - (drop - (br_on_null $nothing - (ref.null $struct) + (then + (block (result anyref) + (block $nothing + (drop + (br_on_null $nothing + (ref.null $struct) + ) ) ) + (ref.null any) ) + ) + (else (ref.null any) ) - (ref.null any) ) ) ) diff --git a/test/lit/passes/remove-unused-brs.wast b/test/lit/passes/remove-unused-brs.wast index 6907547c3aa..6fcc5b066a3 100644 --- a/test/lit/passes/remove-unused-brs.wast +++ b/test/lit/passes/remove-unused-brs.wast @@ -17,11 +17,15 @@ (func $selectify-fresh-lub (param $x i32) (result anyref) (if (local.get $x) - (return - (ref.null none) + (then + (return + (ref.null none) + ) ) - (return - (ref.i31 (i32.const 0)) + (else + (return + (ref.i31 (i32.const 0)) + ) ) ) ) @@ -54,13 +58,17 @@ ) (i32.const 10) ) - (i32.const 1) - (i32.lt_u - (i32.sub - (local.get $0) - (i32.const 97) + (then + (i32.const 1) + ) + (else + (i32.lt_u + (i32.sub + (local.get $0) + (i32.const 97) + ) + (i32.const 6) ) - (i32.const 6) ) ) ) @@ -68,13 +76,17 @@ ;; CHECK: (func $restructure-br_if (type $0) (param $x i32) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: (block $x (result i32) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $x (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -104,13 +116,17 @@ ;; CHECK-NEXT: (call $nothing) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 100) - ;; CHECK-NEXT: (block $x (result i32) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $x (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 300) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -382,7 +398,9 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $if-of-if) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if-of-if) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if @@ -393,9 +411,13 @@ (local.tee $x (i32.const 1) ) - (if - (local.get $x) - (call $if-of-if) + (then + (if + (local.get $x) + (then + (call $if-of-if) + ) + ) ) ) ) @@ -406,11 +428,15 @@ ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.tee $x - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.tee $x + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if-of-if-but-side-effects) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $if-of-if-but-side-effects) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -422,11 +448,15 @@ (local.tee $x (i32.const 1) ) - (if - (local.tee $x - (i32.const 2) + (then + (if + (local.tee $x + (i32.const 2) + ) + (then + (call $if-of-if-but-side-effects) + ) ) - (call $if-of-if-but-side-effects) ) ) ) @@ -437,8 +467,8 @@ ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz @@ -447,7 +477,9 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -456,8 +488,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if-of-if-but-too-costly) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $if-of-if-but-too-costly) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -469,11 +503,15 @@ (local.tee $x (i32.const 1) ) - (if - (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz - (local.get $x) - ))))))))) - (call $if-of-if-but-too-costly) + (then + (if + (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz (i32.eqz + (local.get $x) + ))))))))) + (then + (call $if-of-if-but-too-costly) + ) + ) ) ) ) @@ -484,10 +522,16 @@ ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $if-of-if-but-inner-else) - ;; CHECK-NEXT: (call $if-of-if) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if-of-if-but-inner-else) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $if-of-if) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -498,10 +542,16 @@ (local.tee $x (i32.const 1) ) - (if - (local.get $x) - (call $if-of-if-but-inner-else) - (call $if-of-if) + (then + (if + (local.get $x) + (then + (call $if-of-if-but-inner-else) + ) + (else + (call $if-of-if) + ) + ) ) ) ) @@ -512,11 +562,17 @@ ;; CHECK-NEXT: (local.tee $x ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (call $if-of-if-but-outer-else) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if-of-if-but-outer-else) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $if-of-if) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $if-of-if) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-of-if-but-outer-else @@ -526,11 +582,17 @@ (local.tee $x (i32.const 1) ) - (if - (local.get $x) - (call $if-of-if-but-outer-else) + (then + (if + (local.get $x) + (then + (call $if-of-if-but-outer-else) + ) + ) + ) + (else + (call $if-of-if) ) - (call $if-of-if) ) ) ) diff --git a/test/lit/passes/remove-unused-brs_all-features.wast b/test/lit/passes/remove-unused-brs_all-features.wast index 344fbe12f3e..98f0202745c 100644 --- a/test/lit/passes/remove-unused-brs_all-features.wast +++ b/test/lit/passes/remove-unused-brs_all-features.wast @@ -33,25 +33,33 @@ ;; CHECK: (func $foo (type $3) (result (ref null $struct)) ;; CHECK-NEXT: (if (result (ref null $struct)) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (struct.new $struct - ;; CHECK-NEXT: (array.new_default $vector - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (struct.new $struct + ;; CHECK-NEXT: (array.new_default $vector + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $foo (result (ref null $struct)) (if (result (ref null $struct)) (i32.const 1) - (struct.new $struct - ;; regression test for computing the cost of an array.new_default, which - ;; lacks the optional field "init" - (array.new_default $vector - (i32.const 1) + (then + (struct.new $struct + ;; regression test for computing the cost of an array.new_default, which + ;; lacks the optional field "init" + (array.new_default $vector + (i32.const 1) + ) ) ) - (ref.null $struct) + (else + (ref.null $struct) + ) ) ) @@ -59,15 +67,19 @@ ;; CHECK-NEXT: (loop $loop (result f64) ;; CHECK-NEXT: (if (result f64) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (f64.const 0) - ;; CHECK-NEXT: (block $block (result f64) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (br_if $loop - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $block (result f64) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (br_if $loop + ;; CHECK-NEXT: (i32.eqz + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -83,7 +95,9 @@ ) (if (i32.const 0) - (unreachable) + (then + (unreachable) + ) ) ;; this will be moved from $block into the if right before it. we must be ;; careful to properly finalize() things, as if we finalize the block too @@ -117,8 +131,12 @@ ;; LUB (if (result funcref) (local.get $x) - (ref.func $none_=>_i32) - (ref.func $i32_=>_none) + (then + (ref.func $none_=>_i32) + ) + (else + (ref.func $i32_=>_none) + ) ) ) diff --git a/test/lit/passes/remove-unused-brs_levels.wast b/test/lit/passes/remove-unused-brs_levels.wast index f4737627e65..927cce86781 100644 --- a/test/lit/passes/remove-unused-brs_levels.wast +++ b/test/lit/passes/remove-unused-brs_levels.wast @@ -11,11 +11,15 @@ ;; SHRINK_0-NEXT: (local.get $x) ;; SHRINK_0-NEXT: (i32.const 53498923) ;; SHRINK_0-NEXT: ) - ;; SHRINK_0-NEXT: (i32.div_s + ;; SHRINK_0-NEXT: (then + ;; SHRINK_0-NEXT: (i32.div_s + ;; SHRINK_0-NEXT: (local.get $x) + ;; SHRINK_0-NEXT: (i32.const 13) + ;; SHRINK_0-NEXT: ) + ;; SHRINK_0-NEXT: ) + ;; SHRINK_0-NEXT: (else ;; SHRINK_0-NEXT: (local.get $x) - ;; SHRINK_0-NEXT: (i32.const 13) ;; SHRINK_0-NEXT: ) - ;; SHRINK_0-NEXT: (local.get $x) ;; SHRINK_0-NEXT: ) ;; SHRINK_0-NEXT: ) ;; SHRINK_1: (func $selectify-division (type $0) (param $x i32) (result i32) @@ -52,11 +56,15 @@ (local.get $x) (i32.const 53498923) ) - (i32.div_s + (then + (i32.div_s + (local.get $x) + (i32.const 13) + ) + ) + (else (local.get $x) - (i32.const 13) ) - (local.get $x) ) ) @@ -66,14 +74,18 @@ ;; SHRINK_0-NEXT: (local.get $x) ;; SHRINK_0-NEXT: (i32.const 53498923) ;; SHRINK_0-NEXT: ) - ;; SHRINK_0-NEXT: (i32.div_s + ;; SHRINK_0-NEXT: (then ;; SHRINK_0-NEXT: (i32.div_s - ;; SHRINK_0-NEXT: (local.get $x) + ;; SHRINK_0-NEXT: (i32.div_s + ;; SHRINK_0-NEXT: (local.get $x) + ;; SHRINK_0-NEXT: (i32.const 13) + ;; SHRINK_0-NEXT: ) ;; SHRINK_0-NEXT: (i32.const 13) ;; SHRINK_0-NEXT: ) - ;; SHRINK_0-NEXT: (i32.const 13) ;; SHRINK_0-NEXT: ) - ;; SHRINK_0-NEXT: (local.get $x) + ;; SHRINK_0-NEXT: (else + ;; SHRINK_0-NEXT: (local.get $x) + ;; SHRINK_0-NEXT: ) ;; SHRINK_0-NEXT: ) ;; SHRINK_0-NEXT: ) ;; SHRINK_1: (func $selectify-division2 (type $0) (param $x i32) (result i32) @@ -82,14 +94,18 @@ ;; SHRINK_1-NEXT: (local.get $x) ;; SHRINK_1-NEXT: (i32.const 53498923) ;; SHRINK_1-NEXT: ) - ;; SHRINK_1-NEXT: (i32.div_s + ;; SHRINK_1-NEXT: (then ;; SHRINK_1-NEXT: (i32.div_s - ;; SHRINK_1-NEXT: (local.get $x) + ;; SHRINK_1-NEXT: (i32.div_s + ;; SHRINK_1-NEXT: (local.get $x) + ;; SHRINK_1-NEXT: (i32.const 13) + ;; SHRINK_1-NEXT: ) ;; SHRINK_1-NEXT: (i32.const 13) ;; SHRINK_1-NEXT: ) - ;; SHRINK_1-NEXT: (i32.const 13) ;; SHRINK_1-NEXT: ) - ;; SHRINK_1-NEXT: (local.get $x) + ;; SHRINK_1-NEXT: (else + ;; SHRINK_1-NEXT: (local.get $x) + ;; SHRINK_1-NEXT: ) ;; SHRINK_1-NEXT: ) ;; SHRINK_1-NEXT: ) ;; SHRINK_2: (func $selectify-division2 (type $0) (param $x i32) (result i32) @@ -116,14 +132,18 @@ (local.get $x) (i32.const 53498923) ) - (i32.div_s + (then (i32.div_s - (local.get $x) + (i32.div_s + (local.get $x) + (i32.const 13) + ) (i32.const 13) ) - (i32.const 13) ) - (local.get $x) + (else + (local.get $x) + ) ) ) ) diff --git a/test/lit/passes/remove-unused-module-elements_all-features.wast b/test/lit/passes/remove-unused-module-elements_all-features.wast index f287df88f0a..c964d8c28a9 100644 --- a/test/lit/passes/remove-unused-module-elements_all-features.wast +++ b/test/lit/passes/remove-unused-module-elements_all-features.wast @@ -576,8 +576,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) @@ -590,8 +594,12 @@ (f64.const 1) (f64.const 1) ) - (call_indirect (type $0) (f64.const 1) (i32.const 0)) - (f64.const 0) + (then + (call_indirect (type $0) (f64.const 1) (i32.const 0)) + ) + (else + (f64.const 0) + ) ) ) ) @@ -634,8 +642,12 @@ ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: (f64.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (f64.const 1) - ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (f64.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (f64.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $0 (; 0 ;) (type $0) (param $var$0 f64) (result f64) @@ -649,8 +661,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) diff --git a/test/lit/passes/rse-gc.wast b/test/lit/passes/rse-gc.wast index 367f3ce1862..4bef953b932 100644 --- a/test/lit/passes/rse-gc.wast +++ b/test/lit/passes/rse-gc.wast @@ -64,11 +64,15 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $B) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $B) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $B) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $B) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -95,11 +99,15 @@ ) (if (local.get $x) - (drop - (local.get $A) + (then + (drop + (local.get $A) + ) ) - (drop - (local.get $B) + (else + (drop + (local.get $B) + ) ) ) (drop diff --git a/test/lit/passes/signature-refining.wast b/test/lit/passes/signature-refining.wast index 3b0cf119813..103cbe7f95f 100644 --- a/test/lit/passes/signature-refining.wast +++ b/test/lit/passes/signature-refining.wast @@ -569,17 +569,25 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref $struct)) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call $func-can-refine) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $func-can-refine) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref $struct)) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (call_ref $sig-can-refine - ;; CHECK-NEXT: (ref.func $func-can-refine) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call_ref $sig-can-refine + ;; CHECK-NEXT: (ref.func $func-can-refine) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -590,18 +598,26 @@ (drop (if (result anyref) (i32.const 1) - (call $func-can-refine) - (unreachable) + (then + (call $func-can-refine) + ) + (else + (unreachable) + ) ) ) ;; The same with a call_ref. (drop (if (result anyref) (i32.const 1) - (call_ref $sig-can-refine - (ref.func $func-can-refine) + (then + (call_ref $sig-can-refine + (ref.func $func-can-refine) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) ) @@ -641,8 +657,10 @@ ;; CHECK: (func $func-4 (type $sig) (result (ref null $struct)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (return - ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return + ;; CHECK-NEXT: (ref.null none) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) @@ -650,8 +668,10 @@ (func $func-4 (type $sig) (result anyref) (if (i32.const 1) - (return - (ref.null any) + (then + (return + (ref.null any) + ) ) ) (unreachable) diff --git a/test/lit/passes/simplify-globals-dominance.wast b/test/lit/passes/simplify-globals-dominance.wast index 3756a4a7eec..dddcaa98306 100644 --- a/test/lit/passes/simplify-globals-dominance.wast +++ b/test/lit/passes/simplify-globals-dominance.wast @@ -14,7 +14,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 10) ;; CHECK-NEXT: ) @@ -23,8 +23,10 @@ ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (global.get $global) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (global.get $global) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -34,22 +36,26 @@ ) (if (i32.const 0) - (block - ;; This is dominated by the set, so we can apply 10 here. - (drop - (global.get $global) + (then + (block + ;; This is dominated by the set, so we can apply 10 here. + (drop + (global.get $global) + ) + (call $test) + ;; This is after a call, so we do nothing (we are still dominated by the + ;; global.set, but the call might set the global to another value). + (drop + (global.get $global) + ) ) - (call $test) - ;; This is after a call, so we do nothing (we are still dominated by the - ;; global.set, but the call might set the global to another value). + ) + ;; This is dominated by the set, but we do not optimize it yet. TODO + (else (drop (global.get $global) ) ) - ;; This is dominated by the set, but we do not optimize it yet. TODO - (drop - (global.get $global) - ) ) ) ) diff --git a/test/lit/passes/simplify-globals-read_only_to_write.wast b/test/lit/passes/simplify-globals-read_only_to_write.wast index cf783ee4b51..e1f27327cdb 100644 --- a/test/lit/passes/simplify-globals-read_only_to_write.wast +++ b/test/lit/passes/simplify-globals-read_only_to_write.wast @@ -12,15 +12,19 @@ ;; CHECK: (func $simple ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $simple (if (global.get $global) - (global.set $global (i32.const 1)) + (then + (global.set $global (i32.const 1)) + ) ) ) ;; CHECK: (func $more-with-no-side-effects @@ -28,7 +32,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) @@ -43,9 +47,11 @@ (global.get $global) ) ;; Also test for other operations in the body, with no effects. - (block - (nop) - (global.set $global (i32.const 1)) + (then + (block + (nop) + (global.set $global (i32.const 1)) + ) ) ) ) @@ -69,8 +75,10 @@ ;; CHECK: (func $additional-read ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) - ;; CHECK-NEXT: (global.set $global - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -80,7 +88,9 @@ (func $additional-read (if (global.get $global) - (global.set $global (i32.const 1)) + (then + (global.set $global (i32.const 1)) + ) ) (drop (global.get $global) @@ -96,17 +106,25 @@ ;; CHECK: (func $if-else ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) - ;; CHECK-NEXT: (global.set $global - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else (if (global.get $global) - (global.set $global (i32.const 1)) - (nop) + (then + (global.set $global (i32.const 1)) + ) + (else + (nop) + ) ) ) ) @@ -121,7 +139,7 @@ ;; CHECK: (func $side-effects-in-body ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $global) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $global ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) @@ -137,10 +155,12 @@ (func $side-effects-in-body (if (global.get $global) - (block - (global.set $global (i32.const 1)) - (global.set $other (i32.const 2)) - (drop (global.get $other)) + (then + (block + (global.set $global (i32.const 1)) + (global.set $other (i32.const 2)) + (drop (global.get $other)) + ) ) ) ) @@ -159,17 +179,19 @@ ;; CHECK: (func $nested ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop @@ -183,18 +205,24 @@ (func $nested (if (global.get $a) - (block - (global.set $a (i32.const 1)) - (if - (global.get $b) - (block - (if - (global.get $c) + (then + (block + (global.set $a (i32.const 1)) + (if + (global.get $b) + (then (block - (global.set $c (i32.const 2)) + (if + (global.get $c) + (then + (block + (global.set $c (i32.const 2)) + ) + ) + ) + (global.set $b (i32.const 3)) ) ) - (global.set $b (i32.const 3)) ) ) ) @@ -211,7 +239,9 @@ ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.const 1) @@ -223,7 +253,9 @@ ;; in the if body in this case. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1) @@ -240,7 +272,9 @@ ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -252,7 +286,9 @@ ;; many elements - a nop is added at the end. (if (global.get $once) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1) @@ -270,8 +306,12 @@ ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (return) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -281,8 +321,12 @@ ;; As above, but the optimization fails because the if has an else. (if (global.get $once) - (return) - (nop) + (then + (return) + ) + (else + (nop) + ) ) (global.set $once (i32.const 1) @@ -299,7 +343,9 @@ ;; CHECK: (func $clinit ;; CHECK-NEXT: (if ;; CHECK-NEXT: (global.get $once) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -310,7 +356,9 @@ ;; return. (if (global.get $once) - (nop) + (then + (nop) + ) ) (global.set $once (i32.const 1) @@ -331,7 +379,9 @@ ;; CHECK-NEXT: (call $foo ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (return) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $once ;; CHECK-NEXT: (i32.const 1) @@ -344,7 +394,9 @@ ;; value, which is dangerous. (global.get $once) ) - (return) + (then + (return) + ) ) (global.set $once (i32.const 1) @@ -374,11 +426,17 @@ ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (global.get $global) - ;; CHECK-NEXT: (call $foo) - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $foo) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $global - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -386,10 +444,16 @@ (if (if (result i32) (global.get $global) ;; the global's value may cause foo() to be called - (call $foo) - (i32.const 1) + (then + (call $foo) + ) + (else + (i32.const 1) + ) + ) + (then + (global.set $global (i32.const 1)) ) - (global.set $global (i32.const 1)) ) ) @@ -416,11 +480,17 @@ ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (call $foo) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -429,11 +499,17 @@ (if (result i32) (call $foo) ;; these side effects are not a problem, as the global's ;; value cannot reach them. - (i32.const 1) - (global.get $global) ;; the global's value flows out through the if, + (then + (i32.const 1) + ) + (else + (global.get $global) ;; the global's value flows out through the if, + ) ;; safely ) - (global.set $global (i32.const 1)) + (then + (global.set $global (i32.const 1)) + ) ) ) @@ -459,8 +535,10 @@ ;; CHECK-NEXT: (local.tee $temp ;; CHECK-NEXT: (global.get $global) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $global - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $global + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -470,7 +548,9 @@ (local.tee $temp (global.get $global) ;; the global's value flows into a place that has ) ;; side effects, so it may be noticed. - (global.set $global (i32.const 1)) + (then + (global.set $global (i32.const 1)) + ) ) ) ) @@ -505,8 +585,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -528,8 +610,10 @@ ) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) ) @@ -554,8 +638,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq @@ -563,8 +649,10 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -579,8 +667,10 @@ (i32.eqz (global.get $once) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) (i32.eq @@ -588,8 +678,10 @@ (i32.const 0) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) ) @@ -614,18 +706,24 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $once - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $once + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $once - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $once + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -640,18 +738,24 @@ (i32.eqz (global.get $once) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) + ) + (else + (nop) ;; This breaks the pattern we are looking for. ) - (nop) ;; This breaks the pattern we are looking for. ) (i32.eq (global.get $once) (i32.const 0) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) ) @@ -677,15 +781,19 @@ ;; CHECK-NEXT: (block (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq @@ -693,8 +801,10 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -709,15 +819,19 @@ ;; A third nested appearance. (if (global.get $once) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) (global.get $once) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) (i32.eq @@ -725,8 +839,10 @@ (i32.const 0) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) ) @@ -754,8 +870,10 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $once) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $once - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $once + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.eq @@ -763,8 +881,10 @@ ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (global.set $once - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (global.set $once + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -788,8 +908,10 @@ (i32.eqz (global.get $once) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) (i32.eq @@ -797,8 +919,10 @@ (i32.const 0) ) ) - (global.set $once - (i32.const 1) + (then + (global.set $once + (i32.const 1) + ) ) ) ) diff --git a/test/lit/passes/simplify-locals-eh.wast b/test/lit/passes/simplify-locals-eh.wast index 36bd110834f..5e4a395d3f9 100644 --- a/test/lit/passes/simplify-locals-eh.wast +++ b/test/lit/passes/simplify-locals-eh.wast @@ -196,7 +196,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $p) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -204,7 +204,7 @@ ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) @@ -228,18 +228,22 @@ (drop (local.get $1)) (if (local.get $p) - (block - ;; We also optimize in this block, which is adjacent to the code before - ;; us. It is valid to optimize the 1 to a 0 here, as it is dominated by - ;; the code earlier. - (drop (local.get $0)) - (drop (local.get $1)) + (then + (block + ;; We also optimize in this block, which is adjacent to the code before + ;; us. It is valid to optimize the 1 to a 0 here, as it is dominated by + ;; the code earlier. + (drop (local.get $0)) + (drop (local.get $1)) + ) ) - (block - ;; We could also optimize here, but atm just look at code adjacent to - ;; its dominator. TODO - (drop (local.get $0)) - (drop (local.get $1)) + (else + (block + ;; We could also optimize here, but atm just look at code adjacent to + ;; its dominator. TODO + (drop (local.get $0)) + (drop (local.get $1)) + ) ) ) ;; As in the else, this could be optimized. TODO diff --git a/test/lit/passes/simplify-locals-gc-nn.wast b/test/lit/passes/simplify-locals-gc-nn.wast index df5148d126a..32c881de81f 100644 --- a/test/lit/passes/simplify-locals-gc-nn.wast +++ b/test/lit/passes/simplify-locals-gc-nn.wast @@ -154,7 +154,9 @@ ;; CHECK-NEXT: (local $temp ((ref func) nullref)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-return-tuple-nn @@ -165,10 +167,12 @@ ;; Instead, we can remove the local.set entirely, as it has no gets. (if (i32.const 0) - (local.set $temp - (tuple.make 2 - (ref.func $if-return-tuple-nn) - (ref.null none) + (then + (local.set $temp + (tuple.make 2 + (ref.func $if-return-tuple-nn) + (ref.null none) + ) ) ) ) diff --git a/test/lit/passes/simplify-locals-gc.wast b/test/lit/passes/simplify-locals-gc.wast index 2c5f56952e0..98d1f5925c0 100644 --- a/test/lit/passes/simplify-locals-gc.wast +++ b/test/lit/passes/simplify-locals-gc.wast @@ -166,8 +166,10 @@ ;; CHECK-NEXT: (local $x (ref func)) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (ref.func $if-nnl) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (ref.func $if-nnl) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper @@ -195,8 +197,10 @@ ;; do not optimize here. (if (i32.const 1) - (local.set $x - (ref.func $if-nnl) + (then + (local.set $x + (ref.func $if-nnl) + ) ) ) ;; An exta set + gets, just to avoid other optimizations kicking in @@ -219,8 +223,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (local.set $x - ;; CHECK-NEXT: (ref.func $if-nnl) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (ref.func $if-nnl) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (call $helper @@ -241,8 +247,10 @@ ) (if (i32.const 1) - (local.set $x - (ref.func $if-nnl) + (then + (local.set $x + (ref.func $if-nnl) + ) ) ) (call $helper diff --git a/test/lit/passes/simplify-locals-tnh.wast b/test/lit/passes/simplify-locals-tnh.wast index fa10c318d46..21f4863c849 100644 --- a/test/lit/passes/simplify-locals-tnh.wast +++ b/test/lit/passes/simplify-locals-tnh.wast @@ -57,8 +57,10 @@ ;; TNH-NEXT: ) ;; TNH-NEXT: (if ;; TNH-NEXT: (i32.const 0) - ;; TNH-NEXT: (return - ;; TNH-NEXT: (i32.const 1) + ;; TNH-NEXT: (then + ;; TNH-NEXT: (return + ;; TNH-NEXT: (i32.const 1) + ;; TNH-NEXT: ) ;; TNH-NEXT: ) ;; TNH-NEXT: ) ;; TNH-NEXT: (local.get $temp) @@ -72,8 +74,10 @@ ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (i32.const 0) - ;; NO_TNH-NEXT: (return - ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (return + ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (local.get $temp) @@ -91,8 +95,10 @@ ) (if (i32.const 0) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (local.get $temp) diff --git a/test/lit/passes/stack-check-memory64.wast b/test/lit/passes/stack-check-memory64.wast index 201910f36b0..137b156de2f 100644 --- a/test/lit/passes/stack-check-memory64.wast +++ b/test/lit/passes/stack-check-memory64.wast @@ -39,7 +39,9 @@ ;; CHECK-NEXT: (global.get $__stack_limit) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (global.set $sp ;; CHECK-NEXT: (local.get $0) @@ -63,30 +65,40 @@ (module ;; if the global names are taken we should not crash (memory i64 (data)) - ;; CHECK: (type $0 (func (param i64 i64))) + ;; CHECK: (type $0 (func (result i64))) + + ;; CHECK: (type $1 (func (param i64 i64))) ;; CHECK: (global $sp (mut i64) (i64.const 0)) - (global $sp (mut i64) (i64.const 0))) + (global $sp (mut i64) (i64.const 0)) ;; CHECK: (global $__stack_base (mut i64) (i64.const 0)) (global $__stack_base (mut i64) (i64.const 0)) ;; CHECK: (global $__stack_limit (mut i64) (i64.const 0)) (global $__stack_limit (mut i64) (i64.const 0)) + ;; CHECK: (global $__stack_base_3 (mut i64) (i64.const 0)) + + ;; CHECK: (global $__stack_limit_3 (mut i64) (i64.const 0)) + + ;; CHECK: (memory $0 i64 0 65536) + + ;; CHECK: (data $0 (i64.const 0) "") + + ;; CHECK: (export "use_stack" (func $0)) (export "use_stack" (func $0)) + ;; CHECK: (export "__set_stack_limits" (func $__set_stack_limits)) + + ;; CHECK: (func $0 (result i64) + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) (func $0 (result i64) (unreachable) ) ) -;; CHECK: (memory $0 i64 0 65536) - -;; CHECK: (data $0 (i64.const 0) "") - -;; CHECK: (export "__set_stack_limits" (func $__set_stack_limits)) - ;; CHECK: (func $__set_stack_limits (param $0 i64) (param $1 i64) -;; CHECK-NEXT: (global.set $__stack_base +;; CHECK-NEXT: (global.set $__stack_base_3 ;; CHECK-NEXT: (local.get $0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (global.set $__stack_limit +;; CHECK-NEXT: (global.set $__stack_limit_3 ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/stack-ir-non-nullable.wast b/test/lit/passes/stack-ir-non-nullable.wast index e2bd63271db..62d75d61f04 100644 --- a/test/lit/passes/stack-ir-non-nullable.wast +++ b/test/lit/passes/stack-ir-non-nullable.wast @@ -41,14 +41,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -86,14 +90,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -131,14 +139,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -183,14 +195,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -233,14 +249,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -280,14 +300,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -325,14 +349,18 @@ (i32.const 0) ) ) - (local.set $temp - (i31.new - (i32.const 1) + (then + (local.set $temp + (i31.new + (i32.const 1) + ) ) ) - (local.set $temp - (i31.new - (i32.const 2) + (else + (local.set $temp + (i31.new + (i32.const 2) + ) ) ) ) @@ -386,19 +414,23 @@ (i32.const 1) ) ) - (local.set $temp - (tuple.make 2 - (i32.const 2) - (i31.new - (i32.const 3) + (then + (local.set $temp + (tuple.make 2 + (i32.const 2) + (i31.new + (i32.const 3) + ) ) ) ) - (local.set $temp - (tuple.make 2 - (i32.const 4) - (i31.new - (i32.const 5) + (else + (local.set $temp + (tuple.make 2 + (i32.const 4) + (i31.new + (i32.const 5) + ) ) ) ) @@ -454,19 +486,23 @@ (i32.const 1) ) ) - (local.set $temp - (tuple.make 2 - (i32.const 2) - (i31.new - (i32.const 3) + (then + (local.set $temp + (tuple.make 2 + (i32.const 2) + (i31.new + (i32.const 3) + ) ) ) ) - (local.set $temp - (tuple.make 2 - (i32.const 4) - (i31.new - (i32.const 5) + (else + (local.set $temp + (tuple.make 2 + (i32.const 4) + (i31.new + (i32.const 5) + ) ) ) ) @@ -501,11 +537,15 @@ (local.get $temp) (i32.const 0) ) - (local.set $temp - (i32.const 1) + (then + (local.set $temp + (i32.const 1) + ) ) - (local.set $temp - (i32.const 2) + (else + (local.set $temp + (i32.const 2) + ) ) ) (local.get $temp) @@ -544,26 +584,30 @@ ) (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + (drop + (local.get $temp) + ) ) ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + (drop + (local.get $temp) + ) ) ) ) @@ -597,24 +641,28 @@ ) (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + ;; A get was removed here. ) - ;; A get was removed here. ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + (drop + (local.get $temp) + ) ) ) ) @@ -645,25 +693,29 @@ ) (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + (drop + (local.get $temp) + ) ) ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + ;; A get was removed here. ) - ;; A get was removed here. ) ) ) @@ -689,23 +741,27 @@ ) (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + ;; A get was removed here. ) - ;; A get was removed here. ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) + ;; A get was removed here. ) - ;; A get was removed here. ) ) ) @@ -727,20 +783,24 @@ ;; optimize both arms. (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) ) ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) ) ) ) @@ -766,20 +826,24 @@ ;; them as well. (if (i32.const 0) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (then + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) ) ) - (block - (local.set $temp - (local.get $param) - ) - (drop - (local.get $temp) + (else + (block + (local.set $temp + (local.get $param) + ) + (drop + (local.get $temp) + ) ) ) ) @@ -959,13 +1023,17 @@ ;; In this if arm we write to $temp twice. That shouldn't confuse us; there's ;; still a use after the if, and we should not remove the set-get pair before ;; the if. - (local.set $temp - (local.tee $temp - (local.get $param) + (then + (local.set $temp + (local.tee $temp + (local.get $param) + ) ) ) - (local.set $temp - (local.get $param) + (else + (local.set $temp + (local.get $param) + ) ) ) (local.get $temp) diff --git a/test/lit/passes/type-generalizing.wast b/test/lit/passes/type-generalizing.wast index c874cc76cd3..502f57235aa 100644 --- a/test/lit/passes/type-generalizing.wast +++ b/test/lit/passes/type-generalizing.wast @@ -93,8 +93,12 @@ ;; CHECK-NEXT: (local $y eqref) ;; CHECK-NEXT: (if (result eqref) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (local.get $y) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if (result eqref) @@ -103,9 +107,13 @@ (if (result i31ref) (i32.const 0) ;; Require that typeof($x) <: eqref. - (local.get $x) + (then + (local.get $x) + ) ;; Require that typeof($y) <: eqref. - (local.get $y) + (else + (local.get $y) + ) ) ) diff --git a/test/lit/passes/type-merging.wast b/test/lit/passes/type-merging.wast index 34f156a2b08..9327ebdb178 100644 --- a/test/lit/passes/type-merging.wast +++ b/test/lit/passes/type-merging.wast @@ -1019,10 +1019,6 @@ (global $g2 (ref $C') (struct.new_default $D2')) ) - (global $g1 (ref $B) (struct.new_default $D1)) - (global $g2 (ref $C) (struct.new_default $D2)) -) - ;; Check that a ref.test inhibits merging (ref.cast is already checked above). (module ;; CHECK: (rec diff --git a/test/lit/passes/type-refining.wast b/test/lit/passes/type-refining.wast index 0a133d7a09c..8ce95c46d0e 100644 --- a/test/lit/passes/type-refining.wast +++ b/test/lit/passes/type-refining.wast @@ -1026,20 +1026,28 @@ ;; CHECK-NEXT: (local.get $A) ;; CHECK-NEXT: (if (result (ref $A)) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (struct.get $A 0 - ;; CHECK-NEXT: (local.get $A) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (struct.get $A 0 + ;; CHECK-NEXT: (local.get $A) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (struct.new $A ;; CHECK-NEXT: (if (result (ref $A)) ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (struct.get $A 0 - ;; CHECK-NEXT: (local.get $A) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (struct.get $A 0 + ;; CHECK-NEXT: (local.get $A) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1056,20 +1064,28 @@ (local.get $A) (if (result (ref null $A)) (i32.const 1) - (struct.get $A 0 - (local.get $A) + (then + (struct.get $A 0 + (local.get $A) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) (drop (struct.new $A (if (result (ref null $A)) (i32.const 1) - (struct.get $A 0 - (local.get $A) + (then + (struct.get $A 0 + (local.get $A) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) ) diff --git a/test/lit/passes/type-ssa_and_merging.wast b/test/lit/passes/type-ssa_and_merging.wast index 3fbff170d20..670de31ac45 100644 --- a/test/lit/passes/type-ssa_and_merging.wast +++ b/test/lit/passes/type-ssa_and_merging.wast @@ -80,9 +80,11 @@ ;; NOP: (func $get-a-1 (type $0) (; has Stack IR ;) (param $0 (ref $A)) (result i32) ;; NOP-NEXT: (if ;; NOP-NEXT: (call $import) - ;; NOP-NEXT: (return - ;; NOP-NEXT: (call $get-a-1 - ;; NOP-NEXT: (local.get $0) + ;; NOP-NEXT: (then + ;; NOP-NEXT: (return + ;; NOP-NEXT: (call $get-a-1 + ;; NOP-NEXT: (local.get $0) + ;; NOP-NEXT: ) ;; NOP-NEXT: ) ;; NOP-NEXT: ) ;; NOP-NEXT: ) @@ -93,8 +95,10 @@ ;; YES: (func $get-a-1 (type $1) (param $0 (ref $A)) ;; YES-NEXT: (if ;; YES-NEXT: (call $import) - ;; YES-NEXT: (call $get-a-1 - ;; YES-NEXT: (local.get $0) + ;; YES-NEXT: (then + ;; YES-NEXT: (call $get-a-1 + ;; YES-NEXT: (local.get $0) + ;; YES-NEXT: ) ;; YES-NEXT: ) ;; YES-NEXT: ) ;; YES-NEXT: ) @@ -104,9 +108,11 @@ ;; is necessary to avoid inlining making this testcase trivial even in NOP). (if (call $import) - (return - (call $get-a-1 - (local.get $ref) + (then + (return + (call $get-a-1 + (local.get $ref) + ) ) ) ) @@ -116,9 +122,11 @@ ;; NOP: (func $get-a-2 (type $0) (; has Stack IR ;) (param $0 (ref $A)) (result i32) ;; NOP-NEXT: (if ;; NOP-NEXT: (call $import) - ;; NOP-NEXT: (return - ;; NOP-NEXT: (call $get-a-2 - ;; NOP-NEXT: (local.get $0) + ;; NOP-NEXT: (then + ;; NOP-NEXT: (return + ;; NOP-NEXT: (call $get-a-2 + ;; NOP-NEXT: (local.get $0) + ;; NOP-NEXT: ) ;; NOP-NEXT: ) ;; NOP-NEXT: ) ;; NOP-NEXT: ) @@ -129,8 +137,10 @@ ;; YES: (func $get-a-2 (type $1) (param $0 (ref $A)) ;; YES-NEXT: (if ;; YES-NEXT: (call $import) - ;; YES-NEXT: (call $get-a-2 - ;; YES-NEXT: (local.get $0) + ;; YES-NEXT: (then + ;; YES-NEXT: (call $get-a-2 + ;; YES-NEXT: (local.get $0) + ;; YES-NEXT: ) ;; YES-NEXT: ) ;; YES-NEXT: ) ;; YES-NEXT: ) @@ -138,9 +148,11 @@ ;; Parallel to the above. (if (call $import) - (return - (call $get-a-2 - (local.get $ref) + (then + (return + (call $get-a-2 + (local.get $ref) + ) ) ) ) diff --git a/test/lit/passes/unsubtyping.wast b/test/lit/passes/unsubtyping.wast index df7e6c033fe..38549504e8e 100644 --- a/test/lit/passes/unsubtyping.wast +++ b/test/lit/passes/unsubtyping.wast @@ -275,8 +275,12 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref $sub)) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (struct.new_default $sub) - ;; CHECK-NEXT: (struct.new_default $sub) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (struct.new_default $sub) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (struct.new_default $sub) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -285,8 +289,12 @@ (if (result (ref $super)) (i32.const 0) ;; This requires $sub <: $super. - (struct.new $sub) - (struct.new $sub) + (then + (struct.new $sub) + ) + (else + (struct.new $sub) + ) ) ) ) diff --git a/test/lit/passes/vacuum-eh.wast b/test/lit/passes/vacuum-eh.wast index b6b4629cd0a..68b5f7b1e43 100644 --- a/test/lit/passes/vacuum-eh.wast +++ b/test/lit/passes/vacuum-eh.wast @@ -185,10 +185,14 @@ ;; CHECK-NEXT: (do ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (throw $e - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (throw $e + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (catch_all @@ -210,8 +214,12 @@ (do (if (local.get $0) - (throw $e (i32.const 0)) - (unreachable) + (then + (throw $e (i32.const 0)) + ) + (else + (unreachable) + ) ) ) (catch_all) diff --git a/test/lit/passes/vacuum-func.wast b/test/lit/passes/vacuum-func.wast index 6f93e400287..6181a662def 100644 --- a/test/lit/passes/vacuum-func.wast +++ b/test/lit/passes/vacuum-func.wast @@ -59,7 +59,9 @@ ;; CHECK-NEXT: (local $y i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (i32.const 1) @@ -78,7 +80,9 @@ ;; test at least.) (if (local.get $x) - (unreachable) + (then + (unreachable) + ) ) (local.set $x diff --git a/test/lit/passes/vacuum-gc.wast b/test/lit/passes/vacuum-gc.wast index be49bf1cf33..27cd6f52d73 100644 --- a/test/lit/passes/vacuum-gc.wast +++ b/test/lit/passes/vacuum-gc.wast @@ -51,10 +51,14 @@ ;; synthesize and allocate a new struct value. Vacuum should not error ;; on this case, though. Instead, the end result of this function should ;; simply be empty, as everything here can be vacuumed away. - (block (result (ref ${})) - (struct.new ${}) + (then + (block (result (ref ${})) + (struct.new ${}) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) ) diff --git a/test/lit/passes/vacuum-intrinsics.wast b/test/lit/passes/vacuum-intrinsics.wast index 6b0654fb78e..8ae5c0a3317 100644 --- a/test/lit/passes/vacuum-intrinsics.wast +++ b/test/lit/passes/vacuum-intrinsics.wast @@ -97,16 +97,20 @@ ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $ifTrue (result i32) - ;; CHECK-NEXT: (call $nop) - ;; CHECK-NEXT: (call $call.without.effects - ;; CHECK-NEXT: (ref.func $i) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $ifTrue (result i32) + ;; CHECK-NEXT: (call $nop) + ;; CHECK-NEXT: (call $call.without.effects + ;; CHECK-NEXT: (ref.func $i) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $ifFalse (result i32) - ;; CHECK-NEXT: (call $nop) - ;; CHECK-NEXT: (call $call.without.effects - ;; CHECK-NEXT: (ref.func $i) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $ifFalse (result i32) + ;; CHECK-NEXT: (call $nop) + ;; CHECK-NEXT: (call $call.without.effects + ;; CHECK-NEXT: (ref.func $i) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -124,13 +128,17 @@ ) ;; The arms fall through their blocks and also through the if, and end ;; up used by the set. - (block $ifTrue (result i32) - (call $nop) - (call $call.without.effects (ref.func $i)) + (then + (block $ifTrue (result i32) + (call $nop) + (call $call.without.effects (ref.func $i)) + ) ) - (block $ifFalse (result i32) - (call $nop) - (call $call.without.effects (ref.func $i)) + (else + (block $ifFalse (result i32) + (call $nop) + (call $call.without.effects (ref.func $i)) + ) ) ) ) @@ -145,13 +153,17 @@ ;; CHECK-NEXT: (ref.func $i) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $ifTrue (result i32) - ;; CHECK-NEXT: (call $nop) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (block $ifTrue (result i32) + ;; CHECK-NEXT: (call $nop) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block $ifFalse (result i32) - ;; CHECK-NEXT: (call $nop) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (block $ifFalse (result i32) + ;; CHECK-NEXT: (call $nop) + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -165,13 +177,17 @@ ) ;; As above, but now there is a drop outside the if, so the arms are ;; unused and we can optimize them. - (block $ifTrue (result i32) - (call $nop) - (call $call.without.effects (ref.func $i)) + (then + (block $ifTrue (result i32) + (call $nop) + (call $call.without.effects (ref.func $i)) + ) ) - (block $ifFalse (result i32) - (call $nop) - (call $call.without.effects (ref.func $i)) + (else + (block $ifFalse (result i32) + (call $nop) + (call $call.without.effects (ref.func $i)) + ) ) ) ) @@ -181,11 +197,15 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result (ref any)) ;; CHECK-NEXT: (call $i) - ;; CHECK-NEXT: (call $call.without.effects-ref - ;; CHECK-NEXT: (ref.func $ref) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $call.without.effects-ref + ;; CHECK-NEXT: (ref.func $ref) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (call $call.without.effects-ref - ;; CHECK-NEXT: (ref.func $ref) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $call.without.effects-ref + ;; CHECK-NEXT: (ref.func $ref) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -196,8 +216,12 @@ (call $i) ;; As above, but the type of these unused values prevents us from ;; optimizing as we cannot create a "zero" for them. - (call $call.without.effects-ref (ref.func $ref)) - (call $call.without.effects-ref (ref.func $ref)) + (then + (call $call.without.effects-ref (ref.func $ref)) + ) + (else + (call $call.without.effects-ref (ref.func $ref)) + ) ) ) ) diff --git a/test/lit/passes/vacuum-tnh.wast b/test/lit/passes/vacuum-tnh.wast index f6d30a2c5d6..f74dc3c8761 100644 --- a/test/lit/passes/vacuum-tnh.wast +++ b/test/lit/passes/vacuum-tnh.wast @@ -286,47 +286,71 @@ ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: (if ;; YESTNH-NEXT: (local.get $p) - ;; YESTNH-NEXT: (unreachable) - ;; YESTNH-NEXT: (unreachable) + ;; YESTNH-NEXT: (then + ;; YESTNH-NEXT: (unreachable) + ;; YESTNH-NEXT: ) + ;; YESTNH-NEXT: (else + ;; YESTNH-NEXT: (unreachable) + ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; NO_TNH: (func $if-unreachable (type $0) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (call $if-unreachable - ;; NO_TNH-NEXT: (i32.const 0) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (call $if-unreachable + ;; NO_TNH-NEXT: (i32.const 0) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (unreachable) ;; NO_TNH-NEXT: ) - ;; NO_TNH-NEXT: (unreachable) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (unreachable) - ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) (func $if-unreachable (param $p i32) ;; The if arm can be nopped, as in tnh we assume we never reach it. (if (local.get $p) - (unreachable) + (then + (unreachable) + ) ) ;; This else arm can be removed. (if (local.get $p) - (call $if-unreachable - (i32.const 0) + (then + (call $if-unreachable + (i32.const 0) + ) + ) + (else + (unreachable) ) - (unreachable) ) ;; Both of these can be removed, but we leave this for DCE to handle. (if (local.get $p) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) @@ -339,8 +363,12 @@ ;; NO_TNH: (func $if-unreachable-value (type $3) (param $p i32) (result i32) ;; NO_TNH-NEXT: (if (result i32) ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (unreachable) - ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) (func $if-unreachable-value (param $p i32) (result i32) @@ -348,8 +376,12 @@ ;; cannot have a nop there. (if (result i32) (local.get $p) - (unreachable) - (i32.const 1) + (then + (unreachable) + ) + (else + (i32.const 1) + ) ) ) @@ -362,30 +394,40 @@ ;; NO_TNH: (func $if-unreachable-value-2 (type $3) (param $p i32) (result i32) ;; NO_TNH-NEXT: (if (result i32) ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (i32.const 1) - ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (else + ;; NO_TNH-NEXT: (unreachable) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) (func $if-unreachable-value-2 (param $p i32) (result i32) ;; As above but in the other arm. (if (result i32) (local.get $p) - (i32.const 1) - (unreachable) + (then + (i32.const 1) + ) + (else + (unreachable) + ) ) ) ;; YESTNH: (func $block-unreachable (type $0) (param $p i32) ;; YESTNH-NEXT: (if ;; YESTNH-NEXT: (local.get $p) - ;; YESTNH-NEXT: (block + ;; YESTNH-NEXT: (then ;; YESTNH-NEXT: (i32.store ;; YESTNH-NEXT: (i32.const 0) ;; YESTNH-NEXT: (i32.const 1) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: (if ;; YESTNH-NEXT: (local.get $p) - ;; YESTNH-NEXT: (return) + ;; YESTNH-NEXT: (then + ;; YESTNH-NEXT: (return) + ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: (unreachable) ;; YESTNH-NEXT: ) @@ -394,14 +436,16 @@ ;; NO_TNH: (func $block-unreachable (type $0) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (block + ;; NO_TNH-NEXT: (then ;; NO_TNH-NEXT: (i32.store ;; NO_TNH-NEXT: (i32.const 0) ;; NO_TNH-NEXT: (i32.const 1) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (return) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (return) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (i32.store ;; NO_TNH-NEXT: (i32.const 2) @@ -414,22 +458,26 @@ (func $block-unreachable (param $p i32) (if (local.get $p) - (block - (i32.store - (i32.const 0) - (i32.const 1) - ) - (if - (local.get $p) - (return) - ) - ;; This store can be removed as it leads up to an unreachable which we - ;; assume is never reached. - (i32.store - (i32.const 2) - (i32.const 3) + (then + (block + (i32.store + (i32.const 0) + (i32.const 1) + ) + (if + (local.get $p) + (then + (return) + ) + ) + ;; This store can be removed as it leads up to an unreachable which we + ;; assume is never reached. + (i32.store + (i32.const 2) + (i32.const 3) + ) + (unreachable) ) - (unreachable) ) ) ) @@ -437,55 +485,61 @@ ;; YESTNH: (func $block-unreachable-named (type $0) (param $p i32) ;; YESTNH-NEXT: (if ;; YESTNH-NEXT: (local.get $p) - ;; YESTNH-NEXT: (block $named - ;; YESTNH-NEXT: (i32.store - ;; YESTNH-NEXT: (i32.const 0) - ;; YESTNH-NEXT: (i32.const 1) - ;; YESTNH-NEXT: ) - ;; YESTNH-NEXT: (br_if $named - ;; YESTNH-NEXT: (local.get $p) + ;; YESTNH-NEXT: (then + ;; YESTNH-NEXT: (block $named + ;; YESTNH-NEXT: (i32.store + ;; YESTNH-NEXT: (i32.const 0) + ;; YESTNH-NEXT: (i32.const 1) + ;; YESTNH-NEXT: ) + ;; YESTNH-NEXT: (br_if $named + ;; YESTNH-NEXT: (local.get $p) + ;; YESTNH-NEXT: ) + ;; YESTNH-NEXT: (unreachable) ;; YESTNH-NEXT: ) - ;; YESTNH-NEXT: (unreachable) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; NO_TNH: (func $block-unreachable-named (type $0) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (block $named - ;; NO_TNH-NEXT: (i32.store - ;; NO_TNH-NEXT: (i32.const 0) - ;; NO_TNH-NEXT: (i32.const 1) - ;; NO_TNH-NEXT: ) - ;; NO_TNH-NEXT: (br_if $named - ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: ) - ;; NO_TNH-NEXT: (i32.store - ;; NO_TNH-NEXT: (i32.const 2) - ;; NO_TNH-NEXT: (i32.const 3) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (block $named + ;; NO_TNH-NEXT: (i32.store + ;; NO_TNH-NEXT: (i32.const 0) + ;; NO_TNH-NEXT: (i32.const 1) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (br_if $named + ;; NO_TNH-NEXT: (local.get $p) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (i32.store + ;; NO_TNH-NEXT: (i32.const 2) + ;; NO_TNH-NEXT: (i32.const 3) + ;; NO_TNH-NEXT: ) + ;; NO_TNH-NEXT: (unreachable) ;; NO_TNH-NEXT: ) - ;; NO_TNH-NEXT: (unreachable) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) (func $block-unreachable-named (param $p i32) (if (local.get $p) - (block $named - (i32.store - (i32.const 0) - (i32.const 1) - ) - ;; As above, but now the block is named and we use a br_if. We should - ;; again only remove the last store. - (br_if $named - (local.get $p) - ) - (i32.store - (i32.const 2) - (i32.const 3) + (then + (block $named + (i32.store + (i32.const 0) + (i32.const 1) + ) + ;; As above, but now the block is named and we use a br_if. We should + ;; again only remove the last store. + (br_if $named + (local.get $p) + ) + (i32.store + (i32.const 2) + (i32.const 3) + ) + (unreachable) ) - (unreachable) ) ) ) @@ -496,7 +550,7 @@ ;; NO_TNH: (func $block-unreachable-all (type $0) (param $p i32) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (block + ;; NO_TNH-NEXT: (then ;; NO_TNH-NEXT: (i32.store ;; NO_TNH-NEXT: (i32.const 0) ;; NO_TNH-NEXT: (i32.const 1) @@ -512,18 +566,20 @@ (func $block-unreachable-all (param $p i32) (if (local.get $p) - (block - ;; Both stores can be removed, and even the entire if arm and then the - ;; entire if. - (i32.store - (i32.const 0) - (i32.const 1) - ) - (i32.store - (i32.const 2) - (i32.const 3) + (then + (block + ;; Both stores can be removed, and even the entire if arm and then the + ;; entire if. + (i32.store + (i32.const 0) + (i32.const 1) + ) + (i32.store + (i32.const 2) + (i32.const 3) + ) + (unreachable) ) - (unreachable) ) ) ) @@ -625,7 +681,9 @@ ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: (if ;; YESTNH-NEXT: (local.get $p) - ;; YESTNH-NEXT: (br $loop) + ;; YESTNH-NEXT: (then + ;; YESTNH-NEXT: (br $loop) + ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: ) ;; YESTNH-NEXT: (unreachable) ;; YESTNH-NEXT: ) @@ -638,7 +696,9 @@ ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (if ;; NO_TNH-NEXT: (local.get $p) - ;; NO_TNH-NEXT: (br $loop) + ;; NO_TNH-NEXT: (then + ;; NO_TNH-NEXT: (br $loop) + ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: ) ;; NO_TNH-NEXT: (i32.store ;; NO_TNH-NEXT: (i32.const 2) @@ -655,7 +715,9 @@ ) (if (local.get $p) - (br $loop) + (then + (br $loop) + ) ) ;; This store can be removed as it leads up to an unreachable which we ;; assume is never reached. diff --git a/test/lit/passes/vacuum_all-features.wast b/test/lit/passes/vacuum_all-features.wast index b228d13eeb4..e4b183663eb 100644 --- a/test/lit/passes/vacuum_all-features.wast +++ b/test/lit/passes/vacuum_all-features.wast @@ -69,22 +69,34 @@ ) (if (i32.const 100) - (nop) - (drop - (i32.const 101) + (then + (nop) + ) + (else + (drop + (i32.const 101) + ) ) ) (if (i32.const 102) - (drop - (i32.const 103) + (then + (drop + (i32.const 103) + ) + ) + (else + (nop) ) - (nop) ) (if (i32.const 104) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) ) ;; CHECK: (func $l (type $3) (result i32) @@ -350,63 +362,83 @@ ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (local.get $d) - ;; CHECK-NEXT: (f64.ne - ;; CHECK-NEXT: (f64.promote_f32 - ;; CHECK-NEXT: (f32.load - ;; CHECK-NEXT: (local.tee $l - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $b) - ;; CHECK-NEXT: (i32.const 60) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (f64.ne + ;; CHECK-NEXT: (f64.promote_f32 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.tee $l + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (local.get $b) + ;; CHECK-NEXT: (i32.const 60) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $e) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (local.get $e) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $Gu (type $4) (param $b i32) (param $e f64) (param $l i32) (param $d i32) (if (if (result i32) (local.get $d) - (block $block1 (result i32) - (nop) - (f64.ne - (f64.promote_f32 - (f32.load - (local.tee $l - (i32.add - (local.get $b) - (i32.const 60) + (then + (block $block1 (result i32) + (nop) + (f64.ne + (f64.promote_f32 + (f32.load + (local.tee $l + (i32.add + (local.get $b) + (i32.const 60) + ) ) ) ) + (local.get $e) ) - (local.get $e) ) ) - (i32.const 0) + (else + (i32.const 0) + ) + ) + (then + (unreachable) ) - (unreachable) ) ) ;; CHECK: (func $if-drop (type $3) (result i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $if-drop) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $out) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $if-drop) - ;; CHECK-NEXT: (br $out) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $int) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -417,15 +449,23 @@ (drop (if (result i32) (call $if-drop) - (call $int) - (br $out) + (then + (call $int) + ) + (else + (br $out) + ) ) ) (drop (if (result i32) (call $if-drop) - (br $out) - (call $int) + (then + (br $out) + ) + (else + (call $int) + ) ) ) ) @@ -565,8 +605,12 @@ ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (call $if2drops) - ;; CHECK-NEXT: (call $if2drops) - ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) @@ -574,11 +618,15 @@ (func $if2drops (result i32) (if (call $if2drops) - (drop - (call $if2drops) + (then + (drop + (call $if2drops) + ) ) - (drop - (call $if2drops) + (else + (drop + (call $if2drops) + ) ) ) (i32.const 2) @@ -586,11 +634,15 @@ ;; CHECK: (func $if2drops-different (type $3) (result i32) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (call $if2drops) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $if2drops) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (call $unary) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (call $unary) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 2) @@ -598,11 +650,15 @@ (func $if2drops-different (result i32) (if (call $if2drops) - (drop - (call $if2drops) ;; i32 + (then + (drop + (call $if2drops) ;; i32 + ) ) - (drop - (call $unary) ;; f32! + (else + (drop + (call $unary) ;; f32! + ) ) ) (i32.const 2) @@ -619,26 +675,34 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-const (param $x i32) - (if (i32.const 0) (call $if-const (i32.const 1))) - (if (i32.const 2) (call $if-const (i32.const 3))) - (if (i32.const 0) (call $if-const (i32.const 4)) (call $if-const (i32.const 5))) - (if (i32.const 6) (call $if-const (i32.const 7)) (call $if-const (i32.const 8))) + (if (i32.const 0) (then (call $if-const (i32.const 1)))) + (if (i32.const 2) (then (call $if-const (i32.const 3)))) + (if (i32.const 0) (then (call $if-const (i32.const 4)) )(else (call $if-const (i32.const 5)))) + (if (i32.const 6) (then (call $if-const (i32.const 7)) )(else (call $if-const (i32.const 8)))) ) ;; CHECK: (func $drop-if-both-unreachable (type $1) (param $0 i32) ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (br $out) - ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $out) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (unreachable) - ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -647,16 +711,24 @@ (drop (if (result i32) (local.get $0) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) (drop (if (result i32) (local.get $0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) @@ -664,7 +736,7 @@ ;; CHECK-NEXT: (block $out ;; CHECK-NEXT: (if ;; CHECK-NEXT: (local.get $x) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (local.set $x ;; CHECK-NEXT: (local.get $x) ;; CHECK-NEXT: ) @@ -678,14 +750,18 @@ (block $out (if (local.get $x) - (block - (if - (i32.const 1) - (block - (local.set $x - (local.get $x) + (then + (block + (if + (i32.const 1) + (then + (block + (local.set $x + (local.get $x) + ) + (br $out) + ) ) - (br $out) ) ) ) @@ -804,8 +880,12 @@ (block $label$0 (if (i32.const 170996275) - (unreachable) - (br $label$0) + (then + (unreachable) + ) + (else + (br $label$0) + ) ) ) (unreachable) @@ -817,8 +897,12 @@ (block $label$0 (if (i32.const 170996275) - (nop) - (br $label$0) + (then + (nop) + ) + (else + (br $label$0) + ) ) ) (unreachable) @@ -833,8 +917,12 @@ (block $label$0 (if (i32.const 170996275) - (br $label$0) - (nop) + (then + (br $label$0) + ) + (else + (nop) + ) ) ) (unreachable) @@ -911,8 +999,12 @@ (br $label$9) ) ) - (unreachable) - (i32.const 1920103026) + (then + (unreachable) + ) + (else + (i32.const 1920103026) + ) ) ) ) @@ -932,7 +1024,9 @@ (br $label$0 (i32.const 1) ) - (br $label$1) + (then + (br $label$1) + ) ) ) (i32.const 1579493952) @@ -952,7 +1046,9 @@ (br $label$0 (i32.const 1) ) - (br $label$1) + (then + (br $label$1) + ) ) ) (i32.const 1579493952) @@ -969,16 +1065,20 @@ (i32.eqz (local.get $0) ) - (block $label$1 - (block - (if ;; we nop this if, which has a type change for block $label$1, no more brs to it - (i32.const 0) - (br_if $label$1 - (i32.const 1717966400) + (then + (block $label$1 + (block + (if ;; we nop this if, which has a type change for block $label$1, no more brs to it + (i32.const 0) + (then + (br_if $label$1 + (i32.const 1717966400) + ) + ) + ) + (drop + (br $label$0) ) - ) - (drop - (br $label$0) ) ) ) @@ -1111,7 +1211,7 @@ ;; CHECK-NEXT: (call $_deflateInit2_ ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $global$1 ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) @@ -1128,7 +1228,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.load offset=20 @@ -1145,7 +1245,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (call $_deflateEnd ;; CHECK-NEXT: (local.get $3) @@ -1204,11 +1304,13 @@ (call $_deflateInit2_ (local.get $3) ) - (block - (global.set $global$1 - (local.get $3) + (then + (block + (global.set $global$1 + (local.get $3) + ) + (return) ) - (return) ) ) (drop @@ -1221,36 +1323,40 @@ ) (i32.const 1) ) - (block (result i32) - (i32.store - (local.get $1) - (i32.load offset=20 - (local.get $3) + (then + (block (result i32) + (i32.store + (local.get $1) + (i32.load offset=20 + (local.get $3) + ) ) - ) - (local.set $0 - (call $_deflateEnd + (local.set $0 + (call $_deflateEnd + (local.get $3) + ) + ) + (global.set $global$1 (local.get $3) ) + (local.get $0) ) - (global.set $global$1 - (local.get $3) - ) - (local.get $0) ) - (block (result i32) - (drop - (call $_deflateEnd + (else + (block (result i32) + (drop + (call $_deflateEnd + (local.get $3) + ) + ) + (global.set $global$1 (local.get $3) ) - ) - (global.set $global$1 - (local.get $3) - ) - (select - (local.get $0) - (i32.const -5) - (local.get $0) + (select + (local.get $0) + (i32.const -5) + (local.get $0) + ) ) ) ) diff --git a/test/lit/source-map.wast b/test/lit/source-map.wast index fcb5e1dd3d2..8d22360adf0 100644 --- a/test/lit/source-map.wast +++ b/test/lit/source-map.wast @@ -13,7 +13,9 @@ (local.get $y) ) ;;@ src.cpp:50:1 - (return) + (then + (return) + ) ) ;;@ src.cpp:60:1 (call $foo @@ -35,8 +37,10 @@ ;; CHECK-NEXT: ;;@ src.cpp:40:1 ;; CHECK-NEXT: (local.get $y) ;; CHECK-NEXT: ) -;; CHECK-NEXT: ;;@ src.cpp:50:1 -;; CHECK-NEXT: (return) +;; CHECK-NEXT: (then +;; CHECK-NEXT: ;;@ src.cpp:50:1 +;; CHECK-NEXT: (return) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ;;@ src.cpp:60:1 ;; CHECK-NEXT: (call $foo diff --git a/test/lit/validation/bad-non-nullable-locals.wast b/test/lit/validation/bad-non-nullable-locals.wast index e34970fde03..558759aeb6a 100644 --- a/test/lit/validation/bad-non-nullable-locals.wast +++ b/test/lit/validation/bad-non-nullable-locals.wast @@ -49,10 +49,14 @@ (if (i32.const 1) ;; Superficially the order is right, but not really. - (local.set $x - (ref.func $helper) + (then + (local.set $x + (ref.func $helper) + ) + ) + (else + (local.get $x) ) - (local.get $x) ) ) diff --git a/test/lit/wasm-split/instrument-funcs.wast b/test/lit/wasm-split/instrument-funcs.wast index cf3ca4af7bd..2dbd578f30b 100644 --- a/test/lit/wasm-split/instrument-funcs.wast +++ b/test/lit/wasm-split/instrument-funcs.wast @@ -36,7 +36,7 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (global.get $baz_timestamp) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (block +;; CHECK-NEXT: (then ;; CHECK-NEXT: (global.set $monotonic_counter ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (global.get $monotonic_counter) @@ -59,7 +59,7 @@ ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (block +;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) diff --git a/test/lit/wasm-split/instrument-in-memory.wast b/test/lit/wasm-split/instrument-in-memory.wast index 3208b0b5de8..91433d424f3 100644 --- a/test/lit/wasm-split/instrument-in-memory.wast +++ b/test/lit/wasm-split/instrument-in-memory.wast @@ -49,7 +49,7 @@ ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (block +;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) diff --git a/test/lit/wasm-split/instrument-in-secondary-memory.wast b/test/lit/wasm-split/instrument-in-secondary-memory.wast index 26ac0ad18d9..18a8b0a4fdf 100644 --- a/test/lit/wasm-split/instrument-in-secondary-memory.wast +++ b/test/lit/wasm-split/instrument-in-secondary-memory.wast @@ -52,7 +52,7 @@ ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (block +;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store $0 align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) diff --git a/test/lit/wasm-split/instrument-memory64.wast b/test/lit/wasm-split/instrument-memory64.wast index ff2a56cadcd..65560d29e76 100644 --- a/test/lit/wasm-split/instrument-memory64.wast +++ b/test/lit/wasm-split/instrument-memory64.wast @@ -30,7 +30,7 @@ ;; CHECK-NEXT: (local.get $size) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (block +;; CHECK-NEXT: (then ;; CHECK-NEXT: (i64.store align=1 ;; CHECK-NEXT: (local.get $addr) ;; CHECK-NEXT: (i64.const {{.*}}) diff --git a/test/lit/wasm-split/jspi-secondary-export.wast b/test/lit/wasm-split/jspi-secondary-export.wast index 57fe849a9af..3729ec00e5e 100644 --- a/test/lit/wasm-split/jspi-secondary-export.wast +++ b/test/lit/wasm-split/jspi-secondary-export.wast @@ -62,7 +62,9 @@ ;; PRIMARY-NEXT: (i32.eqz ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) -;; PRIMARY-NEXT: (call $__load_secondary_module) +;; PRIMARY-NEXT: (then +;; PRIMARY-NEXT: (call $__load_secondary_module) +;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (call_indirect (type $0) ;; PRIMARY-NEXT: (local.get $0) diff --git a/test/lit/wasm-split/jspi.wast b/test/lit/wasm-split/jspi.wast index 340b2acec79..6866f02ffdd 100644 --- a/test/lit/wasm-split/jspi.wast +++ b/test/lit/wasm-split/jspi.wast @@ -43,7 +43,9 @@ ;; PRIMARY-NEXT: (i32.eqz ;; PRIMARY-NEXT: (global.get $global$1) ;; PRIMARY-NEXT: ) - ;; PRIMARY-NEXT: (call $__load_secondary_module) + ;; PRIMARY-NEXT: (then + ;; PRIMARY-NEXT: (call $__load_secondary_module) + ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: ) ;; PRIMARY-NEXT: (call_indirect (type $0) ;; PRIMARY-NEXT: (i32.const 0) diff --git a/test/lit/wasm-split/multi-memory-lowering-export.wast b/test/lit/wasm-split/multi-memory-lowering-export.wast index 0721ba2a462..152aaf72310 100644 --- a/test/lit/wasm-split/multi-memory-lowering-export.wast +++ b/test/lit/wasm-split/multi-memory-lowering-export.wast @@ -55,8 +55,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy @@ -100,8 +102,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $return_size) diff --git a/test/lit/wasm-split/multi-memory-lowering-import.wast b/test/lit/wasm-split/multi-memory-lowering-import.wast index d62609108c2..37ccfa16cb1 100644 --- a/test/lit/wasm-split/multi-memory-lowering-import.wast +++ b/test/lit/wasm-split/multi-memory-lowering-import.wast @@ -52,8 +52,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (memory.copy @@ -97,8 +99,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const -1) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (return -;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.const -1) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.get $return_size) diff --git a/test/lit/wat-kitchen-sink.wast b/test/lit/wat-kitchen-sink.wast index 05aedd51985..19915b13040 100644 --- a/test/lit/wat-kitchen-sink.wast +++ b/test/lit/wat-kitchen-sink.wast @@ -1024,8 +1024,12 @@ ;; CHECK: (func $if-else (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else @@ -1040,8 +1044,12 @@ ;; CHECK: (func $if-else-empty (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-empty @@ -1054,11 +1062,11 @@ ;; CHECK: (func $if-else-many (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -1078,11 +1086,15 @@ ;; CHECK: (func $if-else-single-nested (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (f32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (f64.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1100,11 +1112,15 @@ ;; CHECK: (func $if-else-folded-body (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (f32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (f32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1125,8 +1141,12 @@ ;; CHECK-NEXT: (block $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1142,7 +1162,9 @@ ;; CHECK: (func $if-no-else (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-no-else @@ -1155,8 +1177,12 @@ ;; CHECK: (func $if-else-result (type $1) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-result (result i32) @@ -1172,8 +1198,12 @@ ;; CHECK-NEXT: (block $l (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1189,8 +1219,12 @@ ;; CHECK: (func $if-else-folded (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-folded @@ -1208,8 +1242,12 @@ ;; CHECK: (func $if-else-folded-empty (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-folded-empty @@ -1223,11 +1261,11 @@ ;; CHECK: (func $if-else-folded-many (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (else ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: ) @@ -1252,11 +1290,15 @@ ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1282,8 +1324,12 @@ ;; CHECK-NEXT: (block $l ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1302,7 +1348,9 @@ ;; CHECK: (func $if-no-else-folded (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-no-else-folded @@ -1317,8 +1365,12 @@ ;; CHECK: (func $if-else-folded-result (type $1) (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-folded-result (result i32) @@ -1337,8 +1389,12 @@ ;; CHECK-NEXT: (block $l (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1357,15 +1413,23 @@ ;; CHECK: (func $if-else-atypical-condition (type $void) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) -;; CHECK-NEXT: (nop) -;; CHECK-NEXT: (nop) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (nop) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (nop) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.eqz ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) -;; CHECK-NEXT: (nop) -;; CHECK-NEXT: (nop) +;; CHECK-NEXT: (then +;; CHECK-NEXT: (nop) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (else +;; CHECK-NEXT: (nop) +;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) (func $if-else-atypical-condition @@ -1378,19 +1442,33 @@ ;; CHECK-NEXT: (if ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (i32.const 1) - ;; CHECK-NEXT: (i32.const 2) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (if (result i32) - ;; CHECK-NEXT: (i32.const 3) - ;; CHECK-NEXT: (i32.const 4) - ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 1) ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then ;; CHECK-NEXT: (if - ;; CHECK-NEXT: (i32.const 6) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: (if (result i32) + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (i32.const 5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (if + ;; CHECK-NEXT: (i32.const 6) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1429,8 +1507,12 @@ ;; CHECK-NEXT: (block $label ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $label) - ;; CHECK-NEXT: (br $label) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $label) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $label) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1447,11 +1529,15 @@ ;; CHECK-NEXT: (block $label (result i32) ;; CHECK-NEXT: (if (result i32) ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $label - ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $label + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (br $label - ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: (else + ;; CHECK-NEXT: (br $label + ;; CHECK-NEXT: (i32.const 2) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2264,7 +2350,9 @@ ;; CHECK-NEXT: (block $l_1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $l_1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $l_1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -2289,7 +2377,9 @@ ;; CHECK-NEXT: (block $l_1 ;; CHECK-NEXT: (if ;; CHECK-NEXT: (i32.const 0) - ;; CHECK-NEXT: (br $l_1) + ;; CHECK-NEXT: (then + ;; CHECK-NEXT: (br $l_1) + ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br $l_0) diff --git a/test/lld/basic_safe_stack.wat.out b/test/lld/basic_safe_stack.wat.out index 617463a6664..7d554cc8839 100644 --- a/test/lld/basic_safe_stack.wat.out +++ b/test/lld/basic_safe_stack.wat.out @@ -32,8 +32,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $1) + (then + (call $__handle_stack_overflow + (local.get $1) + ) ) ) (global.set $__stack_pointer @@ -66,8 +68,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $3) + (then + (call $__handle_stack_overflow + (local.get $3) + ) ) ) (global.set $__stack_pointer diff --git a/test/lld/em_asm_pthread.wasm.out b/test/lld/em_asm_pthread.wasm.out index 40f61e3a71a..3b51b896ab7 100644 --- a/test/lld/em_asm_pthread.wasm.out +++ b/test/lld/em_asm_pthread.wasm.out @@ -134,14 +134,16 @@ (i32.const 0) (i32.const 1) ) - (drop - (memory.atomic.wait32 - (i32.const 4032) - (i32.const 1) - (i64.const -1) + (then + (drop + (memory.atomic.wait32 + (i32.const 4032) + (i32.const 1) + (i64.const -1) + ) ) ) - (block + (else (memory.init $0 (i32.const 1024) (i32.const 0) diff --git a/test/lld/recursive_safe_stack.wat.out b/test/lld/recursive_safe_stack.wat.out index 32c79c31026..ad30dc776aa 100644 --- a/test/lld/recursive_safe_stack.wat.out +++ b/test/lld/recursive_safe_stack.wat.out @@ -46,8 +46,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $3) + (then + (call $__handle_stack_overflow + (local.get $3) + ) ) ) (global.set $global$0 @@ -85,8 +87,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $4) + (then + (call $__handle_stack_overflow + (local.get $4) + ) ) ) (global.set $global$0 @@ -121,8 +125,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $1) + (then + (call $__handle_stack_overflow + (local.get $1) + ) ) ) (global.set $global$0 @@ -159,8 +165,10 @@ (global.get $__stack_limit) ) ) - (call $__handle_stack_overflow - (local.get $2) + (then + (call $__handle_stack_overflow + (local.get $2) + ) ) ) (global.set $global$0 diff --git a/test/lld/safe_stack_standalone-wasm.wat.out b/test/lld/safe_stack_standalone-wasm.wat.out index 353e44b3acc..63d6c09d492 100644 --- a/test/lld/safe_stack_standalone-wasm.wat.out +++ b/test/lld/safe_stack_standalone-wasm.wat.out @@ -44,7 +44,9 @@ (global.get $__stack_limit) ) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$0 (local.get $3) @@ -81,7 +83,9 @@ (global.get $__stack_limit) ) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$0 (local.get $4) @@ -115,7 +119,9 @@ (global.get $__stack_limit) ) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$0 (local.get $1) @@ -151,7 +157,9 @@ (global.get $__stack_limit) ) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $global$0 (local.get $2) diff --git a/test/passes/O.bin.txt b/test/passes/O.bin.txt index 51610d92ff1..d35a4d11c64 100644 --- a/test/passes/O.bin.txt +++ b/test/passes/O.bin.txt @@ -10,15 +10,19 @@ (i64.eqz (local.get $0) ) - (i64.const 1) - (i64.mul - (call $0 - (i64.sub - (local.get $0) - (i64.const 1) + (then + (i64.const 1) + ) + (else + (i64.mul + (call $0 + (i64.sub + (local.get $0) + (i64.const 1) + ) ) + (local.get $0) ) - (local.get $0) ) ) ) @@ -27,15 +31,19 @@ (i64.eqz (local.get $0) ) - (i64.const 1) - (i64.mul - (call $1 - (i64.sub - (local.get $0) - (i64.const 1) + (then + (i64.const 1) + ) + (else + (i64.mul + (call $1 + (i64.sub + (local.get $0) + (i64.const 1) + ) ) + (local.get $0) ) - (local.get $0) ) ) ) @@ -54,7 +62,7 @@ (local.get $0) ) ) - (block + (then (local.set $1 (i64.mul (local.get $0) @@ -83,22 +91,24 @@ (local.get $0) (i64.const 2) ) - (loop $label$3 - (local.set $1 - (i64.mul - (local.get $0) - (local.get $1) + (then + (loop $label$3 + (local.set $1 + (i64.mul + (local.get $0) + (local.get $1) + ) ) - ) - (br_if $label$3 - (i64.gt_s - (local.tee $0 - (i64.sub - (local.get $0) - (i64.const 1) + (br_if $label$3 + (i64.gt_s + (local.tee $0 + (i64.sub + (local.get $0) + (i64.const 1) + ) ) + (i64.const 1) ) - (i64.const 1) ) ) ) diff --git a/test/passes/O3_low-memory-unused_metrics.txt b/test/passes/O3_low-memory-unused_metrics.txt index 3bdce292109..547eb1673ed 100644 --- a/test/passes/O3_low-memory-unused_metrics.txt +++ b/test/passes/O3_low-memory-unused_metrics.txt @@ -93,9 +93,11 @@ total (local.get $0) ) ) - (br_if $label$3 - (i32.load offset=4 - (local.get $0) + (then + (br_if $label$3 + (i32.load offset=4 + (local.get $0) + ) ) ) ) @@ -133,7 +135,9 @@ total (local.get $0) ) ) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (i32.store (local.get $2) @@ -164,7 +168,7 @@ total (local.get $3) (i32.const 42) ) - (block + (then (if (i32.eq (i32.load offset=24 @@ -172,7 +176,7 @@ total ) (i32.const 2) ) - (block + (then (i32.store offset=48 (local.get $0) (call $fimport$14 @@ -249,7 +253,7 @@ total ) ) ) - (block + (then (i32.store offset=20 (local.get $2) (i32.add @@ -362,21 +366,23 @@ total ) (i32.const 9) ) - (local.set $3 - (select - (i32.const 4) - (i32.shl - (i32.gt_s - (i32.load offset=136 - (local.get $2) + (then + (local.set $3 + (select + (i32.const 4) + (i32.shl + (i32.gt_s + (i32.load offset=136 + (local.get $2) + ) + (i32.const 1) ) - (i32.const 1) + (i32.const 2) + ) + (i32.lt_s + (local.get $4) + (i32.const 2) ) - (i32.const 2) - ) - (i32.lt_s - (local.get $4) - (i32.const 2) ) ) ) @@ -635,21 +641,23 @@ total ) (i32.const 9) ) - (local.set $3 - (select - (i32.const 4) - (i32.shl - (i32.gt_s - (i32.load offset=136 - (local.get $2) + (then + (local.set $3 + (select + (i32.const 4) + (i32.shl + (i32.gt_s + (i32.load offset=136 + (local.get $2) + ) + (i32.const 1) ) - (i32.const 1) + (i32.const 2) + ) + (i32.lt_s + (local.get $4) + (i32.const 2) ) - (i32.const 2) - ) - (i32.lt_s - (local.get $4) - (i32.const 2) ) ) ) @@ -711,7 +719,7 @@ total ) ) ) - (block (result i32) + (then (local.set $3 (i32.load offset=20 (local.get $3) @@ -771,20 +779,24 @@ total (local.get $2) ) ) - (local.get $3) + (else + (local.get $3) + ) ) ) - (i32.store offset=48 - (local.get $0) - (call $fimport$14 - (i32.load offset=48 - (local.get $0) - ) - (i32.load offset=8 - (local.get $2) - ) - (i32.load offset=20 - (local.get $2) + (then + (i32.store offset=48 + (local.get $0) + (call $fimport$14 + (i32.load offset=48 + (local.get $0) + ) + (i32.load offset=8 + (local.get $2) + ) + (i32.load offset=20 + (local.get $2) + ) ) ) ) @@ -929,7 +941,7 @@ total (i32.load offset=108 (local.get $2) ) - (block + (then (local.set $3 (i32.load offset=48 (local.get $0) @@ -1062,7 +1074,7 @@ total ) ) ) - (block + (then (local.set $3 (i32.load offset=20 (local.get $2) @@ -1091,7 +1103,7 @@ total ) (local.get $3) ) - (block + (then (block $label$30 (br_if $label$30 (i32.le_u @@ -1299,13 +1311,13 @@ total ) (local.get $6) ) - (block + (then (local.set $3 (local.get $4) ) (br $label$26) ) - (block + (else (local.set $3 (i32.load offset=20 (local.get $2) @@ -1374,7 +1386,7 @@ total (local.get $5) ) ) - (block + (then (i32.store offset=4 (local.get $2) (i32.const 73) @@ -1429,7 +1441,7 @@ total ) (local.get $3) ) - (block + (then (block $label$39 (br_if $label$39 (i32.le_u @@ -1625,7 +1637,7 @@ total ) (if (local.get $5) - (block + (then (local.set $3 (i32.load offset=20 (local.get $2) @@ -1633,7 +1645,7 @@ total ) (br $label$37) ) - (block + (else (local.set $3 (local.get $4) ) @@ -1742,7 +1754,7 @@ total ) (local.get $3) ) - (block + (then (block $label$47 (br_if $label$47 (i32.le_u @@ -1938,7 +1950,7 @@ total ) (if (local.get $5) - (block + (then (local.set $3 (i32.load offset=20 (local.get $2) @@ -1946,7 +1958,7 @@ total ) (br $label$45) ) - (block + (else (local.set $3 (local.get $4) ) @@ -2029,7 +2041,7 @@ total (local.get $2) ) ) - (block + (then (block $label$52 (br_if $label$52 (i32.ge_u @@ -2231,7 +2243,7 @@ total (i32.load offset=20 (local.get $2) ) - (block + (then (block $label$55 (br_if $label$55 (i32.eqz @@ -2375,7 +2387,7 @@ total ) (i32.const 666) ) - (block + (then (br_if $label$58 (i32.eqz (local.get $3) @@ -2424,7 +2436,7 @@ total ) (i32.const 3) ) - (block + (then (br_if $label$61 (i32.ne (local.get $3) @@ -2467,9 +2479,11 @@ total ) (i32.const 3) ) - (i32.store offset=4 - (local.get $2) - (i32.const 666) + (then + (i32.store offset=4 + (local.get $2) + (i32.const 666) + ) ) ) (if @@ -2479,7 +2493,7 @@ total (i32.const -3) ) ) - (block + (then (local.set $3 (i32.const 0) ) @@ -2509,7 +2523,7 @@ total (local.get $1) (i32.const 1) ) - (block + (then (call $fimport$30 (local.get $2) ) @@ -2710,7 +2724,7 @@ total (local.get $4) (i32.const 2) ) - (block + (then (i32.store offset=20 (local.get $2) (i32.add @@ -3115,11 +3129,13 @@ total ) (i32.const 0) ) - (i32.store offset=24 - (local.get $2) - (i32.sub - (i32.const 0) - (local.get $0) + (then + (i32.store offset=24 + (local.get $2) + (i32.sub + (i32.const 0) + (local.get $0) + ) ) ) ) diff --git a/test/passes/converge_O3_metrics.bin.txt b/test/passes/converge_O3_metrics.bin.txt index 54cc551be56..bd977b342de 100644 --- a/test/passes/converge_O3_metrics.bin.txt +++ b/test/passes/converge_O3_metrics.bin.txt @@ -92,19 +92,21 @@ total (i32.const 10888) ) ) - (block $label$2 - (br_if $label$2 - (call_indirect (type $0) - (local.get $1) - (i32.const 10888) - (local.get $0) - (i32.add - (i32.load offset=48 - (i32.load - (local.get $1) + (then + (block $label$2 + (br_if $label$2 + (call_indirect (type $0) + (local.get $1) + (i32.const 10888) + (local.get $0) + (i32.add + (i32.load offset=48 + (i32.load + (local.get $1) + ) ) + (i32.const 8) ) - (i32.const 8) ) ) ) @@ -133,17 +135,21 @@ total (i32.const 24) ) ) - (i32.const 0) - (call_indirect (type $1) - (local.get $0) - (i32.const 10) - (i32.add - (i32.load offset=52 - (i32.load - (local.get $0) + (then + (i32.const 0) + ) + (else + (call_indirect (type $1) + (local.get $0) + (i32.const 10) + (i32.add + (i32.load offset=52 + (i32.load + (local.get $0) + ) ) + (i32.const 422) ) - (i32.const 422) ) ) ) @@ -317,19 +323,21 @@ total (i32.const 10888) ) ) - (block $label$2 - (br_if $label$2 - (call_indirect (type $0) - (local.get $1) - (i32.const 10888) - (local.get $0) - (i32.add - (i32.load offset=48 - (i32.load - (local.get $1) + (then + (block $label$2 + (br_if $label$2 + (call_indirect (type $0) + (local.get $1) + (i32.const 10888) + (local.get $0) + (i32.add + (i32.load offset=48 + (i32.load + (local.get $1) + ) ) + (i32.const 8) ) - (i32.const 8) ) ) ) @@ -358,17 +366,21 @@ total (i32.const 24) ) ) - (i32.const 0) - (call_indirect (type $1) - (local.get $0) - (i32.const 10) - (i32.add - (i32.load offset=52 - (i32.load - (local.get $0) + (then + (i32.const 0) + ) + (else + (call_indirect (type $1) + (local.get $0) + (i32.const 10) + (i32.add + (i32.load offset=52 + (i32.load + (local.get $0) + ) ) + (i32.const 422) ) - (i32.const 422) ) ) ) @@ -537,19 +549,21 @@ total (i32.const 10888) ) ) - (block $label$2 - (br_if $label$2 - (call_indirect (type $0) - (local.get $1) - (i32.const 10888) - (local.get $0) - (i32.add - (i32.load offset=48 - (i32.load - (local.get $1) + (then + (block $label$2 + (br_if $label$2 + (call_indirect (type $0) + (local.get $1) + (i32.const 10888) + (local.get $0) + (i32.add + (i32.load offset=48 + (i32.load + (local.get $1) + ) ) + (i32.const 8) ) - (i32.const 8) ) ) ) @@ -578,17 +592,21 @@ total (i32.const 24) ) ) - (i32.const 0) - (call_indirect (type $1) - (local.get $0) - (i32.const 10) - (i32.add - (i32.load offset=52 - (i32.load - (local.get $0) + (then + (i32.const 0) + ) + (else + (call_indirect (type $1) + (local.get $0) + (i32.const 10) + (i32.add + (i32.load offset=52 + (i32.load + (local.get $0) + ) ) + (i32.const 422) ) - (i32.const 422) ) ) ) diff --git a/test/passes/fannkuch3_manyopts_dwarf.bin.txt b/test/passes/fannkuch3_manyopts_dwarf.bin.txt index 1df0db5063d..caaced4ef9b 100644 --- a/test/passes/fannkuch3_manyopts_dwarf.bin.txt +++ b/test/passes/fannkuch3_manyopts_dwarf.bin.txt @@ -4788,7 +4788,7 @@ file_names[ 4]: ;; code offset: 0x4a (i32.const 0) ) - (block + (then ;; code offset: 0x4f (loop $label$4 ;; code offset: 0x5b @@ -4899,52 +4899,54 @@ file_names[ 4]: ;; code offset: 0x9c (i32.const 1) ) - ;; code offset: 0xa1 - (loop $label$7 - ;; code offset: 0xb2 - (i32.store - ;; code offset: 0xaf - (i32.add - ;; code offset: 0xa3 - (local.get $9) - ;; code offset: 0xae - (i32.shl - ;; code offset: 0xaa - (local.tee $1 - ;; code offset: 0xa9 - (i32.sub - ;; code offset: 0xa5 - (local.get $2) - ;; code offset: 0xa7 - (i32.const 1) + (then + ;; code offset: 0xa1 + (loop $label$7 + ;; code offset: 0xb2 + (i32.store + ;; code offset: 0xaf + (i32.add + ;; code offset: 0xa3 + (local.get $9) + ;; code offset: 0xae + (i32.shl + ;; code offset: 0xaa + (local.tee $1 + ;; code offset: 0xa9 + (i32.sub + ;; code offset: 0xa5 + (local.get $2) + ;; code offset: 0xa7 + (i32.const 1) + ) ) + ;; code offset: 0xac + (i32.const 2) ) - ;; code offset: 0xac + ) + ;; code offset: 0xb0 + (local.get $2) + ) + ;; code offset: 0xba + (local.set $0 + ;; code offset: 0xb9 + (i32.gt_s + ;; code offset: 0xb5 + (local.get $2) + ;; code offset: 0xb7 (i32.const 2) ) ) - ;; code offset: 0xb0 - (local.get $2) - ) - ;; code offset: 0xba - (local.set $0 - ;; code offset: 0xb9 - (i32.gt_s - ;; code offset: 0xb5 - (local.get $2) - ;; code offset: 0xb7 - (i32.const 2) + ;; code offset: 0xbe + (local.set $2 + ;; code offset: 0xbc + (local.get $1) + ) + ;; code offset: 0xc2 + (br_if $label$7 + ;; code offset: 0xc0 + (local.get $0) ) - ) - ;; code offset: 0xbe - (local.set $2 - ;; code offset: 0xbc - (local.get $1) - ) - ;; code offset: 0xc2 - (br_if $label$7 - ;; code offset: 0xc0 - (local.get $0) ) ) ) @@ -5016,7 +5018,7 @@ file_names[ 4]: ;; code offset: 0xf7 (i32.const 3) ) - (block + (then ;; code offset: 0x101 (local.set $1 ;; code offset: 0x100 @@ -5207,7 +5209,7 @@ file_names[ 4]: ;; code offset: 0x186 (i32.const 0) ) - (block + (then ;; code offset: 0x18b (loop $label$14 ;; code offset: 0x1a5 @@ -5419,52 +5421,54 @@ file_names[ 4]: ;; code offset: 0x225 (i32.const 2) ) - ;; code offset: 0x22a - (loop $label$17 - ;; code offset: 0x23b - (i32.store - ;; code offset: 0x238 - (i32.add - ;; code offset: 0x22c - (local.get $9) - ;; code offset: 0x237 - (i32.shl - ;; code offset: 0x233 - (local.tee $1 - ;; code offset: 0x232 - (i32.sub - ;; code offset: 0x22e - (local.get $2) - ;; code offset: 0x230 - (i32.const 1) + (then + ;; code offset: 0x22a + (loop $label$17 + ;; code offset: 0x23b + (i32.store + ;; code offset: 0x238 + (i32.add + ;; code offset: 0x22c + (local.get $9) + ;; code offset: 0x237 + (i32.shl + ;; code offset: 0x233 + (local.tee $1 + ;; code offset: 0x232 + (i32.sub + ;; code offset: 0x22e + (local.get $2) + ;; code offset: 0x230 + (i32.const 1) + ) ) + ;; code offset: 0x235 + (i32.const 2) ) - ;; code offset: 0x235 + ) + ;; code offset: 0x239 + (local.get $2) + ) + ;; code offset: 0x243 + (local.set $0 + ;; code offset: 0x242 + (i32.gt_s + ;; code offset: 0x23e + (local.get $2) + ;; code offset: 0x240 (i32.const 2) ) ) - ;; code offset: 0x239 - (local.get $2) - ) - ;; code offset: 0x243 - (local.set $0 - ;; code offset: 0x242 - (i32.gt_s - ;; code offset: 0x23e - (local.get $2) - ;; code offset: 0x240 - (i32.const 2) + ;; code offset: 0x247 + (local.set $2 + ;; code offset: 0x245 + (local.get $1) + ) + ;; code offset: 0x24b + (br_if $label$17 + ;; code offset: 0x249 + (local.get $0) ) - ) - ;; code offset: 0x247 - (local.set $2 - ;; code offset: 0x245 - (local.get $1) - ) - ;; code offset: 0x24b - (br_if $label$17 - ;; code offset: 0x249 - (local.get $0) ) ) ) @@ -5526,7 +5530,7 @@ file_names[ 4]: ;; code offset: 0x278 (i32.const 3) ) - (block + (then ;; code offset: 0x282 (local.set $1 ;; code offset: 0x281 @@ -5717,7 +5721,7 @@ file_names[ 4]: ;; code offset: 0x307 (i32.const 0) ) - (block + (then ;; code offset: 0x30c (loop $label$24 ;; code offset: 0x326 @@ -5916,23 +5920,25 @@ file_names[ 4]: ;; code offset: 0x3aa (i32.const 2) ) - ;; code offset: 0x3bb - (br_if $label$2 - ;; code offset: 0x3ba - (i32.gt_s - ;; code offset: 0x3b6 - (local.tee $3 - ;; code offset: 0x3b4 - (call $atoi - ;; code offset: 0x3b1 - (i32.load offset=4 - ;; code offset: 0x3af - (local.get $1) + (then + ;; code offset: 0x3bb + (br_if $label$2 + ;; code offset: 0x3ba + (i32.gt_s + ;; code offset: 0x3b6 + (local.tee $3 + ;; code offset: 0x3b4 + (call $atoi + ;; code offset: 0x3b1 + (i32.load offset=4 + ;; code offset: 0x3af + (local.get $1) + ) ) ) + ;; code offset: 0x3b8 + (i32.const 0) ) - ;; code offset: 0x3b8 - (i32.const 0) ) ) ) @@ -5961,7 +5967,7 @@ file_names[ 4]: ;; code offset: 0x3cd (i32.const 1) ) - (block + (then ;; code offset: 0x3d7 (local.set $2 ;; code offset: 0x3d6 @@ -6079,7 +6085,7 @@ file_names[ 4]: ;; code offset: 0x42b (i32.const 0) ) - (block + (then ;; code offset: 0x430 (loop $label$10 ;; code offset: 0x43c @@ -6230,52 +6236,54 @@ file_names[ 4]: ;; code offset: 0x49c (i32.const 1) ) - ;; code offset: 0x4a1 - (loop $label$14 - ;; code offset: 0x4b2 - (i32.store - ;; code offset: 0x4af - (i32.add - ;; code offset: 0x4a3 - (local.get $5) - ;; code offset: 0x4ae - (i32.shl - ;; code offset: 0x4aa - (local.tee $0 - ;; code offset: 0x4a9 - (i32.sub - ;; code offset: 0x4a5 - (local.get $2) - ;; code offset: 0x4a7 - (i32.const 1) + (then + ;; code offset: 0x4a1 + (loop $label$14 + ;; code offset: 0x4b2 + (i32.store + ;; code offset: 0x4af + (i32.add + ;; code offset: 0x4a3 + (local.get $5) + ;; code offset: 0x4ae + (i32.shl + ;; code offset: 0x4aa + (local.tee $0 + ;; code offset: 0x4a9 + (i32.sub + ;; code offset: 0x4a5 + (local.get $2) + ;; code offset: 0x4a7 + (i32.const 1) + ) ) + ;; code offset: 0x4ac + (i32.const 2) ) - ;; code offset: 0x4ac + ) + ;; code offset: 0x4b0 + (local.get $2) + ) + ;; code offset: 0x4ba + (local.set $7 + ;; code offset: 0x4b9 + (i32.gt_s + ;; code offset: 0x4b5 + (local.get $2) + ;; code offset: 0x4b7 (i32.const 2) ) ) - ;; code offset: 0x4b0 - (local.get $2) - ) - ;; code offset: 0x4ba - (local.set $7 - ;; code offset: 0x4b9 - (i32.gt_s - ;; code offset: 0x4b5 - (local.get $2) - ;; code offset: 0x4b7 - (i32.const 2) + ;; code offset: 0x4be + (local.set $2 + ;; code offset: 0x4bc + (local.get $0) + ) + ;; code offset: 0x4c2 + (br_if $label$14 + ;; code offset: 0x4c0 + (local.get $7) ) - ) - ;; code offset: 0x4be - (local.set $2 - ;; code offset: 0x4bc - (local.get $0) - ) - ;; code offset: 0x4c2 - (br_if $label$14 - ;; code offset: 0x4c0 - (local.get $7) ) ) ) @@ -6323,7 +6331,7 @@ file_names[ 4]: ;; code offset: 0x4e3 (i32.const 0) ) - (block + (then ;; code offset: 0x4e8 (loop $label$17 ;; code offset: 0x502 @@ -6439,7 +6447,7 @@ file_names[ 4]: ;; code offset: 0x538 (i32.const 1) ) - (block + (then ;; code offset: 0x547 (br_if $label$15 ;; code offset: 0x546 @@ -6491,52 +6499,54 @@ file_names[ 4]: ;; code offset: 0x55e (i32.const 1) ) - ;; code offset: 0x563 - (loop $label$21 - ;; code offset: 0x574 - (i32.store - ;; code offset: 0x571 - (i32.add - ;; code offset: 0x565 - (local.get $5) - ;; code offset: 0x570 - (i32.shl - ;; code offset: 0x56c - (local.tee $0 - ;; code offset: 0x56b - (i32.sub - ;; code offset: 0x567 - (local.get $2) - ;; code offset: 0x569 - (i32.const 1) + (then + ;; code offset: 0x563 + (loop $label$21 + ;; code offset: 0x574 + (i32.store + ;; code offset: 0x571 + (i32.add + ;; code offset: 0x565 + (local.get $5) + ;; code offset: 0x570 + (i32.shl + ;; code offset: 0x56c + (local.tee $0 + ;; code offset: 0x56b + (i32.sub + ;; code offset: 0x567 + (local.get $2) + ;; code offset: 0x569 + (i32.const 1) + ) ) + ;; code offset: 0x56e + (i32.const 2) ) - ;; code offset: 0x56e + ) + ;; code offset: 0x572 + (local.get $2) + ) + ;; code offset: 0x57c + (local.set $7 + ;; code offset: 0x57b + (i32.gt_s + ;; code offset: 0x577 + (local.get $2) + ;; code offset: 0x579 (i32.const 2) ) ) - ;; code offset: 0x572 - (local.get $2) - ) - ;; code offset: 0x57c - (local.set $7 - ;; code offset: 0x57b - (i32.gt_s - ;; code offset: 0x577 - (local.get $2) - ;; code offset: 0x579 - (i32.const 2) + ;; code offset: 0x580 + (local.set $2 + ;; code offset: 0x57e + (local.get $0) + ) + ;; code offset: 0x584 + (br_if $label$21 + ;; code offset: 0x582 + (local.get $7) ) - ) - ;; code offset: 0x580 - (local.set $2 - ;; code offset: 0x57e - (local.get $0) - ) - ;; code offset: 0x584 - (br_if $label$21 - ;; code offset: 0x582 - (local.get $7) ) ) ) @@ -6584,7 +6594,7 @@ file_names[ 4]: ;; code offset: 0x5a5 (i32.const 0) ) - (block + (then ;; code offset: 0x5aa (loop $label$24 ;; code offset: 0x5c4 @@ -6700,7 +6710,7 @@ file_names[ 4]: ;; code offset: 0x5fa (i32.const 1) ) - (block + (then ;; code offset: 0x609 (br_if $label$22 ;; code offset: 0x608 @@ -6755,55 +6765,57 @@ file_names[ 4]: (if ;; code offset: 0x625 (local.get $4) - ;; code offset: 0x629 - (loop $label$27 - ;; code offset: 0x62f - (local.set $1 - ;; code offset: 0x62d - (call $fannkuch_worker\28void*\29 - ;; code offset: 0x62b - (local.get $4) + (then + ;; code offset: 0x629 + (loop $label$27 + ;; code offset: 0x62f + (local.set $1 + ;; code offset: 0x62d + (call $fannkuch_worker\28void*\29 + ;; code offset: 0x62b + (local.get $4) + ) ) - ) - ;; code offset: 0x636 - (local.set $2 - ;; code offset: 0x633 - (i32.load offset=8 - ;; code offset: 0x631 + ;; code offset: 0x636 + (local.set $2 + ;; code offset: 0x633 + (i32.load offset=8 + ;; code offset: 0x631 + (local.get $4) + ) + ) + ;; code offset: 0x63a + (call $free + ;; code offset: 0x638 (local.get $4) ) - ) - ;; code offset: 0x63a - (call $free - ;; code offset: 0x638 - (local.get $4) - ) - ;; code offset: 0x646 - (local.set $0 - ;; code offset: 0x645 - (select - ;; code offset: 0x63c - (local.get $1) - ;; code offset: 0x63e - (local.get $0) - ;; code offset: 0x644 - (i32.lt_s - ;; code offset: 0x640 - (local.get $0) - ;; code offset: 0x642 + ;; code offset: 0x646 + (local.set $0 + ;; code offset: 0x645 + (select + ;; code offset: 0x63c (local.get $1) + ;; code offset: 0x63e + (local.get $0) + ;; code offset: 0x644 + (i32.lt_s + ;; code offset: 0x640 + (local.get $0) + ;; code offset: 0x642 + (local.get $1) + ) ) ) - ) - ;; code offset: 0x64a - (local.set $4 - ;; code offset: 0x648 - (local.get $2) - ) - ;; code offset: 0x64e - (br_if $label$27 - ;; code offset: 0x64c - (local.get $2) + ;; code offset: 0x64a + (local.set $4 + ;; code offset: 0x648 + (local.get $2) + ) + ;; code offset: 0x64e + (br_if $label$27 + ;; code offset: 0x64c + (local.get $2) + ) ) ) ) diff --git a/test/passes/func-metrics.txt b/test/passes/func-metrics.txt index 8c2812bd2cc..69b89557c32 100644 --- a/test/passes/func-metrics.txt +++ b/test/passes/func-metrics.txt @@ -57,34 +57,48 @@ func: ifs (block $block0 (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) - (drop - (i32.const 6) + (else + (drop + (i32.const 6) + ) ) ) (drop (i32.eq (if (result i32) (i32.const 4) - (i32.const 5) - (i32.const 6) + (then + (i32.const 5) + ) + (else + (i32.const 6) + ) ) (i32.const 177) ) diff --git a/test/passes/func-metrics.wast b/test/passes/func-metrics.wast index e95d819d93f..3b7f79b13a8 100644 --- a/test/passes/func-metrics.wast +++ b/test/passes/func-metrics.wast @@ -16,34 +16,48 @@ (block $block0 (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) - (drop - (i32.const 6) + (else + (drop + (i32.const 6) + ) ) ) (drop (i32.eq (if (result i32) (i32.const 4) - (i32.const 5) - (i32.const 6) + (then + (i32.const 5) + ) + (else + (i32.const 6) + ) ) (i32.const 177) ) diff --git a/test/passes/interesting-pass-mix.txt b/test/passes/interesting-pass-mix.txt index 2c13877db84..ae6252b7710 100644 --- a/test/passes/interesting-pass-mix.txt +++ b/test/passes/interesting-pass-mix.txt @@ -34,23 +34,29 @@ (func $loops (param $0 i32) (if (local.get $0) - (loop $shape$2$continue - (call $trivial) - (br $shape$2$continue) + (then + (loop $shape$2$continue + (call $trivial) + (br $shape$2$continue) + ) ) ) (loop $shape$4$continue (call $trivial) (if (local.get $0) - (br $shape$4$continue) + (then + (br $shape$4$continue) + ) ) ) (loop $shape$6$continue (call $trivial) (if (local.get $0) - (br $shape$6$continue) + (then + (br $shape$6$continue) + ) ) ) ) @@ -64,7 +70,7 @@ (i32.eqz (local.get $0) ) - (block + (then (call $unreachable (i32.const 5) ) @@ -73,14 +79,16 @@ ) (if (local.get $0) - (block + (then (call $unreachable (i32.const 1) ) (unreachable) ) - (call $unreachable - (i32.const 3) + (else + (call $unreachable + (i32.const 3) + ) ) ) ) @@ -104,8 +112,10 @@ (i32.eqz (local.get $0) ) - (call $before-and-after - (i32.const 5) + (then + (call $before-and-after + (i32.const 5) + ) ) ) (call $before-and-after @@ -123,7 +133,9 @@ ) (if (local.get $0) - (br $shape$4$continue) + (then + (br $shape$4$continue) + ) ) ) (call $before-and-after @@ -134,8 +146,10 @@ ) (if (local.get $0) - (call $before-and-after - (i32.const 12) + (then + (call $before-and-after + (i32.const 12) + ) ) ) (call $before-and-after @@ -143,17 +157,23 @@ ) (if (local.get $0) - (call $before-and-after - (i32.const 14) + (then + (call $before-and-after + (i32.const 14) + ) ) - (call $before-and-after - (i32.const 15) + (else + (call $before-and-after + (i32.const 15) + ) ) ) (if (local.get $0) - (call $before-and-after - (i32.const 16) + (then + (call $before-and-after + (i32.const 16) + ) ) ) (call $before-and-after @@ -215,12 +235,18 @@ (block $block$2$break (if (local.get $0) - (call $if-br-wat - (i32.const 1) + (then + (call $if-br-wat + (i32.const 1) + ) ) - (if - (local.get $0) - (br $block$2$break) + (else + (if + (local.get $0) + (then + (br $block$2$break) + ) + ) ) ) (call $if-br-wat diff --git a/test/passes/interesting-pass-mix.wast b/test/passes/interesting-pass-mix.wast index fba9e7c9e2e..c1f9bb8f24c 100644 --- a/test/passes/interesting-pass-mix.wast +++ b/test/passes/interesting-pass-mix.wast @@ -15,23 +15,33 @@ (func $ifs (param $x i32) (result i32) (if (local.get $x) - (if - (local.get $x) - (return (i32.const 2)) - (return (i32.const 3)) + (then + (if + (local.get $x) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 3)) + ) + ) ) ) (if (local.get $x) - (return (i32.const 4)) + (then + (return (i32.const 4)) + ) ) (return (i32.const 5)) ) (func $loops (param $x i32) (if (local.get $x) - (loop $top - (call $trivial) - (br $top) + (then + (loop $top + (call $trivial) + (br $top) + ) ) ) (loop $top2 @@ -40,7 +50,7 @@ ) (loop $top3 (call $trivial) - (if (local.get $x) (br $top3)) + (if (local.get $x) (then (br $top3))) ) ) (func $br-out (param $x i32) @@ -51,16 +61,22 @@ ) (func $unreachable (param $x i32) (if (local.get $x) - (if (local.get $x) - (block - (call $unreachable (i32.const 1)) - (unreachable) - (call $unreachable (i32.const 2)) - ) - (block - (call $unreachable (i32.const 3)) - (return) - (call $unreachable (i32.const 4)) + (then + (if (local.get $x) + (then + (block + (call $unreachable (i32.const 1)) + (unreachable) + (call $unreachable (i32.const 2)) + ) + ) + (else + (block + (call $unreachable (i32.const 3)) + (return) + (call $unreachable (i32.const 4)) + ) + ) ) ) ) @@ -97,16 +113,24 @@ ) (call $before-and-after (i32.const 11)) (if (local.get $x) - (call $before-and-after (i32.const 12)) + (then + (call $before-and-after (i32.const 12)) + ) ) (call $before-and-after (i32.const 13)) (if (local.get $x) - (call $before-and-after (i32.const 14)) - (call $before-and-after (i32.const 15)) + (then + (call $before-and-after (i32.const 14)) + ) + (else + (call $before-and-after (i32.const 15)) + ) ) (if (local.get $x) - (block - (call $before-and-after (i32.const 16)) + (then + (block + (call $before-and-after (i32.const 16)) + ) ) ) (call $before-and-after (i32.const 17)) @@ -148,8 +172,12 @@ ) (func $no-return (if (i32.const 1) - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (drop (i32.const 2)) + ) + (else + (drop (i32.const 3)) + ) ) ) (func $if-br-wat (param $x i32) @@ -159,12 +187,18 @@ (block $label$2 (if (local.get $x) - (call $if-br-wat - (i32.const 1) + (then + (call $if-br-wat + (i32.const 1) + ) ) - (if - (local.get $x) - (br $label$2) ;; waka + (else + (if + (local.get $x) + (then + (br $label$2) ;; waka + ) + ) ) ) (call $if-br-wat diff --git a/test/passes/licm.txt b/test/passes/licm.txt index 3c038207ba2..83edd78c3d2 100644 --- a/test/passes/licm.txt +++ b/test/passes/licm.txt @@ -444,8 +444,10 @@ (func $conditional (if (i32.const 0) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) ) (loop $loop @@ -459,8 +461,10 @@ (loop $loop (if (call $conditional1) - (drop - (i32.const 10) + (then + (drop + (i32.const 10) + ) ) ) (br_if $loop diff --git a/test/passes/licm.wast b/test/passes/licm.wast index c4fbfcd99a0..0ec3632beb7 100644 --- a/test/passes/licm.wast +++ b/test/passes/licm.wast @@ -245,7 +245,9 @@ (func $conditional (loop $loop (if (i32.const 0) - (drop (i32.const 10)) ;; cannot be hoisted - might never be reached + (then + (drop (i32.const 10)) ;; cannot be hoisted - might never be reached + ) ) (br_if $loop (i32.const 1)) ) @@ -253,7 +255,9 @@ (func $conditional1 (result i32) (loop $loop (if (call $conditional1) - (drop (i32.const 10)) ;; cannot be hoisted - might never be reached + (then + (drop (i32.const 10)) ;; cannot be hoisted - might never be reached + ) ;; also anyhow the whole if also cannot, due to the call ) (br_if $loop (i32.const 1)) diff --git a/test/passes/log-execution.txt b/test/passes/log-execution.txt index fdc5332804e..35ca7411ef8 100644 --- a/test/passes/log-execution.txt +++ b/test/passes/log-execution.txt @@ -23,7 +23,9 @@ (block (if (i32.const 0) - (nop) + (then + (nop) + ) ) (block (call $log_execution @@ -51,11 +53,13 @@ ) (if (call $intt) - (loop $y - (call $log_execution - (i32.const 5) + (then + (loop $y + (call $log_execution + (i32.const 5) + ) + (call $loops) ) - (call $loops) ) ) (block diff --git a/test/passes/log-execution.wast b/test/passes/log-execution.wast index f7448408aea..b84d7ac1f40 100644 --- a/test/passes/log-execution.wast +++ b/test/passes/log-execution.wast @@ -7,7 +7,7 @@ (i32.const 10) ) (func $workk - (if (i32.const 0) (nop)) + (if (i32.const 0) (then (nop))) (drop (i32.const 1)) ) (func $loops @@ -16,8 +16,10 @@ (br $x) ) (if (call $intt) - (loop $y - (call $loops) + (then + (loop $y + (call $loops) + ) ) ) (loop diff --git a/test/passes/merge-blocks.txt b/test/passes/merge-blocks.txt index b1037478b54..86d97af4b01 100644 --- a/test/passes/merge-blocks.txt +++ b/test/passes/merge-blocks.txt @@ -49,7 +49,7 @@ (block $x (if (i32.const 100) - (block + (then (drop (i32.const 1) ) @@ -121,7 +121,7 @@ (block $label (if (i32.const 1) - (block + (then (drop (i32.const 2) ) @@ -136,7 +136,7 @@ (block $label (if (br $label) - (block + (then (drop (i32.const 2) ) @@ -151,7 +151,9 @@ (block $label (if (i32.const 1) - (br $label) + (then + (br $label) + ) ) ) ) @@ -159,9 +161,13 @@ (block $label (if (i32.const 1) - (br $label) - (drop - (i32.const 3) + (then + (br $label) + ) + (else + (drop + (i32.const 3) + ) ) ) ) @@ -170,10 +176,14 @@ (block $label (if (i32.const 1) - (drop - (i32.const 3) + (then + (drop + (i32.const 3) + ) + ) + (else + (br $label) ) - (br $label) ) ) ) @@ -181,8 +191,12 @@ (block $label (if (i32.const 1) - (br $label) - (br $label) + (then + (br $label) + ) + (else + (br $label) + ) ) ) ) @@ -190,11 +204,15 @@ (block $label (if (i32.const 1) - (drop - (i32.const 2) + (then + (drop + (i32.const 2) + ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) ) @@ -203,8 +221,12 @@ (block $label (result i32) (if (result i32) (i32.const 1) - (i32.const 2) - (i32.const 3) + (then + (i32.const 2) + ) + (else + (i32.const 3) + ) ) ) ) @@ -217,7 +239,9 @@ (block $label$4 (unreachable) ) - (br $label$3) + (then + (br $label$3) + ) ) ) (unreachable) @@ -229,24 +253,34 @@ (block $label$1 (if (unreachable) - (nop) - (unreachable) + (then + (nop) + ) + (else + (unreachable) + ) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) - (nop) - (block + (then + (nop) + ) + (else (drop (loop $label$3 (result i64) (br_if $label$3 (block $label$4 (result i32) (if (i32.const 0) - (unreachable) - (unreachable) + (then + (unreachable) + ) + (else + (unreachable) + ) ) ) ) diff --git a/test/passes/merge-blocks.wast b/test/passes/merge-blocks.wast index 55996420e8d..749797ce67e 100644 --- a/test/passes/merge-blocks.wast +++ b/test/passes/merge-blocks.wast @@ -44,9 +44,11 @@ (drop (block $x (result i32) (if (i32.const 100) - (block - (drop (br_if $x (i32.const 1) (i32.const 2))) - (nop) + (then + (block + (drop (br_if $x (i32.const 1) (i32.const 2))) + (nop) + ) ) ) (i32.const 0) @@ -113,9 +115,11 @@ (block $label (if (i32.const 1) - (block - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (block + (drop (i32.const 2)) + (drop (i32.const 3)) + ) ) ) ) @@ -124,9 +128,11 @@ (block $label (if (br $label) ;; use outside of arm - (block - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (block + (drop (i32.const 2)) + (drop (i32.const 3)) + ) ) ) ) @@ -135,7 +141,9 @@ (block $label (if (i32.const 1) - (br $label) + (then + (br $label) + ) ) ) ) @@ -143,8 +151,12 @@ (block $label (if (i32.const 1) - (br $label) - (drop (i32.const 3)) + (then + (br $label) + ) + (else + (drop (i32.const 3)) + ) ) ) ) @@ -152,8 +164,12 @@ (block $label (if (i32.const 1) - (drop (i32.const 3)) - (br $label) + (then + (drop (i32.const 3)) + ) + (else + (br $label) + ) ) ) ) @@ -161,8 +177,12 @@ (block $label (if (i32.const 1) - (br $label) - (br $label) + (then + (br $label) + ) + (else + (br $label) + ) ) ) ) @@ -170,8 +190,12 @@ (block $label (if (i32.const 1) - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (drop (i32.const 2)) + ) + (else + (drop (i32.const 3)) + ) ) ) ) @@ -179,8 +203,12 @@ (block $label (result i32) (if (result i32) (i32.const 1) - (i32.const 2) - (i32.const 3) + (then + (i32.const 2) + ) + (else + (i32.const 3) + ) ) ) ) @@ -193,7 +221,9 @@ (block $label$4 (unreachable) ) - (br $label$3) + (then + (br $label$3) + ) ) ) (unreachable) @@ -205,31 +235,43 @@ (block $label$1 (if (unreachable) ;; unreachable condition - (nop) - (unreachable) + (then + (nop) + ) + (else + (unreachable) + ) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) - (nop) - (block - (drop - (loop $label$3 (result i64) - (br_if $label$3 - (block $label$4 (result i32) - (if - (i32.const 0) - (unreachable) - (unreachable) + (then + (nop) + ) + (else + (block + (drop + (loop $label$3 (result i64) + (br_if $label$3 + (block $label$4 (result i32) + (if + (i32.const 0) + (then + (unreachable) + ) + (else + (unreachable) + ) + ) ) ) + (i64.const -9) ) - (i64.const -9) ) + (unreachable) ) - (unreachable) ) ) ) diff --git a/test/passes/merge-locals_all-features.txt b/test/passes/merge-locals_all-features.txt index e9fd7acb021..18b552e5d81 100644 --- a/test/passes/merge-locals_all-features.txt +++ b/test/passes/merge-locals_all-features.txt @@ -11,8 +11,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $x) @@ -23,8 +27,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $x) @@ -35,8 +43,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (drop @@ -50,8 +62,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (drop @@ -68,17 +84,25 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (if (i32.const 300) - (local.set $y - (i32.const 400) + (then + (local.set $y + (i32.const 400) + ) ) - (drop - (local.get $x) + (else + (drop + (local.get $x) + ) ) ) (i32.const 500) @@ -89,17 +113,25 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 200) + (then + (i32.const 100) + ) + (else + (i32.const 200) + ) ) ) (if (i32.const 300) - (local.set $y - (i32.const 400) + (then + (local.set $y + (i32.const 400) + ) ) - (drop - (local.get $y) + (else + (drop + (local.get $y) + ) ) ) (local.get $y) @@ -110,8 +142,12 @@ (local.tee $x (local.get $x) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $y) @@ -124,8 +160,12 @@ (local.get $x) ) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $y) @@ -149,8 +189,10 @@ ) (if (local.get $var$1) - (local.set $var$2 - (i32.const 1) + (then + (local.set $var$2 + (i32.const 1) + ) ) ) (drop @@ -163,8 +205,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $y) + (then + (i32.const 100) + ) + (else + (local.get $y) + ) ) ) (drop @@ -172,8 +218,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -186,8 +234,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) ) @@ -197,8 +249,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.set $y @@ -214,8 +270,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $y) + (then + (i32.const 100) + ) + (else + (local.get $y) + ) ) ) (local.set $x @@ -226,8 +286,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -240,8 +302,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (local.set $x @@ -252,8 +318,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -266,14 +334,20 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (if (i32.const 1) - (local.set $x - (i32.const 300) + (then + (local.set $x + (i32.const 300) + ) ) ) (drop @@ -281,8 +355,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -295,14 +371,20 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (if (i32.const 1) - (local.set $x - (i32.const 300) + (then + (local.set $x + (i32.const 300) + ) ) ) (drop @@ -310,8 +392,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -324,20 +408,28 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (if (i32.const 1) - (drop - (local.get $x) + (then + (drop + (local.get $x) + ) ) - (block + (else (if (i32.const 1) - (local.set $x - (i32.const 300) + (then + (local.set $x + (i32.const 300) + ) ) ) (drop @@ -347,8 +439,10 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 200) + (then + (local.set $y + (i32.const 200) + ) ) ) (drop @@ -388,12 +482,14 @@ (local.get $var$0) ) ) - (i32.const 0) - (block (result i32) + (then + (i32.const 0) + ) + (else (local.set $var$3 (if (result i32) (i32.const 0) - (block (result i32) + (then (block $label$7 (block $label$8 (local.set $var$0 @@ -403,13 +499,15 @@ ) (local.get $var$3) ) - (block (result i32) + (else (if (i32.eqz (global.get $global$0) ) - (return - (i64.const 137438953472) + (then + (return + (i64.const 137438953472) + ) ) ) (global.set $global$0 @@ -443,8 +541,10 @@ (loop $label$1 (if (i32.const 1) - (drop - (local.get $result) + (then + (drop + (local.get $result) + ) ) ) (local.set $result diff --git a/test/passes/merge-locals_all-features.wast b/test/passes/merge-locals_all-features.wast index 1b73c9a95a8..b1d3aa9b7cc 100644 --- a/test/passes/merge-locals_all-features.wast +++ b/test/passes/merge-locals_all-features.wast @@ -6,8 +6,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $y) ;; turn this into $x @@ -18,8 +22,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $x) @@ -30,8 +38,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (drop (local.get $y)) ;; turn this into $x @@ -43,8 +55,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (drop (local.get $y)) ;; turn this into $x @@ -57,14 +73,22 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (if (i32.const 300) - (local.set $y (i32.const 400)) - (drop (local.get $y)) ;; turn this into $x + (then + (local.set $y (i32.const 400)) + ) + (else + (drop (local.get $y)) ;; turn this into $x + ) ) (i32.const 500) ) @@ -74,14 +98,22 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 200) + (then + (i32.const 100) + ) + (else + (i32.const 200) + ) ) ) (if (i32.const 300) - (local.set $y (i32.const 400)) - (drop (local.get $y)) ;; can turn this into $x, but another exists we can't, so do nothing + (then + (local.set $y (i32.const 400)) + ) + (else + (drop (local.get $y)) ;; can turn this into $x, but another exists we can't, so do nothing + ) ) (local.get $y) ;; but not this one! ) @@ -91,8 +123,12 @@ (local.tee $x (local.get $x) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $y) ;; turn this into $x @@ -105,8 +141,12 @@ (local.get $x) ) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (local.get $y) ;; turn this into $x @@ -129,8 +169,10 @@ (local.get $var$1) ) (if (local.get $var$1) - (local.set $var$2 ;; conditional overwrite 2 - (i32.const 1) + (then + (local.set $var$2 ;; conditional overwrite 2 + (i32.const 1) + ) ) ) (drop @@ -143,13 +185,19 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (drop (local.get $x)) ;; (read lower down first) but the reverse can work! (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -159,8 +207,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended + (then + (i32.const 100) + ) + (else + (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended + ) ) ) ) @@ -170,8 +222,12 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended + (then + (i32.const 100) + ) + (else + (local.get $x) ;; don't change to $y, as its lifetime ended. leave it ended + ) ) ) (local.set $y (i32.const 200)) @@ -183,14 +239,20 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) ;; can optimize this ($y lives on) + (then + (i32.const 100) + ) + (else + (local.get $x) ;; can optimize this ($y lives on) + ) ) ) (local.set $x (i32.const 300)) ;; force an undo (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -200,14 +262,20 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (local.set $x (i32.const 300)) ;; force an undo (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -217,16 +285,24 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (if (i32.const 1) - (local.set $x (i32.const 300)) ;; force an undo + (then + (local.set $x (i32.const 300)) ;; force an undo + ) ) (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -236,16 +312,24 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (local.get $x) + (then + (i32.const 100) + ) + (else + (local.get $x) + ) ) ) (if (i32.const 1) - (local.set $x (i32.const 300)) ;; force an undo + (then + (local.set $x (i32.const 300)) ;; force an undo + ) ) (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -255,21 +339,33 @@ (local.tee $x (local.get $y) ) - (i32.const 100) - (i32.const 150) + (then + (i32.const 100) + ) + (else + (i32.const 150) + ) ) ) (if (i32.const 1) - (drop (local.get $x)) - (block - (if (i32.const 1) - (local.set $x (i32.const 300)) ;; force an undo + (then + (drop (local.get $x)) + ) + (else + (block + (if (i32.const 1) + (then + (local.set $x (i32.const 300)) ;; force an undo + ) + ) + (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work ) - (drop (local.get $x)) ;; (read lower down first) but the reverse can almost work ) ) (if (i32.const 1) - (local.set $y (i32.const 200)) + (then + (local.set $y (i32.const 200)) + ) ) (drop (local.get $y)) ;; cannot this into $x, since this $y has multiple sources ) @@ -306,48 +402,58 @@ (local.get $var$0) ) ) - (i32.const 0) - (block (result i32) - (local.set $var$3 - (if (result i32) - (i32.const 0) - (block (result i32) - (block $label$7 - (block $label$8 - (local.set $var$0 - (i32.const 34738786) + (then + (i32.const 0) + ) + (else + (block (result i32) + (local.set $var$3 + (if (result i32) + (i32.const 0) + (then + (block (result i32) + (block $label$7 + (block $label$8 + (local.set $var$0 + (i32.const 34738786) + ) + ) ) - ) - ) - (local.get $var$3) - ) - (block (result i32) - (if - (i32.eqz - (global.get $global$0) - ) - (return - (i64.const 137438953472) - ) - ) - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) - ) - ) - (br_if $label$1 - (i32.eqz (local.get $var$3) ) ) - (return - (i64.const 44125) + (else + (block (result i32) + (if + (i32.eqz + (global.get $global$0) + ) + (then + (return + (i64.const 137438953472) + ) + ) + ) + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) + ) + (br_if $label$1 + (i32.eqz + (local.get $var$3) + ) + ) + (return + (i64.const 44125) + ) + ) ) ) ) + (i32.const -129) ) - (i32.const -129) ) ) ) @@ -361,8 +467,10 @@ (loop $label$1 (if (i32.const 1) - (drop - (local.get $result) + (then + (drop + (local.get $result) + ) ) ) (local.set $result ;; vanishes diff --git a/test/passes/metrics_all-features.txt b/test/passes/metrics_all-features.txt index e40a35441b1..2fcf292573d 100644 --- a/test/passes/metrics_all-features.txt +++ b/test/passes/metrics_all-features.txt @@ -31,34 +31,48 @@ total (block $block0 (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) - (drop - (i32.const 6) + (else + (drop + (i32.const 6) + ) ) ) (drop (i32.eq (if (result i32) (i32.const 4) - (i32.const 5) - (i32.const 6) + (then + (i32.const 5) + ) + (else + (i32.const 6) + ) ) (i32.const 177) ) diff --git a/test/passes/metrics_all-features.wast b/test/passes/metrics_all-features.wast index 68c13b9c22c..fe4a70ce22c 100644 --- a/test/passes/metrics_all-features.wast +++ b/test/passes/metrics_all-features.wast @@ -12,34 +12,48 @@ (block $block0 (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) ) (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 2) + (else + (drop + (i32.const 2) + ) ) ) (if (i32.const 4) - (drop - (i32.const 5) + (then + (drop + (i32.const 5) + ) ) - (drop - (i32.const 6) + (else + (drop + (i32.const 6) + ) ) ) (drop (i32.eq (if (result i32) (i32.const 4) - (i32.const 5) - (i32.const 6) + (then + (i32.const 5) + ) + (else + (i32.const 6) + ) ) (i32.const 177) ) diff --git a/test/passes/optimize-added-constants-propagate_low-memory-unused.txt b/test/passes/optimize-added-constants-propagate_low-memory-unused.txt index 2c8a9f0c772..98169960325 100644 --- a/test/passes/optimize-added-constants-propagate_low-memory-unused.txt +++ b/test/passes/optimize-added-constants-propagate_low-memory-unused.txt @@ -271,8 +271,10 @@ (local $3 i32) (if (local.get $z) - (local.set $y - (i32.const -1) + (then + (local.set $y + (i32.const -1) + ) ) ) (block @@ -323,10 +325,12 @@ ) (if (i32.const 1) - (local.set $x - (i32.add - (i32.const 2) - (local.get $y) + (then + (local.set $x + (i32.add + (i32.const 2) + (local.get $y) + ) ) ) ) diff --git a/test/passes/optimize-added-constants-propagate_low-memory-unused.wast b/test/passes/optimize-added-constants-propagate_low-memory-unused.wast index d62d487d223..dbff37fbc7d 100644 --- a/test/passes/optimize-added-constants-propagate_low-memory-unused.wast +++ b/test/passes/optimize-added-constants-propagate_low-memory-unused.wast @@ -303,7 +303,9 @@ (local $x i32) (local $y i32) (if (local.get $z) - (local.set $y (i32.const -1)) ;; y is not ssa + (then + (local.set $y (i32.const -1)) ;; y is not ssa + ) ) (local.set $x (i32.add @@ -345,10 +347,12 @@ ) ) (if (i32.const 1) - (local.set $x ;; x is not ssa - (i32.add - (i32.const 2) - (local.get $y) + (then + (local.set $x ;; x is not ssa + (i32.add + (i32.const 2) + (local.get $y) + ) ) ) ) diff --git a/test/passes/optimize-added-constants_low-memory-unused.txt b/test/passes/optimize-added-constants_low-memory-unused.txt index c700fa741e9..9baf092af87 100644 --- a/test/passes/optimize-added-constants_low-memory-unused.txt +++ b/test/passes/optimize-added-constants_low-memory-unused.txt @@ -290,8 +290,10 @@ (local $y i32) (if (local.get $z) - (local.set $y - (i32.const -1) + (then + (local.set $y + (i32.const -1) + ) ) ) (local.set $x diff --git a/test/passes/optimize-added-constants_low-memory-unused.wast b/test/passes/optimize-added-constants_low-memory-unused.wast index ac7d77fc42c..4b40a0f85d5 100644 --- a/test/passes/optimize-added-constants_low-memory-unused.wast +++ b/test/passes/optimize-added-constants_low-memory-unused.wast @@ -303,7 +303,9 @@ (local $x i32) (local $y i32) (if (local.get $z) - (local.set $y (i32.const -1)) + (then + (local.set $y (i32.const -1)) + ) ) (local.set $x (i32.add diff --git a/test/passes/precompute-propagate_all-features.txt b/test/passes/precompute-propagate_all-features.txt index 6fb67825a8d..380c7a88929 100644 --- a/test/passes/precompute-propagate_all-features.txt +++ b/test/passes/precompute-propagate_all-features.txt @@ -19,8 +19,10 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 10) + (then + (local.set $x + (i32.const 10) + ) ) ) (call $basic @@ -34,11 +36,15 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 10) + (then + (local.set $x + (i32.const 10) + ) ) - (local.set $x - (i32.const 10) + (else + (local.set $x + (i32.const 10) + ) ) ) (call $basic @@ -49,11 +55,15 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 10) + (then + (local.set $x + (i32.const 10) + ) ) - (local.set $x - (i32.const 20) + (else + (local.set $x + (i32.const 20) + ) ) ) (call $basic @@ -67,11 +77,15 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 10) + (then + (local.set $x + (i32.const 10) + ) ) - (local.set $x - (local.get $p) + (else + (local.set $x + (local.get $p) + ) ) ) (call $basic @@ -85,8 +99,10 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 0) + (then + (local.set $x + (i32.const 0) + ) ) ) (call $basic @@ -129,11 +145,15 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 11) + (then + (local.set $y + (i32.const 11) + ) ) - (local.set $y - (i32.const 11) + (else + (local.set $y + (i32.const 11) + ) ) ) (local.set $y @@ -149,11 +169,15 @@ ) (if (i32.const 1) - (local.set $y - (i32.const 12) + (then + (local.set $y + (i32.const 12) + ) ) - (local.set $y - (i32.const 11) + (else + (local.set $y + (i32.const 11) + ) ) ) (local.set $y @@ -242,8 +266,10 @@ (nop) (if (local.get $3) - (local.set $2 - (i32.const 0) + (then + (local.set $2 + (i32.const 0) + ) ) ) (local.get $2) diff --git a/test/passes/precompute-propagate_all-features.wast b/test/passes/precompute-propagate_all-features.wast index 17a20417d74..0460ad34ab2 100644 --- a/test/passes/precompute-propagate_all-features.wast +++ b/test/passes/precompute-propagate_all-features.wast @@ -8,38 +8,54 @@ (func $split (param $p i32) (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 10)) + (then + (local.set $x (i32.const 10)) + ) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join (param $p i32) (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 10)) - (local.set $x (i32.const 10)) + (then + (local.set $x (i32.const 10)) + ) + (else + (local.set $x (i32.const 10)) + ) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-different (param $p i32) (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 10)) - (local.set $x (i32.const 20)) + (then + (local.set $x (i32.const 10)) + ) + (else + (local.set $x (i32.const 20)) + ) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-different-b (param $p i32) (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 10)) - (local.set $x (local.get $p)) + (then + (local.set $x (i32.const 10)) + ) + (else + (local.set $x (local.get $p)) + ) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) (func $split-but-join-init0 (param $p i32) (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 0)) + (then + (local.set $x (i32.const 0)) + ) ) (call $basic (i32.add (local.get $x) (local.get $x))) ) @@ -62,8 +78,12 @@ (local $y i32) (local.set $x (i32.const 10)) (if (i32.const 1) - (local.set $y (i32.const 11)) - (local.set $y (i32.add (local.get $x) (i32.const 1))) + (then + (local.set $y (i32.const 11)) + ) + (else + (local.set $y (i32.add (local.get $x) (i32.const 1))) + ) ) (local.set $y (i32.add (local.get $x) (local.get $y))) (local.get $y) @@ -73,8 +93,12 @@ (local $y i32) (local.set $x (i32.const 10)) (if (i32.const 1) - (local.set $y (i32.const 12)) ;; 12, not 11... - (local.set $y (i32.add (local.get $x) (i32.const 1))) + (then + (local.set $y (i32.const 12)) ;; 12, not 11... + ) + (else + (local.set $y (i32.add (local.get $x) (i32.const 1))) + ) ) (local.set $y (i32.add (local.get $x) (local.get $y))) (local.get $y) @@ -83,8 +107,8 @@ (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually - (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) - (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) + (local.set $x (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $y)))) + (local.set $y (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $x)))) (br $loop) ) ) @@ -92,8 +116,8 @@ (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually - (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) - (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) + (local.set $x (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $y)))) + (local.set $y (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $x)))) (call $deadloop2 (local.get $x)) (call $deadloop2 (local.get $y)) (br $loop) @@ -103,8 +127,8 @@ (local $x i32) (local $y i32) (loop $loop ;; we look like we depend on the other, but we don't actually - (local.set $x (if (result i32) (i32.const 1) (i32.const 0) (local.get $x))) - (local.set $y (if (result i32) (i32.const 1) (i32.const 0) (local.get $y))) + (local.set $x (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $x)))) + (local.set $y (if (result i32) (i32.const 1) (then (i32.const 0) )(else (local.get $y)))) (call $deadloop2 (local.get $x)) (call $deadloop2 (local.get $y)) (br $loop) @@ -147,14 +171,18 @@ ;; if lower down, but we do not do an additional cycle of ;; this pass automatically as such things are fairly rare, ;; so that opportunity remains unoptimized in this test. - (local.set $3 ;; this set is completely removed, allowing later opts - (i32.const 24) + (then + (local.set $3 ;; this set is completely removed, allowing later opts + (i32.const 24) + ) ) ) (if (local.get $3) - (local.set $2 - (i32.const 0) + (then + (local.set $2 + (i32.const 0) + ) ) ) (local.get $2) diff --git a/test/passes/precompute_all-features.txt b/test/passes/precompute_all-features.txt index affa325310d..3f5908ef053 100644 --- a/test/passes/precompute_all-features.txt +++ b/test/passes/precompute_all-features.txt @@ -96,14 +96,18 @@ (func $ret (type $1) (result i32) (if (call $ret) - (return - (i32.const 0) + (then + (return + (i32.const 0) + ) ) ) (if (call $ret) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (i32.const 1) @@ -111,7 +115,9 @@ (func $noret (type $0) (if (call $ret) - (return) + (then + (return) + ) ) ) (func $refinalize-br-condition-unreachable (type $0) @@ -144,21 +150,25 @@ (i32.const 1919623207) (if (result i32) (i32.const 1) - (block $label$2 - (drop - (i64.and - (i64.trunc_f32_u - (f32.const 70847791997969805621592064) + (then + (block $label$2 + (drop + (i64.and + (i64.trunc_f32_u + (f32.const 70847791997969805621592064) + ) + (i64.const 729618461987467893) ) - (i64.const 729618461987467893) ) - ) - (br $label$0 - (f64.const 6.134856208230095e-154) + (br $label$0 + (f64.const 6.134856208230095e-154) + ) ) ) - (i32.load offset=3 align=2 - (i32.const 169901344) + (else + (i32.load offset=3 align=2 + (i32.const 169901344) + ) ) ) ) diff --git a/test/passes/precompute_all-features.wast b/test/passes/precompute_all-features.wast index 45000153353..633787fad48 100644 --- a/test/passes/precompute_all-features.wast +++ b/test/passes/precompute_all-features.wast @@ -192,16 +192,22 @@ ) (func $ret (result i32) (if (call $ret) - (return (i32.const 0)) + (then + (return (i32.const 0)) + ) ) (if (call $ret) - (return (return (i32.const 1))) + (then + (return (return (i32.const 1))) + ) ) (i32.const 1) ) (func $noret (if (call $ret) - (return) + (then + (return) + ) ) ) (func $refinalize-br-condition-unreachable @@ -234,33 +240,37 @@ (i32.const 1919623207) (if (result i32) (i32.const 1) - (block $label$2 (result i32) - (drop - (i64.and - (i64.trunc_f32_u - (f32.const 70847791997969805621592064) + (then + (block $label$2 (result i32) + (drop + (i64.and + (i64.trunc_f32_u + (f32.const 70847791997969805621592064) + ) + (i64.const 729618461987467893) ) - (i64.const 729618461987467893) ) - ) - (br_if $label$2 - (i32.const 2049535349) - (f32.eq - (f32.demote_f64 - (f64.mul - (br_if $label$0 ;; this br is optimized, and br *and* values reused - (f64.const 6.134856208230095e-154) - (i32.const 690910817) + (br_if $label$2 + (i32.const 2049535349) + (f32.eq + (f32.demote_f64 + (f64.mul + (br_if $label$0 ;; this br is optimized, and br *and* values reused + (f64.const 6.134856208230095e-154) + (i32.const 690910817) + ) + (f64.const 1.515470884183969e-152) ) - (f64.const 1.515470884183969e-152) ) + (f32.const 66524025679377434935296) ) - (f32.const 66524025679377434935296) ) ) ) - (i32.load offset=3 align=2 - (i32.const 169901344) + (else + (i32.load offset=3 align=2 + (i32.const 169901344) + ) ) ) ) diff --git a/test/passes/print-call-graph.txt b/test/passes/print-call-graph.txt index 42a640aa38c..b6ec339b79e 100644 --- a/test/passes/print-call-graph.txt +++ b/test/passes/print-call-graph.txt @@ -225,7 +225,7 @@ digraph call { (i32.eqz (global.get $__THREW__) ) - (block + (then (global.set $__THREW__ (local.get $0) ) @@ -404,7 +404,7 @@ digraph call { (i32.load (i32.const 1140) ) - (block (result i32) + (then (call $_pthread_cleanup_push (i32.const 1) (local.get $0) @@ -436,7 +436,7 @@ digraph call { ) (local.get $3) ) - (block (result i32) + (else (i32.store (local.get $8) (i32.load @@ -484,7 +484,7 @@ digraph call { ) ) ) - (block (result i32) + (then (i32.store (local.get $6) (local.tee $3 @@ -519,34 +519,36 @@ digraph call { (local.get $1) ) ) - (if (result i32) - (i32.eq - (local.get $5) - (i32.const 2) - ) - (block (result i32) - (i32.store - (local.get $6) - (i32.add - (i32.load - (local.get $6) + (else + (if (result i32) + (i32.eq + (local.get $5) + (i32.const 2) + ) + (then + (i32.store + (local.get $6) + (i32.add + (i32.load + (local.get $6) + ) + (local.get $4) ) - (local.get $4) ) + (local.set $3 + (local.get $1) + ) + (local.set $5 + (i32.const 2) + ) + (local.get $12) ) - (local.set $3 - (local.get $1) - ) - (local.set $5 - (i32.const 2) - ) - (local.get $12) - ) - (block (result i32) - (local.set $3 - (local.get $1) + (else + (local.set $3 + (local.get $1) + ) + (local.get $12) ) - (local.get $12) ) ) ) @@ -693,15 +695,17 @@ digraph call { ) (i32.const 0) ) - (block (result i32) + (then (i32.store (local.get $0) (i32.const -1) ) (i32.const -1) ) - (i32.load - (local.get $0) + (else + (i32.load + (local.get $0) + ) ) ) ) @@ -716,7 +720,7 @@ digraph call { (local.get $0) (i32.const -4096) ) - (block (result i32) + (then (i32.store (call $___errno_location) (i32.sub @@ -726,7 +730,9 @@ digraph call { ) (i32.const -1) ) - (local.get $0) + (else + (local.get $0) + ) ) ) (func $___errno_location (result i32) @@ -734,10 +740,14 @@ digraph call { (i32.load (i32.const 1140) ) - (i32.load offset=64 - (call $_pthread_self) + (then + (i32.load offset=64 + (call $_pthread_self) + ) + ) + (else + (i32.const 1184) ) - (i32.const 1184) ) ) (func $_cleanup_387 (param $0 i32) @@ -747,8 +757,10 @@ digraph call { (local.get $0) ) ) - (call $_free - (local.get $0) + (then + (call $_free + (local.get $0) + ) ) ) ) @@ -787,7 +799,7 @@ digraph call { (i32.const 64) ) ) - (block + (then (i32.store (local.get $3) (i32.load offset=60 @@ -807,9 +819,11 @@ digraph call { (i32.const 54) (local.get $3) ) - (i32.store8 offset=75 - (local.get $0) - (i32.const -1) + (then + (i32.store8 offset=75 + (local.get $0) + (i32.const -1) + ) ) ) ) @@ -832,7 +846,7 @@ digraph call { (block $do-once (result i32) (if (result i32) (local.get $0) - (block (result i32) + (then (if (i32.le_s (i32.load offset=76 @@ -840,9 +854,11 @@ digraph call { ) (i32.const -1) ) - (br $do-once - (call $___fflush_unlocked - (local.get $0) + (then + (br $do-once + (call $___fflush_unlocked + (local.get $0) + ) ) ) ) @@ -860,8 +876,10 @@ digraph call { ) (if (result i32) (local.get $2) - (local.get $1) - (block (result i32) + (then + (local.get $1) + ) + (else (call $_free (local.get $0) ) @@ -869,18 +887,22 @@ digraph call { ) ) ) - (block (result i32) + (else (local.set $0 (if (result i32) (i32.load (i32.const 1136) ) - (call $_fflush - (i32.load - (i32.const 1136) + (then + (call $_fflush + (i32.load + (i32.const 1136) + ) ) ) - (i32.const 0) + (else + (i32.const 0) + ) ) ) (call $___lock @@ -892,50 +914,62 @@ digraph call { (i32.const 1164) ) ) - (loop $while-in - (local.set $2 - (if (result i32) - (i32.gt_s - (i32.load offset=76 - (local.get $1) + (then + (loop $while-in + (local.set $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (local.get $1) + ) + (i32.const -1) + ) + (then + (call $_malloc + (local.get $1) + ) + ) + (else + (i32.const 0) ) - (i32.const -1) - ) - (call $_malloc - (local.get $1) ) - (i32.const 0) ) - ) - (local.set $0 - (if (result i32) - (i32.gt_u - (i32.load offset=20 - (local.get $1) + (local.set $0 + (if (result i32) + (i32.gt_u + (i32.load offset=20 + (local.get $1) + ) + (i32.load offset=28 + (local.get $1) + ) ) - (i32.load offset=28 - (local.get $1) + (then + (i32.or + (call $___fflush_unlocked + (local.get $1) + ) + (local.get $0) + ) + ) + (else + (local.get $0) ) ) - (i32.or - (call $___fflush_unlocked + ) + (if + (local.get $2) + (then + (call $_free (local.get $1) ) - (local.get $0) ) - (local.get $0) - ) - ) - (if - (local.get $2) - (call $_free - (local.get $1) ) - ) - (br_if $while-in - (local.tee $1 - (i32.load offset=56 - (local.get $1) + (br_if $while-in + (local.tee $1 + (i32.load offset=56 + (local.get $1) + ) ) ) ) @@ -1026,22 +1060,24 @@ digraph call { ) ) ) - (drop - (call_indirect (type $FUNCSIG$iiii) - (local.get $0) - (i32.sub - (local.get $4) - (local.get $6) - ) - (i32.const 1) - (i32.add - (i32.and - (i32.load offset=40 - (local.get $0) + (then + (drop + (call_indirect (type $FUNCSIG$iiii) + (local.get $0) + (i32.sub + (local.get $4) + (local.get $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (local.get $0) + ) + (i32.const 3) ) - (i32.const 3) + (i32.const 2) ) - (i32.const 2) ) ) ) @@ -1091,7 +1127,7 @@ digraph call { (local.tee $0 (call $__ZSt15get_new_handlerv) ) - (block + (then (call_indirect (type $FUNCSIG$v) (i32.add (i32.and @@ -1103,8 +1139,10 @@ digraph call { ) (br $while-in) ) - (local.set $0 - (i32.const 0) + (else + (local.set $0 + (i32.const 0) + ) ) ) ) @@ -1145,7 +1183,7 @@ digraph call { (local.get $2) (i32.const 20) ) - (block + (then (local.set $5 (i32.or (i32.or @@ -1185,7 +1223,7 @@ digraph call { (i32.const 3) ) ) - (block + (then (local.set $3 (i32.sub (i32.add @@ -1201,7 +1239,7 @@ digraph call { (local.get $0) (local.get $3) ) - (block + (then (i32.store8 (local.get $0) (local.get $1) @@ -1224,7 +1262,7 @@ digraph call { (local.get $0) (local.get $6) ) - (block + (then (i32.store (local.get $0) (local.get $5) @@ -1247,7 +1285,7 @@ digraph call { (local.get $0) (local.get $4) ) - (block + (then (i32.store8 (local.get $0) (local.get $1) @@ -1274,11 +1312,13 @@ digraph call { (local.get $2) (i32.const 4096) ) - (return - (call $_emscripten_memcpy_big - (local.get $0) - (local.get $1) - (local.get $2) + (then + (return + (call $_emscripten_memcpy_big + (local.get $0) + (local.get $1) + (local.get $2) + ) ) ) ) @@ -1296,7 +1336,7 @@ digraph call { (i32.const 3) ) ) - (block + (then (loop $while-in (block $while-out (br_if $while-out @@ -1311,8 +1351,10 @@ digraph call { (i32.eqz (local.get $2) ) - (return - (local.get $3) + (then + (return + (local.get $3) + ) ) ) (i32.store8 @@ -1348,7 +1390,7 @@ digraph call { (local.get $2) (i32.const 4) ) - (block + (then (i32.store (local.get $0) (i32.load @@ -1385,7 +1427,7 @@ digraph call { (local.get $2) (i32.const 0) ) - (block + (then (i32.store8 (local.get $0) (i32.load8_s diff --git a/test/passes/print-call-graph.wast b/test/passes/print-call-graph.wast index b1bb6001143..9d6371b4bf3 100644 --- a/test/passes/print-call-graph.wast +++ b/test/passes/print-call-graph.wast @@ -110,12 +110,14 @@ (i32.eqz (global.get $__THREW__) ) - (block - (global.set $__THREW__ - (local.get $0) - ) - (global.set $threwValue - (local.get $1) + (then + (block + (global.set $__THREW__ + (local.get $0) + ) + (global.set $threwValue + (local.get $1) + ) ) ) ) @@ -289,57 +291,61 @@ (i32.load (i32.const 1140) ) - (block (result i32) - (call $_pthread_cleanup_push - (i32.const 1) - (local.get $0) - ) - (i32.store - (local.get $9) - (i32.load - (local.get $13) + (then + (block (result i32) + (call $_pthread_cleanup_push + (i32.const 1) + (local.get $0) ) - ) - (i32.store offset=4 - (local.get $9) - (local.get $1) - ) - (i32.store offset=8 - (local.get $9) - (local.get $5) - ) - (local.set $3 - (call $___syscall_ret - (call $___syscall146 - (i32.const 146) - (local.get $9) + (i32.store + (local.get $9) + (i32.load + (local.get $13) ) ) + (i32.store offset=4 + (local.get $9) + (local.get $1) + ) + (i32.store offset=8 + (local.get $9) + (local.get $5) + ) + (local.set $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (local.get $9) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + (local.get $3) ) - (call $_pthread_cleanup_pop - (i32.const 0) - ) - (local.get $3) ) - (block (result i32) - (i32.store - (local.get $8) - (i32.load - (local.get $13) + (else + (block (result i32) + (i32.store + (local.get $8) + (i32.load + (local.get $13) + ) ) - ) - (i32.store offset=4 - (local.get $8) - (local.get $1) - ) - (i32.store offset=8 - (local.get $8) - (local.get $5) - ) - (call $___syscall_ret - (call $___syscall146 - (i32.const 146) + (i32.store offset=4 + (local.get $8) + (local.get $1) + ) + (i32.store offset=8 (local.get $8) + (local.get $5) + ) + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (local.get $8) + ) ) ) ) @@ -369,69 +375,77 @@ ) ) ) - (block (result i32) - (i32.store - (local.get $6) - (local.tee $3 - (i32.load - (local.get $14) - ) - ) - ) - (i32.store - (local.get $10) - (local.get $3) - ) - (local.set $4 - (i32.sub - (local.get $4) - (local.get $12) - ) - ) - (local.set $3 - (i32.add - (local.get $1) - (i32.const 8) - ) - ) - (local.set $5 - (i32.add - (local.get $5) - (i32.const -1) - ) - ) - (i32.load offset=12 - (local.get $1) - ) - ) - (if (result i32) - (i32.eq - (local.get $5) - (i32.const 2) - ) + (then (block (result i32) (i32.store (local.get $6) - (i32.add + (local.tee $3 (i32.load - (local.get $6) + (local.get $14) ) + ) + ) + (i32.store + (local.get $10) + (local.get $3) + ) + (local.set $4 + (i32.sub (local.get $4) + (local.get $12) ) ) (local.set $3 - (local.get $1) + (i32.add + (local.get $1) + (i32.const 8) + ) ) (local.set $5 - (i32.const 2) + (i32.add + (local.get $5) + (i32.const -1) + ) ) - (local.get $12) - ) - (block (result i32) - (local.set $3 + (i32.load offset=12 (local.get $1) ) - (local.get $12) + ) + ) + (else + (if (result i32) + (i32.eq + (local.get $5) + (i32.const 2) + ) + (then + (block (result i32) + (i32.store + (local.get $6) + (i32.add + (i32.load + (local.get $6) + ) + (local.get $4) + ) + ) + (local.set $3 + (local.get $1) + ) + (local.set $5 + (i32.const 2) + ) + (local.get $12) + ) + ) + (else + (block (result i32) + (local.set $3 + (local.get $1) + ) + (local.get $12) + ) + ) ) ) ) @@ -578,15 +592,19 @@ ) (i32.const 0) ) - (block (result i32) - (i32.store - (local.get $0) + (then + (block (result i32) + (i32.store + (local.get $0) + (i32.const -1) + ) (i32.const -1) ) - (i32.const -1) ) - (i32.load - (local.get $0) + (else + (i32.load + (local.get $0) + ) ) ) ) @@ -601,17 +619,21 @@ (local.get $0) (i32.const -4096) ) - (block (result i32) - (i32.store - (call $___errno_location) - (i32.sub - (i32.const 0) - (local.get $0) + (then + (block (result i32) + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (local.get $0) + ) ) + (i32.const -1) ) - (i32.const -1) ) - (local.get $0) + (else + (local.get $0) + ) ) ) (func $___errno_location (result i32) @@ -619,10 +641,14 @@ (i32.load (i32.const 1140) ) - (i32.load offset=64 - (call $_pthread_self) + (then + (i32.load offset=64 + (call $_pthread_self) + ) + ) + (else + (i32.const 1184) ) - (i32.const 1184) ) ) (func $_cleanup_387 (param $0 i32) @@ -632,8 +658,10 @@ (local.get $0) ) ) - (call $_free - (local.get $0) + (then + (call $_free + (local.get $0) + ) ) ) ) @@ -672,29 +700,33 @@ (i32.const 64) ) ) - (block - (i32.store - (local.get $3) - (i32.load offset=60 - (local.get $0) + (then + (block + (i32.store + (local.get $3) + (i32.load offset=60 + (local.get $0) + ) ) - ) - (i32.store offset=4 - (local.get $3) - (i32.const 21505) - ) - (i32.store offset=8 - (local.get $3) - (local.get $5) - ) - (if - (call $___syscall54 - (i32.const 54) + (i32.store offset=4 (local.get $3) + (i32.const 21505) ) - (i32.store8 offset=75 - (local.get $0) - (i32.const -1) + (i32.store offset=8 + (local.get $3) + (local.get $5) + ) + (if + (call $___syscall54 + (i32.const 54) + (local.get $3) + ) + (then + (i32.store8 offset=75 + (local.get $0) + (i32.const -1) + ) + ) ) ) ) @@ -717,119 +749,145 @@ (block $do-once (result i32) (if (result i32) (local.get $0) - (block (result i32) - (if - (i32.le_s - (i32.load offset=76 - (local.get $0) + (then + (block (result i32) + (if + (i32.le_s + (i32.load offset=76 + (local.get $0) + ) + (i32.const -1) ) - (i32.const -1) - ) - (br $do-once - (call $___fflush_unlocked - (local.get $0) + (then + (br $do-once + (call $___fflush_unlocked + (local.get $0) + ) + ) ) ) - ) - (local.set $2 - (i32.eqz - (call $_malloc - (local.get $0) + (local.set $2 + (i32.eqz + (call $_malloc + (local.get $0) + ) ) ) - ) - (local.set $1 - (call $___fflush_unlocked - (local.get $0) - ) - ) - (if (result i32) - (local.get $2) - (local.get $1) - (block (result i32) - (call $_free + (local.set $1 + (call $___fflush_unlocked (local.get $0) ) - (local.get $1) ) - ) - ) - (block (result i32) - (local.set $0 (if (result i32) - (i32.load - (i32.const 1136) + (local.get $2) + (then + (local.get $1) ) - (call $_fflush - (i32.load - (i32.const 1136) + (else + (block (result i32) + (call $_free + (local.get $0) + ) + (local.get $1) ) ) - (i32.const 0) ) ) - (call $___lock - (i32.const 1168) - ) - (if - (local.tee $1 - (i32.load - (i32.const 1164) - ) - ) - (loop $while-in - (local.set $2 - (if (result i32) - (i32.gt_s - (i32.load offset=76 - (local.get $1) + ) + (else + (block (result i32) + (local.set $0 + (if (result i32) + (i32.load + (i32.const 1136) + ) + (then + (call $_fflush + (i32.load + (i32.const 1136) ) - (i32.const -1) - ) - (call $_malloc - (local.get $1) ) + ) + (else (i32.const 0) ) ) - (local.set $0 - (if (result i32) - (i32.gt_u - (i32.load offset=20 - (local.get $1) + ) + (call $___lock + (i32.const 1168) + ) + (if + (local.tee $1 + (i32.load + (i32.const 1164) + ) + ) + (then + (loop $while-in + (local.set $2 + (if (result i32) + (i32.gt_s + (i32.load offset=76 + (local.get $1) + ) + (i32.const -1) + ) + (then + (call $_malloc + (local.get $1) + ) + ) + (else + (i32.const 0) + ) ) - (i32.load offset=28 - (local.get $1) + ) + (local.set $0 + (if (result i32) + (i32.gt_u + (i32.load offset=20 + (local.get $1) + ) + (i32.load offset=28 + (local.get $1) + ) + ) + (then + (i32.or + (call $___fflush_unlocked + (local.get $1) + ) + (local.get $0) + ) + ) + (else + (local.get $0) + ) ) ) - (i32.or - (call $___fflush_unlocked - (local.get $1) + (if + (local.get $2) + (then + (call $_free + (local.get $1) + ) ) - (local.get $0) ) - (local.get $0) - ) - ) - (if - (local.get $2) - (call $_free - (local.get $1) - ) - ) - (br_if $while-in - (local.tee $1 - (i32.load offset=56 - (local.get $1) + (br_if $while-in + (local.tee $1 + (i32.load offset=56 + (local.get $1) + ) + ) ) ) ) ) + (call $___unlock + (i32.const 1168) + ) + (local.get $0) ) - (call $___unlock - (i32.const 1168) - ) - (local.get $0) ) ) ) @@ -911,22 +969,24 @@ ) ) ) - (drop - (call_indirect (type $FUNCSIG$iiii) - (local.get $0) - (i32.sub - (local.get $4) - (local.get $6) - ) - (i32.const 1) - (i32.add - (i32.and - (i32.load offset=40 - (local.get $0) + (then + (drop + (call_indirect (type $FUNCSIG$iiii) + (local.get $0) + (i32.sub + (local.get $4) + (local.get $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (local.get $0) + ) + (i32.const 3) ) - (i32.const 3) + (i32.const 2) ) - (i32.const 2) ) ) ) @@ -976,20 +1036,24 @@ (local.tee $0 (call $__ZSt15get_new_handlerv) ) - (block - (call_indirect (type $FUNCSIG$v) - (i32.add - (i32.and - (local.get $0) - (i32.const 0) + (then + (block + (call_indirect (type $FUNCSIG$v) + (i32.add + (i32.and + (local.get $0) + (i32.const 0) + ) + (i32.const 8) ) - (i32.const 8) ) + (br $while-in) ) - (br $while-in) ) - (local.set $0 - (i32.const 0) + (else + (local.set $0 + (i32.const 0) + ) ) ) ) @@ -1030,97 +1094,105 @@ (local.get $2) (i32.const 20) ) - (block - (local.set $5 - (i32.or + (then + (block + (local.set $5 (i32.or (i32.or - (local.tee $1 - (i32.and + (i32.or + (local.tee $1 + (i32.and + (local.get $1) + (i32.const 255) + ) + ) + (i32.shl (local.get $1) - (i32.const 255) + (i32.const 8) ) ) (i32.shl (local.get $1) - (i32.const 8) + (i32.const 16) ) ) (i32.shl (local.get $1) - (i32.const 16) + (i32.const 24) ) ) - (i32.shl - (local.get $1) - (i32.const 24) - ) ) - ) - (local.set $6 - (i32.and - (local.get $4) - (i32.const -4) - ) - ) - (if - (local.tee $3 + (local.set $6 (i32.and - (local.get $0) - (i32.const 3) + (local.get $4) + (i32.const -4) ) ) - (block - (local.set $3 - (i32.sub - (i32.add - (local.get $0) - (i32.const 4) - ) - (local.get $3) + (if + (local.tee $3 + (i32.and + (local.get $0) + (i32.const 3) ) ) - (loop $while-in - (if - (i32.lt_s - (local.get $0) - (local.get $3) - ) - (block - (i32.store8 - (local.get $0) - (local.get $1) - ) - (local.set $0 + (then + (block + (local.set $3 + (i32.sub (i32.add (local.get $0) - (i32.const 1) + (i32.const 4) + ) + (local.get $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (local.get $0) + (local.get $3) + ) + (then + (block + (i32.store8 + (local.get $0) + (local.get $1) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (br $while-in) + ) ) ) - (br $while-in) ) ) ) ) - ) - (loop $while-in1 - (if - (i32.lt_s - (local.get $0) - (local.get $6) - ) - (block - (i32.store + (loop $while-in1 + (if + (i32.lt_s (local.get $0) - (local.get $5) + (local.get $6) ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 4) + (then + (block + (i32.store + (local.get $0) + (local.get $5) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 4) + ) + ) + (br $while-in1) ) ) - (br $while-in1) ) ) ) @@ -1132,18 +1204,20 @@ (local.get $0) (local.get $4) ) - (block - (i32.store8 - (local.get $0) - (local.get $1) - ) - (local.set $0 - (i32.add + (then + (block + (i32.store8 (local.get $0) - (i32.const 1) + (local.get $1) ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) + ) + (br $while-in3) ) - (br $while-in3) ) ) ) @@ -1159,11 +1233,13 @@ (local.get $2) (i32.const 4096) ) - (return - (call $_emscripten_memcpy_big - (local.get $0) - (local.get $1) - (local.get $2) + (then + (return + (call $_emscripten_memcpy_big + (local.get $0) + (local.get $1) + (local.get $2) + ) ) ) ) @@ -1181,84 +1257,90 @@ (i32.const 3) ) ) - (block - (loop $while-in - (block $while-out - (br_if $while-out - (i32.eqz - (i32.and - (local.get $0) - (i32.const 3) + (then + (block + (loop $while-in + (block $while-out + (br_if $while-out + (i32.eqz + (i32.and + (local.get $0) + (i32.const 3) + ) ) ) - ) - (if - (i32.eqz - (local.get $2) - ) - (return - (local.get $3) - ) - ) - (i32.store8 - (local.get $0) - (i32.load8_s - (local.get $1) - ) - ) - (local.set $0 - (i32.add - (local.get $0) - (i32.const 1) - ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 1) - ) - ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 1) + (if + (i32.eqz + (local.get $2) + ) + (then + (return + (local.get $3) + ) + ) ) - ) - (br $while-in) - ) - ) - (loop $while-in1 - (if - (i32.ge_s - (local.get $2) - (i32.const 4) - ) - (block - (i32.store + (i32.store8 (local.get $0) - (i32.load + (i32.load8_s (local.get $1) ) ) (local.set $0 (i32.add (local.get $0) - (i32.const 4) + (i32.const 1) ) ) (local.set $1 (i32.add (local.get $1) - (i32.const 4) + (i32.const 1) ) ) (local.set $2 (i32.sub (local.get $2) - (i32.const 4) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (local.get $2) + (i32.const 4) + ) + (then + (block + (i32.store + (local.get $0) + (i32.load + (local.get $1) + ) + ) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 4) + ) + ) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 4) + ) + ) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 4) + ) + ) + (br $while-in1) ) ) - (br $while-in1) ) ) ) @@ -1270,32 +1352,34 @@ (local.get $2) (i32.const 0) ) - (block - (i32.store8 - (local.get $0) - (i32.load8_s - (local.get $1) - ) - ) - (local.set $0 - (i32.add + (then + (block + (i32.store8 (local.get $0) - (i32.const 1) + (i32.load8_s + (local.get $1) + ) ) - ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 1) + (local.set $0 + (i32.add + (local.get $0) + (i32.const 1) + ) ) - ) - (local.set $2 - (i32.sub - (local.get $2) - (i32.const 1) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 1) + ) + ) + (local.set $2 + (i32.sub + (local.get $2) + (i32.const 1) + ) ) + (br $while-in3) ) - (br $while-in3) ) ) ) diff --git a/test/passes/print.bin.txt b/test/passes/print.bin.txt index ed16d9e2124..25b2cc38720 100644 --- a/test/passes/print.bin.txt +++ b/test/passes/print.bin.txt @@ -26,31 +26,33 @@ ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) @@ -117,31 +119,33 @@ ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) diff --git a/test/passes/print_g.bin.txt b/test/passes/print_g.bin.txt index 21f31a8317f..174230388c9 100644 --- a/test/passes/print_g.bin.txt +++ b/test/passes/print_g.bin.txt @@ -33,49 +33,51 @@ ;; code offset: 0xd (i32.const 55) ) - ;; code offset: 0x12 - (loop $label$2 - ;; code offset: 0x2e - (br_if $label$2 - ;; code offset: 0x2d - (i32.ne - ;; code offset: 0x2a - (i32.rem_s - ;; code offset: 0x25 - (local.tee $0 - ;; code offset: 0x24 - (i32.add - ;; code offset: 0x21 + (then + ;; code offset: 0x12 + (loop $label$2 + ;; code offset: 0x2e + (br_if $label$2 + ;; code offset: 0x2d + (i32.ne + ;; code offset: 0x2a + (i32.rem_s + ;; code offset: 0x25 + (local.tee $0 + ;; code offset: 0x24 (i32.add - ;; code offset: 0x1b - (i32.mul - ;; code offset: 0x18 + ;; code offset: 0x21 + (i32.add + ;; code offset: 0x1b (i32.mul - ;; code offset: 0x14 + ;; code offset: 0x18 + (i32.mul + ;; code offset: 0x14 + (local.get $0) + ;; code offset: 0x16 + (local.get $0) + ) + ;; code offset: 0x19 (local.get $0) - ;; code offset: 0x16 + ) + ;; code offset: 0x20 + (i32.div_s + ;; code offset: 0x1c (local.get $0) + ;; code offset: 0x1e + (i32.const -2) ) - ;; code offset: 0x19 - (local.get $0) - ) - ;; code offset: 0x20 - (i32.div_s - ;; code offset: 0x1c - (local.get $0) - ;; code offset: 0x1e - (i32.const -2) ) + ;; code offset: 0x22 + (i32.const 13) ) - ;; code offset: 0x22 - (i32.const 13) ) + ;; code offset: 0x27 + (i32.const 120) ) - ;; code offset: 0x27 - (i32.const 120) + ;; code offset: 0x2b + (i32.const 55) ) - ;; code offset: 0x2b - (i32.const 55) ) ) ) @@ -163,49 +165,51 @@ ;; code offset: 0xd (i32.const 55) ) - ;; code offset: 0x12 - (loop $label$2 - ;; code offset: 0x2e - (br_if $label$2 - ;; code offset: 0x2d - (i32.ne - ;; code offset: 0x2a - (i32.rem_s - ;; code offset: 0x25 - (local.tee $0 - ;; code offset: 0x24 - (i32.add - ;; code offset: 0x21 + (then + ;; code offset: 0x12 + (loop $label$2 + ;; code offset: 0x2e + (br_if $label$2 + ;; code offset: 0x2d + (i32.ne + ;; code offset: 0x2a + (i32.rem_s + ;; code offset: 0x25 + (local.tee $0 + ;; code offset: 0x24 (i32.add - ;; code offset: 0x1b - (i32.mul - ;; code offset: 0x18 + ;; code offset: 0x21 + (i32.add + ;; code offset: 0x1b (i32.mul - ;; code offset: 0x14 + ;; code offset: 0x18 + (i32.mul + ;; code offset: 0x14 + (local.get $0) + ;; code offset: 0x16 + (local.get $0) + ) + ;; code offset: 0x19 (local.get $0) - ;; code offset: 0x16 + ) + ;; code offset: 0x20 + (i32.div_s + ;; code offset: 0x1c (local.get $0) + ;; code offset: 0x1e + (i32.const -2) ) - ;; code offset: 0x19 - (local.get $0) - ) - ;; code offset: 0x20 - (i32.div_s - ;; code offset: 0x1c - (local.get $0) - ;; code offset: 0x1e - (i32.const -2) ) + ;; code offset: 0x22 + (i32.const 13) ) - ;; code offset: 0x22 - (i32.const 13) ) + ;; code offset: 0x27 + (i32.const 120) ) - ;; code offset: 0x27 - (i32.const 120) + ;; code offset: 0x2b + (i32.const 55) ) - ;; code offset: 0x2b - (i32.const 55) ) ) ) diff --git a/test/passes/print_g_metrics.bin.txt b/test/passes/print_g_metrics.bin.txt index 4fd8a953b1d..e5ac1edae13 100644 --- a/test/passes/print_g_metrics.bin.txt +++ b/test/passes/print_g_metrics.bin.txt @@ -29,31 +29,33 @@ ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) @@ -116,31 +118,33 @@ total ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) diff --git a/test/passes/print_g_strip-dwarf.bin.txt b/test/passes/print_g_strip-dwarf.bin.txt index 6c31defb227..967e03f3d39 100644 --- a/test/passes/print_g_strip-dwarf.bin.txt +++ b/test/passes/print_g_strip-dwarf.bin.txt @@ -26,31 +26,33 @@ ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) @@ -117,31 +119,33 @@ ) (i32.const 55) ) - (loop $label$2 - (br_if $label$2 - (i32.ne - (i32.rem_s - (local.tee $0 - (i32.add + (then + (loop $label$2 + (br_if $label$2 + (i32.ne + (i32.rem_s + (local.tee $0 (i32.add - (i32.mul + (i32.add (i32.mul + (i32.mul + (local.get $0) + (local.get $0) + ) (local.get $0) + ) + (i32.div_s (local.get $0) + (i32.const -2) ) - (local.get $0) - ) - (i32.div_s - (local.get $0) - (i32.const -2) ) + (i32.const 13) ) - (i32.const 13) ) + (i32.const 120) ) - (i32.const 120) + (i32.const 55) ) - (i32.const 55) ) ) ) diff --git a/test/passes/remove-non-js-ops.txt b/test/passes/remove-non-js-ops.txt index 5ce482d30ff..a89c7af9410 100644 --- a/test/passes/remove-non-js-ops.txt +++ b/test/passes/remove-non-js-ops.txt @@ -379,7 +379,7 @@ ) ) ) - (block + (then (br_if $label$11 (i32.eqz (local.tee $var$3 @@ -673,7 +673,7 @@ (block $label$13 (if (local.get $var$2) - (block + (then (local.set $var$8 (i64.add (local.get $var$1) @@ -764,16 +764,18 @@ (func $__wasm_ctz_i32 (param $var$0 i32) (result i32) (if (local.get $var$0) - (return - (i32.sub - (i32.const 31) - (i32.clz - (i32.xor - (i32.add + (then + (return + (i32.sub + (i32.const 31) + (i32.clz + (i32.xor + (i32.add + (local.get $var$0) + (i32.const -1) + ) (local.get $var$0) - (i32.const -1) ) - (local.get $var$0) ) ) ) @@ -833,7 +835,7 @@ (f32.const 0.5) ) ) - (block + (then (local.set $var$0 (f32.ceil (local.get $var$0) @@ -844,8 +846,10 @@ (local.get $var$2) (f32.const 0.5) ) - (return - (local.get $var$0) + (then + (return + (local.get $var$0) + ) ) ) (local.set $var$1 @@ -891,7 +895,7 @@ (f64.const 0.5) ) ) - (block + (then (local.set $var$0 (f64.ceil (local.get $var$0) @@ -902,8 +906,10 @@ (local.get $var$2) (f64.const 0.5) ) - (return - (local.get $var$0) + (then + (return + (local.get $var$0) + ) ) ) (local.set $var$1 diff --git a/test/passes/remove-unused-brs_enable-multivalue.txt b/test/passes/remove-unused-brs_enable-multivalue.txt index e03ca15a745..2fd56cb9cf6 100644 --- a/test/passes/remove-unused-brs_enable-multivalue.txt +++ b/test/passes/remove-unused-brs_enable-multivalue.txt @@ -128,25 +128,29 @@ (func $b12-yes (if (i32.const 1) - (block $topmost - (block $block1 - (drop - (i32.const 12) - ) - (block + (then + (block $topmost + (block $block1 (drop - (i32.const 1) + (i32.const 12) + ) + (block + (drop + (i32.const 1) + ) ) ) ) ) - (block $block3 - (drop - (i32.const 27) - ) - (block + (else + (block $block3 (drop - (i32.const 2) + (i32.const 27) + ) + (block + (drop + (i32.const 2) + ) ) ) ) @@ -156,23 +160,27 @@ (block $topmost (result i32) (if (i32.const 1) - (block $block1 - (drop - (i32.const 12) - ) - (drop - (br_if $topmost - (i32.const 1) - (i32.const 1) + (then + (block $block1 + (drop + (i32.const 12) + ) + (drop + (br_if $topmost + (i32.const 1) + (i32.const 1) + ) ) ) ) - (block $block3 - (drop - (i32.const 27) - ) - (br $topmost - (i32.const 2) + (else + (block $block3 + (drop + (i32.const 27) + ) + (br $topmost + (i32.const 2) + ) ) ) ) @@ -195,18 +203,22 @@ (func $b14-tuple (result i32 i64) (if (type $5) (result i32 i64) (i32.const 1) - (block $topmost (type $5) (result i32 i64) - (block $block1 (type $5) (result i32 i64) - (tuple.make 2 - (i32.const 12) - (i64.const 12) + (then + (block $topmost (type $5) (result i32 i64) + (block $block1 (type $5) (result i32 i64) + (tuple.make 2 + (i32.const 12) + (i64.const 12) + ) ) ) ) - (block $block3 (type $5) (result i32 i64) - (tuple.make 2 - (i32.const 27) - (i64.const 27) + (else + (block $block3 (type $5) (result i32 i64) + (tuple.make 2 + (i32.const 27) + (i64.const 27) + ) ) ) ) @@ -221,10 +233,12 @@ (func $b15b (if (i32.const 18) - (block $topmost - (block - (drop - (i32.const 0) + (then + (block $topmost + (block + (drop + (i32.const 0) + ) ) ) ) @@ -253,42 +267,58 @@ (func $b17 (if (i32.const 0) - (block $a - (block $block1 + (then + (block $a + (block $block1 + ) ) ) - (block $block3 + (else + (block $block3 + ) ) ) (if (i32.const 0) - (block $a7 - (drop - (i32.const 1) + (then + (block $a7 + (drop + (i32.const 1) + ) ) ) - (block $block6 + (else + (block $block6 + ) ) ) (if (i32.const 0) - (block $a9 - (block $block8 + (then + (block $a9 + (block $block8 + ) ) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 1) + ) ) ) (if (i32.const 0) - (block $c - (block $b - (block $block11 + (then + (block $c + (block $b + (block $block11 + ) ) ) ) - (block $block13 + (else + (block $block13 + ) ) ) ) @@ -304,9 +334,13 @@ (func $ret-3 (if (i32.const 0) - (block $block0 + (then + (block $block0 + ) ) - (block $block3 + (else + (block $block3 + ) ) ) ) @@ -321,37 +355,45 @@ (block $a (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (block $block2 - (block + (else + (block $block2 + (block + (drop + (i32.const 2) + ) + (br $a) + ) (drop - (i32.const 2) + (i32.const 3) ) - (br $a) - ) - (drop - (i32.const 3) ) ) ) (if (i32.const 0) - (block $block4 - (block + (then + (block $block4 + (block + (drop + (i32.const 2) + ) + (br $a) + ) (drop - (i32.const 2) + (i32.const 3) ) - (br $a) ) + ) + (else (drop - (i32.const 3) + (i32.const 1) ) ) - (drop - (i32.const 1) - ) ) (if (block $block6 (result i32) @@ -363,28 +405,36 @@ ) (i32.const 3) ) - (drop - (i32.const 0) + (then + (drop + (i32.const 0) + ) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 1) + ) ) ) (if (block $a17 (result i32) (i32.const 0) ) - (block $a18 - (block - (drop - (i32.const 1) + (then + (block $a18 + (block + (drop + (i32.const 1) + ) ) ) ) - (block $a20 - (block - (drop - (i32.const 2) + (else + (block $a20 + (block + (drop + (i32.const 2) + ) ) ) ) @@ -396,7 +446,7 @@ (block $do-once$0 (if (call $b13) - (block + (then (drop (i32.const 0) ) @@ -410,7 +460,7 @@ (block $do-once$022 (if (call $b13) - (block + (then (drop (call $b14) ) @@ -424,7 +474,7 @@ (block $do-once$025 (if (i32.const 0) - (block + (then (drop (call $b14) ) @@ -440,9 +490,11 @@ (local.tee $x (i32.const 1) ) - (br $do-once$028 - (local.tee $x - (i32.const 2) + (then + (br $do-once$028 + (local.tee $x + (i32.const 2) + ) ) ) ) @@ -488,10 +540,12 @@ (i32.eqz (i32.const 0) ) - (block $out40 - (nop) - (br_if $in39 - (i32.const 1) + (then + (block $out40 + (nop) + (br_if $in39 + (i32.const 1) + ) ) ) ) @@ -506,29 +560,39 @@ (loop $in45 (if (i32.const 0) - (block $out46 - (unreachable) + (then + (block $out46 + (unreachable) + ) + ) + (else + (br $in45) ) - (br $in45) ) ) (loop $in48 (if (i32.const 0) - (block $out49 - (block - (call $loops) + (then + (block $out49 + (block + (call $loops) + ) ) ) - (br $in48) + (else + (br $in48) + ) ) ) (loop $in-todo (if (i32.const 0) - (block $out-todo + (then + (block $out-todo + ) ) - (block + (else (call $loops) (br $in-todo) ) @@ -537,9 +601,11 @@ (loop $in52 (if (i32.const 0) - (block $out53 + (then + (block $out53 + ) ) - (block + (else (call $loops) (br $in52) ) @@ -548,34 +614,40 @@ (loop $in55 (if (i32.const 0) - (block + (then (call $loops) (br $in55) ) - (block $out56 + (else + (block $out56 + ) ) ) ) (loop $in58 (if (i32.const 0) - (block + (then (drop (i32.const 1) ) (call $loops) (br $in58) ) - (block $out59 + (else + (block $out59 + ) ) ) ) (loop $in62 (if (i32.const 0) - (block $out63 + (then + (block $out63 + ) ) - (block + (else (call $loops) (drop (i32.const 100) @@ -587,21 +659,23 @@ (loop $in65 (if (i32.const 0) - (block + (then (call $loops) (drop (i32.const 101) ) (br $in65) ) - (block $out66 + (else + (block $out66 + ) ) ) ) (loop $in68 (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -611,7 +685,9 @@ ) (br $in68) ) - (block $out69 + (else + (block $out69 + ) ) ) ) @@ -620,11 +696,13 @@ (i32.eqz (i32.const 0) ) - (block $out73 - (nop) - (call $loops) - (return) - (br $in72) + (then + (block $out73 + (nop) + (call $loops) + (return) + (br $in72) + ) ) ) ) @@ -641,9 +719,11 @@ (loop $in78 (if (i32.const 0) - (block $out79 + (then + (block $out79 + ) ) - (block + (else (call $loops) (drop (block $out2 (result i32) @@ -666,9 +746,11 @@ (loop $in-todo2 (if (i32.const 0) - (block $out-todo2 + (then + (block $out-todo2 + ) ) - (block + (else (call $loops) (br $in-todo2) ) @@ -703,9 +785,11 @@ (loop $in-todo287 (if (i32.const 0) - (block $out-todo288 + (then + (block $out-todo288 + ) ) - (block + (else (call $loops) (drop (i32.const 1) @@ -789,16 +873,20 @@ (block $out (result i32) (if (local.get $x) - (br $out - (block (result i32) - (local.set $x - (i32.const 0) + (then + (br $out + (block (result i32) + (local.set $x + (i32.const 0) + ) + (i32.const 1) ) - (i32.const 1) ) ) - (br_if $leave - (i32.const 1) + (else + (br_if $leave + (i32.const 1) + ) ) ) (unreachable) @@ -816,15 +904,19 @@ (block $out (result i32) (if (local.get $x) - (br_if $leave - (i32.const 1) + (then + (br_if $leave + (i32.const 1) + ) ) - (br $out - (block (result i32) - (local.set $x - (i32.const 0) + (else + (br $out + (block (result i32) + (local.set $x + (i32.const 0) + ) + (i32.const 1) ) - (i32.const 1) ) ) ) @@ -843,16 +935,18 @@ (block $out (result i32) (if (local.get $x) - (br $out - (block (result i32) - (drop - (call $if-to-br_if-value-sideeffect - (i32.const 0) - (i32.const 1) + (then + (br $out + (block (result i32) + (drop + (call $if-to-br_if-value-sideeffect + (i32.const 0) + (i32.const 1) + ) ) + (nop) + (i32.const 1) ) - (nop) - (i32.const 1) ) ) ) @@ -874,16 +968,20 @@ (local.get $j) (i32.const 2147483640) ) - (block $x - (block $y - (block $z - (br_if $x - (local.get $j) + (then + (block $x + (block $y + (block $z + (br_if $x + (local.get $j) + ) ) ) ) ) - (block $switch$26 + (else + (block $switch$26 + ) ) ) (i32.store @@ -900,13 +998,15 @@ (i32.eqz (i32.const 0) ) - (block $yes - (nop) - (drop - (i32.const 1) - ) - (drop - (i32.const 2) + (then + (block $yes + (nop) + (drop + (i32.const 1) + ) + (drop + (i32.const 2) + ) ) ) ) @@ -1078,7 +1178,9 @@ ) (if (i32.const 0) - (nop) + (then + (nop) + ) ) ) ) @@ -1087,8 +1189,12 @@ (drop (if (result f64) (unreachable) - (f64.const 1) - (br $label$3) + (then + (f64.const 1) + ) + (else + (br $label$3) + ) ) ) (i64.const 1) @@ -1099,12 +1205,20 @@ (drop (if (result i32) (unreachable) - (if (result i32) - (i32.const 1) - (br $label$39) + (then + (if (result i32) + (i32.const 1) + (then + (br $label$39) + ) + (else + (i32.const 0) + ) + ) + ) + (else (i32.const 0) ) - (i32.const 0) ) ) ) @@ -1114,31 +1228,39 @@ (local $2 f32) (if (result f32) (local.get $0) - (block $label$0 - (block $label$11 - (return - (f32.const 239) - ) - (if - (i32.const 0) + (then + (block $label$0 + (block $label$11 (return - (local.get $2) + (f32.const 239) + ) + (if + (i32.const 0) + (then + (return + (local.get $2) + ) + ) ) ) ) ) - (f32.const -9223372036854775808) + (else + (f32.const -9223372036854775808) + ) ) ) (func $unreachable-return-loop-value (result i64) (loop $loop (if (i32.const 1) - (block $block - (br_if $block + (then + (block $block + (br_if $block + (br $loop) + ) (br $loop) ) - (br $loop) ) ) (br $loop) @@ -1152,11 +1274,13 @@ (loop $label$5 (if (i32.const 11) - (block $label$8 - (br_if $label$8 - (unreachable) + (then + (block $label$8 + (br_if $label$8 + (unreachable) + ) + (br $label$5) ) - (br $label$5) ) ) (br $label$5) @@ -1770,9 +1894,13 @@ (func $tiny-switch (if (i32.const 0) - (block $y + (then + (block $y + ) ) - (block $x + (else + (block $x + ) ) ) (block $z @@ -1946,8 +2074,12 @@ (local.set $x (if (result i32) (local.get $p) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1957,21 +2089,27 @@ (local $var$6 f64) (if (i32.const 0) - (drop - (loop $label$3 (result i64) - (block $label$4 (result i64) - (block $label$5 - (block $label$6 - (local.set $var$1 - (if (result f64) - (unreachable) - (br $label$5) - (f64.const 1) + (then + (drop + (loop $label$3 (result i64) + (block $label$4 (result i64) + (block $label$5 + (block $label$6 + (local.set $var$1 + (if (result f64) + (unreachable) + (then + (br $label$5) + ) + (else + (f64.const 1) + ) + ) ) ) ) + (i64.const 1) ) - (i64.const 1) ) ) ) @@ -1988,15 +2126,23 @@ (func $if-flow-2 (result i32) (if (result i32) (i32.const 0) - (unreachable) - (i32.const 2) + (then + (unreachable) + ) + (else + (i32.const 2) + ) ) ) (func $if-flow-3 (result i32) (if (result i32) (i32.const 0) - (i32.const 1) - (unreachable) + (then + (i32.const 1) + ) + (else + (unreachable) + ) ) ) (func $if-flow-4 (result i32) @@ -2004,11 +2150,15 @@ (return (i32.const 0) ) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) - (return - (i32.const 2) + (else + (return + (i32.const 2) + ) ) ) ) @@ -2023,9 +2173,13 @@ (unreachable) (if (i32.const 0) - (nop) - (return - (i32.const 0) + (then + (nop) + ) + (else + (return + (i32.const 0) + ) ) ) ) @@ -2036,52 +2190,68 @@ (loop $label$1 (if (local.get $0) - (block $label$2 - (local.tee $0 - (loop $label$5 - (br_if $label$5 - (block - (unreachable) - (drop - (i32.const 0) + (then + (block $label$2 + (local.tee $0 + (loop $label$5 + (br_if $label$5 + (block + (unreachable) + (drop + (i32.const 0) + ) ) ) ) ) ) ) - (br $label$1) + (else + (br $label$1) + ) ) ) ) (func $drop-restructure-if (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) - (local.get $x) - (block $label$2 (result i32) - (nop) - (i32.const 0) + (then + (local.get $x) + ) + (else + (block $label$2 (result i32) + (nop) + (i32.const 0) + ) ) ) ) (func $drop-restructure-if-final (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) - (local.get $x) - (block $label$2 (result i32) - (nop) - (unreachable) + (then + (local.get $x) + ) + (else + (block $label$2 (result i32) + (nop) + (unreachable) + ) ) ) ) (func $drop-restructure-if-middle (param $x i32) (param $y i32) (result i32) (if (result i32) (local.get $y) - (local.get $x) - (block $label$2 (result i32) - (nop) - (nop) - (i32.const 0) + (then + (local.get $x) + ) + (else + (block $label$2 (result i32) + (nop) + (nop) + (i32.const 0) + ) ) ) ) @@ -2113,13 +2283,15 @@ (func $if-block (if (i32.const 1) - (block $label - (block - (drop - (i32.const 2) - ) - (drop - (i32.const 3) + (then + (block $label + (block + (drop + (i32.const 2) + ) + (drop + (i32.const 3) + ) ) ) ) @@ -2129,7 +2301,7 @@ (block $label (if (br $label) - (block + (then (drop (i32.const 2) ) @@ -2150,42 +2322,58 @@ (func $if-block-br-1 (if (i32.const 1) - (block $label + (then + (block $label + ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) ) (func $if-block-br-2 (if (i32.const 1) - (block $label - (drop - (i32.const 3) + (then + (block $label + (drop + (i32.const 3) + ) ) ) - (nop) + (else + (nop) + ) ) ) (func $if-block-br-3 (if (i32.const 1) - (block $label + (then + (block $label + ) + ) + (else + (nop) ) - (nop) ) ) (func $if-block-br-4-eithre (if (i32.const 1) - (block $label - (drop - (i32.const 2) + (then + (block $label + (drop + (i32.const 2) + ) ) ) - (drop - (i32.const 3) + (else + (drop + (i32.const 3) + ) ) ) ) @@ -2206,8 +2394,10 @@ (block $label$4 (unreachable) ) - (block $label$3 - (br $label$3) + (then + (block $label$3 + (br $label$3) + ) ) ) (unreachable) @@ -2218,26 +2408,36 @@ (func $if-arm-unreachable (if (unreachable) - (block $label$1 - (nop) + (then + (block $label$1 + (nop) + ) + ) + (else + (unreachable) ) - (unreachable) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) - (nop) - (block + (then + (nop) + ) + (else (drop (loop $label$3 (result i64) (br_if $label$3 (if (i32.const 0) - (block $label$4 + (then + (block $label$4 + (unreachable) + ) + ) + (else (unreachable) ) - (unreachable) ) ) (i64.const -9) @@ -2311,14 +2511,20 @@ (loop $label$1 (if (i32.const 0) - (if - (i32.const 0) - (block $label$3 - (block + (then + (if + (i32.const 0) + (then + (block $label$3 + (block + ) + ) + ) + (else + (return + (i32.const -8192) + ) ) - ) - (return - (i32.const -8192) ) ) ) @@ -2400,10 +2606,14 @@ (local.get $0) (i32.const 2) ) - (local.tee $0 - (i32.const 1) + (then + (local.tee $0 + (i32.const 1) + ) + ) + (else + (i32.const 0) ) - (i32.const 0) ) ) (drop @@ -2412,9 +2622,13 @@ (local.get $0) (i32.const 2) ) - (i32.const 0) - (local.tee $0 - (i32.const 1) + (then + (i32.const 0) + ) + (else + (local.tee $0 + (i32.const 1) + ) ) ) ) @@ -2429,8 +2643,12 @@ ) (i32.const 2) ) - (local.get $0) - (i32.const 0) + (then + (local.get $0) + ) + (else + (i32.const 0) + ) ) ) (drop @@ -2441,8 +2659,12 @@ ) (i32.const 2) ) - (i32.const 0) - (local.get $0) + (then + (i32.const 0) + ) + (else + (local.get $0) + ) ) ) (drop @@ -2504,15 +2726,17 @@ (func $ifs-copies-recursive (param $20 i32) (result i32) (if (i32.const 1) - (local.set $20 - (select + (then + (local.set $20 (select - (i32.const 4) + (select + (i32.const 4) + (local.get $20) + (i32.const 3) + ) (local.get $20) - (i32.const 3) + (i32.const 2) ) - (local.get $20) - (i32.const 2) ) ) ) @@ -2538,8 +2762,10 @@ (loop $top (if (i32.const 1) - (local.tee $x - (unreachable) + (then + (local.tee $x + (unreachable) + ) ) ) (br $top) @@ -2552,8 +2778,12 @@ (local.set $x (if (result i32) (i32.const 1) - (unreachable) - (local.get $y) + (then + (unreachable) + ) + (else + (local.get $y) + ) ) ) (br $top) @@ -2600,12 +2830,16 @@ (unreachable) (if (i32.const 0) - (block $A - (return - (i32.const 0) + (then + (block $A + (return + (i32.const 0) + ) ) ) - (nop) + (else + (nop) + ) ) ) (func $do-not-flow-values-through-unreachable-code-b (result i32) @@ -2613,12 +2847,16 @@ (unreachable) (if (i32.const 0) - (block $A - (return - (i32.const 0) + (then + (block $A + (return + (i32.const 0) + ) ) ) - (nop) + (else + (nop) + ) ) ) ) @@ -2658,9 +2896,11 @@ ) (if (i32.const 1026) - (br_if $label$1 - (local.tee $0 - (i32.const -7) + (then + (br_if $label$1 + (local.tee $0 + (i32.const -7) + ) ) ) ) @@ -2686,8 +2926,10 @@ (block (result i32) (if (local.get $x) - (return - (i32.const 5) + (then + (return + (i32.const 5) + ) ) ) (i32.const 6) @@ -2699,8 +2941,12 @@ (select (if (result i32) (unreachable) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) (i32.const 1) (i32.const 2) diff --git a/test/passes/remove-unused-brs_enable-multivalue.wast b/test/passes/remove-unused-brs_enable-multivalue.wast index 493ead96e4c..0deff0db881 100644 --- a/test/passes/remove-unused-brs_enable-multivalue.wast +++ b/test/passes/remove-unused-brs_enable-multivalue.wast @@ -125,26 +125,30 @@ (block $topmost (if (i32.const 1) - (block $block1 - (drop - (i32.const 12) - ) - (block + (then + (block $block1 (drop - (i32.const 1) + (i32.const 12) + ) + (block + (drop + (i32.const 1) + ) + (br $topmost) ) - (br $topmost) ) ) - (block $block3 - (drop - (i32.const 27) - ) - (block + (else + (block $block3 (drop - (i32.const 2) + (i32.const 27) + ) + (block + (drop + (i32.const 2) + ) + (br $topmost) ) - (br $topmost) ) ) ) @@ -154,23 +158,27 @@ (block $topmost (result i32) (if (i32.const 1) - (block $block1 - (drop - (i32.const 12) - ) - (drop - (br_if $topmost - (i32.const 1) - (i32.const 1) + (then + (block $block1 + (drop + (i32.const 12) + ) + (drop + (br_if $topmost + (i32.const 1) + (i32.const 1) + ) ) ) ) - (block $block3 - (drop - (i32.const 27) - ) - (br $topmost - (i32.const 2) + (else + (block $block3 + (drop + (i32.const 27) + ) + (br $topmost + (i32.const 2) + ) ) ) ) @@ -181,11 +189,15 @@ (block $topmost (result i32) (if (result i32) (i32.const 1) - (block $block1 (result i32) - (i32.const 12) + (then + (block $block1 (result i32) + (i32.const 12) + ) ) - (block $block3 (result i32) - (i32.const 27) + (else + (block $block3 (result i32) + (i32.const 27) + ) ) ) ) @@ -194,16 +206,20 @@ (block $topmost (result i32 i64) (if (result i32 i64) (i32.const 1) - (block $block1 (result i32 i64) - (tuple.make 2 - (i32.const 12) - (i64.const 12) + (then + (block $block1 (result i32 i64) + (tuple.make 2 + (i32.const 12) + (i64.const 12) + ) ) ) - (block $block3 (result i32 i64) - (tuple.make 2 - (i32.const 27) - (i64.const 27) + (else + (block $block3 (result i32 i64) + (tuple.make 2 + (i32.const 27) + (i64.const 27) + ) ) ) ) @@ -213,7 +229,9 @@ (block $topmost (if (i32.const 17) - (br $topmost) + (then + (br $topmost) + ) ) ) ) @@ -221,11 +239,13 @@ (block $topmost (if (i32.const 18) - (block - (drop - (i32.const 0) + (then + (block + (drop + (i32.const 0) + ) + (br $topmost) ) - (br $topmost) ) ) ) @@ -263,33 +283,45 @@ (block $a (if (i32.const 0) - (block $block1 - (br $a) + (then + (block $block1 + (br $a) + ) ) - (block $block3 - (br $a) + (else + (block $block3 + (br $a) + ) ) ) ) (block $a (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (block $block6 - (br $a) + (else + (block $block6 + (br $a) + ) ) ) ) (block $a (if (i32.const 0) - (block $block8 - (br $a) + (then + (block $block8 + (br $a) + ) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 1) + ) ) ) ) @@ -297,11 +329,15 @@ (block $b (if (i32.const 0) - (block $block11 - (br $b) + (then + (block $block11 + (br $b) + ) ) - (block $block13 - (br $c) + (else + (block $block13 + (br $c) + ) ) ) ) @@ -321,10 +357,14 @@ (block $block0 (if (i32.const 0) - (return) - (block $block3 + (then (return) ) + (else + (block $block3 + (return) + ) + ) ) ) ) @@ -341,37 +381,45 @@ (block $a (if (i32.const 0) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (block $block2 - (block + (else + (block $block2 + (block + (drop + (i32.const 2) + ) + (br $a) + ) (drop - (i32.const 2) + (i32.const 3) ) - (br $a) - ) - (drop - (i32.const 3) ) ) ) (if (i32.const 0) - (block $block4 - (block + (then + (block $block4 + (block + (drop + (i32.const 2) + ) + (br $a) + ) (drop - (i32.const 2) + (i32.const 3) ) - (br $a) ) + ) + (else (drop - (i32.const 3) + (i32.const 1) ) ) - (drop - (i32.const 1) - ) ) (if (block $block6 (result i32) @@ -383,11 +431,15 @@ ) (i32.const 3) ) - (drop - (i32.const 0) + (then + (drop + (i32.const 0) + ) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 1) + ) ) ) (if @@ -396,20 +448,24 @@ (i32.const 0) ) ) - (block $a - (block - (drop - (i32.const 1) + (then + (block $a + (block + (drop + (i32.const 1) + ) + (br $a) ) - (br $a) ) ) - (block $a - (block - (drop - (i32.const 2) + (else + (block $a + (block + (drop + (i32.const 2) + ) + (br $a) ) - (br $a) ) ) ) @@ -420,11 +476,13 @@ (block $do-once$0 (if (call $b13) - (block - (drop - (i32.const 0) + (then + (block + (drop + (i32.const 0) + ) + (br $do-once$0) ) - (br $do-once$0) ) ) (drop @@ -434,11 +492,13 @@ (block $do-once$0 (if (call $b13) - (block - (drop - (call $b14) + (then + (block + (drop + (call $b14) + ) + (br $do-once$0) ) - (br $do-once$0) ) ) (drop @@ -448,11 +508,13 @@ (block $do-once$0 (if (i32.const 0) - (block - (drop - (call $b14) + (then + (block + (drop + (call $b14) + ) + (br $do-once$0) ) - (br $do-once$0) ) ) (drop @@ -464,9 +526,11 @@ (local.tee $x (i32.const 1) ) - (br $do-once$0 - (local.tee $x - (i32.const 2) + (then + (br $do-once$0 + (local.tee $x + (i32.const 2) + ) ) ) ) @@ -476,7 +540,7 @@ (func $loops (loop $in (block $out - (if (i32.const 0) (br $out)) + (if (i32.const 0) (then (br $out))) (br $in) ;; we can conditionalize this, and then the br out can vanish ) ) @@ -485,13 +549,13 @@ ) (loop (block $out - (if (i32.const 0) (br $out)) + (if (i32.const 0) (then (br $out))) (br $out) ) ) (loop $in (block $out - (if (i32.const 0) (br $out)) + (if (i32.const 0) (then (br $out))) (br $out) ) ) @@ -501,28 +565,30 @@ ) (loop $in (block $out - (if (i32.const 0) (br $out)) + (if (i32.const 0) (then (br $out))) (br_if $in (i32.const 1)) ) ) (loop $in (block $out - (if (i32.const 0) (br $in)) + (if (i32.const 0) (then (br $in))) (br $out) ) ) (loop $in (block $out - (if (i32.const 0) (unreachable)) + (if (i32.const 0) (then (unreachable))) (br $in) ) ) (loop $in (block $out (if (i32.const 0) - (block - (call $loops) - (br $out) + (then + (block + (call $loops) + (br $out) + ) ) ) (br $in) @@ -530,7 +596,7 @@ ) (loop $in-todo ;; br_if into if (block $out-todo - (if (i32.const 0) (br $out-todo)) + (if (i32.const 0) (then (br $out-todo))) (call $loops) (br $in-todo) ) @@ -538,8 +604,12 @@ (loop $in (block $out (if (i32.const 0) - (br $out) - (call $loops) + (then + (br $out) + ) + (else + (call $loops) + ) ) (br $in) ) @@ -547,8 +617,12 @@ (loop $in (block $out (if (i32.const 0) - (call $loops) - (br $out) + (then + (call $loops) + ) + (else + (br $out) + ) ) (br $in) ) @@ -556,11 +630,15 @@ (loop $in (block $out (if (i32.const 0) - (block - (drop (i32.const 1)) - (call $loops) + (then + (block + (drop (i32.const 1)) + (call $loops) + ) + ) + (else + (br $out) ) - (br $out) ) (br $in) ) @@ -568,8 +646,12 @@ (loop $in (block $out (if (i32.const 0) - (br $out) - (call $loops) + (then + (br $out) + ) + (else + (call $loops) + ) ) (drop (i32.const 100)) (br $in) @@ -578,8 +660,12 @@ (loop $in (block $out (if (i32.const 0) - (call $loops) - (br $out) + (then + (call $loops) + ) + (else + (br $out) + ) ) (drop (i32.const 101)) (br $in) @@ -588,11 +674,15 @@ (loop $in (block $out (if (i32.const 0) - (block - (drop (i32.const 1)) - (call $loops) + (then + (block + (drop (i32.const 1)) + (call $loops) + ) + ) + (else + (br $out) ) - (br $out) ) (drop (i32.const 102)) (br $in) @@ -601,8 +691,12 @@ (loop $in (block $out (if (i32.const 0) - (br $out) - (call $loops) + (then + (br $out) + ) + (else + (call $loops) + ) ) (return) (br $in) @@ -611,8 +705,12 @@ (loop $in (block $out (if (i32.const 0) - (br $out) - (call $loops) + (then + (br $out) + ) + (else + (call $loops) + ) ) (br $out) (br $in) @@ -621,8 +719,12 @@ (loop $in (block $out (if (i32.const 0) - (br $out) - (call $loops) + (then + (br $out) + ) + (else + (call $loops) + ) ) (drop (block $out2 (result i32) @@ -677,14 +779,14 @@ (func $br_if_in_block (result i32) (block $outval (result i32) (block $in - (if (i32.const 1) (br $in) (br $in)) + (if (i32.const 1) (then (br $in) )(else (br $in))) (drop (i32.const 2)) - (if (i32.const 3) (unreachable) (br $in)) + (if (i32.const 3) (then (unreachable) )(else (br $in))) (drop (i32.const 4)) - (if (i32.const 5) (br $in) (unreachable)) + (if (i32.const 5) (then (br $in) )(else (unreachable))) (drop (i32.const 6)) ) - (if (result i32) (i32.const 6) (br $outval (i32.const 7)) (i32.const 8)) + (if (result i32) (i32.const 6) (then (br $outval (i32.const 7)) )(else (i32.const 8))) ) ) (func $threading @@ -694,7 +796,9 @@ (block $out (block $in (if (i32.const 1) - (br $in) + (then + (br $in) + ) ) (br_if $in (i32.const 2)) (br $value-in (i32.const 3)) @@ -710,7 +814,9 @@ (block $stack3 (block $stack4 (if (i32.const 1) - (br $stack4) + (then + (br $stack4) + ) ) (unreachable) ) @@ -727,13 +833,17 @@ (block $out (result i32) (if (local.get $x) - (br $out - (block (result i32) - (local.set $x (i32.const 0)) - (i32.const 1) + (then + (br $out + (block (result i32) + (local.set $x (i32.const 0)) + (i32.const 1) + ) ) ) - (br_if $leave (i32.const 1)) + (else + (br_if $leave (i32.const 1)) + ) ) (unreachable) ) @@ -747,11 +857,15 @@ (block $out (result i32) (if (local.get $x) - (br_if $leave (i32.const 1)) - (br $out - (block (result i32) - (local.set $x (i32.const 0)) - (i32.const 1) + (then + (br_if $leave (i32.const 1)) + ) + (else + (br $out + (block (result i32) + (local.set $x (i32.const 0)) + (i32.const 1) + ) ) ) ) @@ -767,11 +881,13 @@ (block $out (result i32) (if (local.get $x) - (br $out - (block (result i32) - (drop (call $if-to-br_if-value-sideeffect (i32.const 0) (i32.const 1))) - (nop) - (i32.const 1) + (then + (br $out + (block (result i32) + (drop (call $if-to-br_if-value-sideeffect (i32.const 0) (i32.const 1))) + (nop) + (i32.const 1) + ) ) ) ) @@ -790,19 +906,23 @@ (local.get $j) (i32.const 2147483640) ) - (block $x - (block $y - (block $z - (br_if $y - (local.get $j) + (then + (block $x + (block $y + (block $z + (br_if $y + (local.get $j) + ) + (br $x) ;; don't be confused by this ) - (br $x) ;; don't be confused by this + (nop) ;; get me to the store! ) - (nop) ;; get me to the store! ) ) - (block $switch$26 - (nop) + (else + (block $switch$26 + (nop) + ) ) ) (i32.store @@ -857,9 +977,11 @@ ;; element in the block, (if (i32.const 2) - (block - (drop (call $loop-if)) - (br $outer (i32.const 0)) + (then + (block + (drop (call $loop-if)) + (br $outer (i32.const 0)) + ) ) ) (br $typed) @@ -927,10 +1049,14 @@ (i32.load8_s (i32.const 201460482) ) - (br $label$0) - (block $label$3 - (br_if $label$3 - (local.get $0) + (then + (br $label$0) + ) + (else + (block $label$3 + (br_if $label$3 + (local.get $0) + ) ) ) ) @@ -971,7 +1097,9 @@ ) (if (i32.const 0) - (nop) + (then + (nop) + ) ) ) ) @@ -980,8 +1108,12 @@ (drop (if (result f64) (unreachable) - (f64.const 1) - (br $label$3) + (then + (f64.const 1) + ) + (else + (br $label$3) + ) ) ) (i64.const 1) @@ -992,12 +1124,20 @@ (drop (if (result i32) (unreachable) - (if (result i32) - (i32.const 1) - (br $label$39) ;; if we nop this, then the parent type must change + (then + (if (result i32) + (i32.const 1) + (then + (br $label$39) ;; if we nop this, then the parent type must change + ) + (else + (i32.const 0) + ) + ) + ) + (else (i32.const 0) ) - (i32.const 0) ) ) ) @@ -1008,19 +1148,25 @@ (block $label$0 (if (local.get $0) - (block $label$11 - (return - (f32.const 239) - ) - (if - (i32.const 0) + (then + (block $label$11 (return - (local.get $2) + (f32.const 239) + ) + (if + (i32.const 0) + (then + (return + (local.get $2) + ) + ) ) ) ) - (return - (f32.const -9223372036854775808) + (else + (return + (f32.const -9223372036854775808) + ) ) ) ) @@ -1029,11 +1175,13 @@ (loop $loop (if (i32.const 1) - (block $block - (br_if $block + (then + (block $block + (br_if $block + (br $loop) + ) (br $loop) ) - (br $loop) ) ) (br $loop) ;; we 100% go back to the loop top, the loop is never exited. but opts move code around so that is not obvious anymore, and the loop becomes a nop, but the func has a return value @@ -1047,11 +1195,13 @@ (loop $label$5 (if (i32.const 11) - (block $label$8 ;; this block is none - it has a break, even if not taken - and so looks like it might flow out, - (br_if $label$8 ;; and so we can't move it outside to be the end of the loop's block - (unreachable) + (then + (block $label$8 ;; this block is none - it has a break, even if not taken - and so looks like it might flow out, + (br_if $label$8 ;; and so we can't move it outside to be the end of the loop's block + (unreachable) + ) + (br $label$5) ) - (br $label$5) ) ) (br $label$5) @@ -1554,22 +1704,34 @@ (local.set $x (if (result i32) (local.get $p) - (br $out) - (i32.const 1) + (then + (br $out) + ) + (else + (i32.const 1) + ) ) ) (local.set $x (if (result i32) (local.get $p) - (i32.const 2) - (br $out) + (then + (i32.const 2) + ) + (else + (br $out) + ) ) ) (local.set $x (if (result i32) (local.get $p) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1579,22 +1741,28 @@ (local $var$6 f64) (if (i32.const 0) - (drop - (loop $label$3 (result i64) - (block $label$4 (result i64) - (block $label$5 - (block $label$6 - (local.set $var$1 - (if (result f64) - (unreachable) - (br $label$5) - (f64.const 1) + (then + (drop + (loop $label$3 (result i64) + (block $label$4 (result i64) + (block $label$5 + (block $label$6 + (local.set $var$1 + (if (result f64) + (unreachable) + (then + (br $label$5) + ) + (else + (f64.const 1) + ) + ) ) ) + (nop) ) - (nop) + (i64.const 1) ) - (i64.const 1) ) ) ) @@ -1604,42 +1772,64 @@ (func $if-flow-1 (result i32) (if (i32.const 0) - (return (i32.const 1)) - (return (i32.const 2)) + (then + (return (i32.const 1)) + ) + (else + (return (i32.const 2)) + ) ) ) (func $if-flow-2 (result i32) (if (i32.const 0) - (unreachable) - (return (i32.const 2)) + (then + (unreachable) + ) + (else + (return (i32.const 2)) + ) ) ) (func $if-flow-3 (result i32) (if (i32.const 0) - (return (i32.const 1)) - (unreachable) + (then + (return (i32.const 1)) + ) + (else + (unreachable) + ) ) ) (func $if-flow-4 (result i32) (if (return (i32.const 0)) - (return (i32.const 1)) - (return (i32.const 2)) + (then + (return (i32.const 1)) + ) + (else + (return (i32.const 2)) + ) ) ) (func $iff-flow-fuzz-bug (result i32) (loop $label$1 (if (i32.const 1) - (loop $label$2 - (unreachable) - (if ;; a loop that is never reached at the end of a loop - (i32.const 0) - (nop) - (return + (then + (loop $label$2 + (unreachable) + (if ;; a loop that is never reached at the end of a loop (i32.const 0) + (then + (nop) + ) + (else + (return + (i32.const 0) + ) + ) ) ) ) @@ -1653,12 +1843,14 @@ (block $label$2 (result i32) (if (local.get $0) - (local.set $0 - (loop $label$5 - (br_if $label$5 - (br_if $label$2 - (unreachable) - (i32.const 0) + (then + (local.set $0 + (loop $label$5 + (br_if $label$5 + (br_if $label$2 + (unreachable) + (i32.const 0) + ) ) ) ) @@ -1728,9 +1920,11 @@ (block $label (if (i32.const 1) - (block - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (block + (drop (i32.const 2)) + (drop (i32.const 3)) + ) ) ) ) @@ -1739,9 +1933,11 @@ (block $label (if (br $label) ;; use outside of arm - (block - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (block + (drop (i32.const 2)) + (drop (i32.const 3)) + ) ) ) ) @@ -1750,7 +1946,9 @@ (block $label (if (i32.const 1) - (br $label) + (then + (br $label) + ) ) ) ) @@ -1758,8 +1956,12 @@ (block $label (if (i32.const 1) - (br $label) - (drop (i32.const 3)) + (then + (br $label) + ) + (else + (drop (i32.const 3)) + ) ) ) ) @@ -1767,8 +1969,12 @@ (block $label (if (i32.const 1) - (drop (i32.const 3)) - (br $label) + (then + (drop (i32.const 3)) + ) + (else + (br $label) + ) ) ) ) @@ -1776,8 +1982,12 @@ (block $label (if (i32.const 1) - (br $label) - (br $label) + (then + (br $label) + ) + (else + (br $label) + ) ) ) ) @@ -1785,8 +1995,12 @@ (block $label (if (i32.const 1) - (drop (i32.const 2)) - (drop (i32.const 3)) + (then + (drop (i32.const 2)) + ) + (else + (drop (i32.const 3)) + ) ) ) ) @@ -1794,8 +2008,12 @@ (block $label (result i32) (if (result i32) (i32.const 1) - (i32.const 2) - (i32.const 3) + (then + (i32.const 2) + ) + (else + (i32.const 3) + ) ) ) ) @@ -1808,7 +2026,9 @@ (block $label$4 (unreachable) ) - (br $label$3) + (then + (br $label$3) + ) ) ) (unreachable) @@ -1820,31 +2040,43 @@ (block $label$1 (if (unreachable) ;; unreachable condition - (nop) - (unreachable) + (then + (nop) + ) + (else + (unreachable) + ) ) ) ) (func $propagate-type-if-we-optimize (if (i32.const 1) - (nop) - (block - (drop - (loop $label$3 (result i64) - (br_if $label$3 - (block $label$4 (result i32) - (if - (i32.const 0) - (unreachable) - (unreachable) + (then + (nop) + ) + (else + (block + (drop + (loop $label$3 (result i64) + (br_if $label$3 + (block $label$4 (result i32) + (if + (i32.const 0) + (then + (unreachable) + ) + (else + (unreachable) + ) + ) ) ) + (i64.const -9) ) - (i64.const -9) ) + (unreachable) ) - (unreachable) ) ) ) @@ -1905,15 +2137,21 @@ (loop $label$1 (if (i32.const 0) - (block $label$3 - (if - (i32.const 0) - (block - (nop) - (br $label$3) - ) - (return - (i32.const -8192) + (then + (block $label$3 + (if + (i32.const 0) + (then + (block + (nop) + (br $label$3) + ) + ) + (else + (return + (i32.const -8192) + ) + ) ) ) ) @@ -1950,13 +2188,17 @@ (local.get $x) (i32.const 1) ) - (i32.mul - (i32.const 2) - (i32.const 3) + (then + (i32.mul + (i32.const 2) + (i32.const 3) + ) ) - (i32.mul - (i32.const 2) - (i32.const 3) + (else + (i32.mul + (i32.const 2) + (i32.const 3) + ) ) ) ) @@ -1966,13 +2208,17 @@ (local.get $x) (i32.const 1) ) - (i32.add - (i32.const 2) - (i32.const 3) + (then + (i32.add + (i32.const 2) + (i32.const 3) + ) ) - (i32.add - (i32.const 2) - (i32.const 3) + (else + (i32.add + (i32.const 2) + (i32.const 3) + ) ) ) ) @@ -1983,8 +2229,12 @@ (local.get $0) (i32.const 2) ) - (i32.const 1) - (i32.const 0) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) )) ) (func $no-selectify-when-arm-side-effects (param $0 i32) @@ -1993,16 +2243,24 @@ (local.get $0) (i32.const 2) ) - (local.tee $0 (i32.const 1)) - (i32.const 0) + (then + (local.tee $0 (i32.const 1)) + ) + (else + (i32.const 0) + ) )) (drop (if (result i32) (i32.rem_s (local.get $0) (i32.const 2) ) - (i32.const 0) - (local.tee $0 (i32.const 1)) + (then + (i32.const 0) + ) + (else + (local.tee $0 (i32.const 1)) + ) )) ) (func $no-selectify-when-effects-invalidate (param $0 i32) @@ -2012,16 +2270,24 @@ (local.tee $0 (i32.const 3)) (i32.const 2) ) - (local.get $0) - (i32.const 0) + (then + (local.get $0) + ) + (else + (i32.const 0) + ) )) (drop (if (result i32) (i32.rem_s (local.tee $0 (i32.const 3)) (i32.const 2) ) - (i32.const 0) - (local.get $0) + (then + (i32.const 0) + ) + (else + (local.get $0) + ) )) ;; but different locals do not invalidate (drop (if (result i32) @@ -2029,8 +2295,12 @@ (local.tee $0 (i32.const 3)) (i32.const 2) ) - (i32.const 0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (local.get $1) + ) )) ) (func $if-one-side (result i32) @@ -2038,8 +2308,12 @@ (local.set $x (if (result i32) (i32.const 1) - (i32.const 2) - (local.get $x) + (then + (i32.const 2) + ) + (else + (local.get $x) + ) ) ) (local.get $x) @@ -2049,8 +2323,12 @@ (local.set $x (if (result i32) (i32.const 1) - (local.get $x) - (i32.const 2) + (then + (local.get $x) + ) + (else + (i32.const 2) + ) ) ) (local.get $x) @@ -2068,8 +2346,12 @@ (local.tee $x (if (result i32) (i32.const -3) - (i32.const -4) - (local.get $x) + (then + (i32.const -4) + ) + (else + (local.get $x) + ) ) ) ) @@ -2080,16 +2362,28 @@ (local.set $20 (if (result i32) (i32.const 1) - (if (result i32) - (i32.const 2) + (then (if (result i32) - (i32.const 3) - (i32.const 4) - (local.get $20) + (i32.const 2) + (then + (if (result i32) + (i32.const 3) + (then + (i32.const 4) + ) + (else + (local.get $20) + ) + ) + ) + (else + (local.get $20) + ) ) + ) + (else (local.get $20) ) - (local.get $20) ) ) (local.get $20) @@ -2101,8 +2395,12 @@ (local.set $x (if (result i32) (i32.const 1) - (local.get $x) - (local.get $y) + (then + (local.get $x) + ) + (else + (local.get $y) + ) ) ) (br $top) @@ -2115,8 +2413,12 @@ (local.set $x (if (result i32) (i32.const 1) - (unreachable) - (local.get $x) + (then + (unreachable) + ) + (else + (local.get $x) + ) ) ) (br $top) @@ -2129,8 +2431,12 @@ (local.set $x (if (result i32) (i32.const 1) - (unreachable) - (local.get $y) + (then + (unreachable) + ) + (else + (local.get $y) + ) ) ) (br $top) @@ -2144,8 +2450,12 @@ (local.tee $x (if (result i32) (i32.const 1) - (local.get $x) - (i32.const 2) + (then + (local.get $x) + ) + (else + (i32.const 2) + ) ) ) ) @@ -2157,8 +2467,12 @@ (nop) (if (local.get $x) - (br $loop) - (local.set $x (i32.const 1)) + (then + (br $loop) + ) + (else + (local.set $x (i32.const 1)) + ) ) ) (local.get $x) @@ -2168,8 +2482,12 @@ (nop) (if (result i32) (local.get $x) - (br $loop) - (i32.const 1) + (then + (br $loop) + ) + (else + (i32.const 1) + ) ) ) ) @@ -2179,10 +2497,14 @@ (block $A (if (i32.const 0) - (return - (i32.const 0) ;; seems to flow out, but we are in unreachable code, and do not actually reach anywhere + (then + (return + (i32.const 0) ;; seems to flow out, but we are in unreachable code, and do not actually reach anywhere + ) + ) + (else + (br $A) ;; can be a nop ) - (br $A) ;; can be a nop ) ) ) @@ -2193,10 +2515,14 @@ (block $A (if (i32.const 0) - (return - (i32.const 0) + (then + (return + (i32.const 0) + ) + ) + (else + (br $A) ) - (br $A) ) ) ) @@ -2208,17 +2534,21 @@ (local.tee $0 ;; note side effect; it's ok (i32.const 1024) ) - (br_if $label$1 - (i32.eqz - (i32.const -4) + (then + (br_if $label$1 + (i32.eqz + (i32.const -4) + ) ) ) ) (if (i32.const 1025) - (br_if $label$1 - (i32.eqz - (i32.const -5) + (then + (br_if $label$1 + (i32.eqz + (i32.const -5) + ) ) ) ) @@ -2226,17 +2556,21 @@ (local.tee $0 ;; note side effect; it's ok (i32.const 1025) ) - (br_if $label$1 - (i32.eqz - (i32.const -6) + (then + (br_if $label$1 + (i32.eqz + (i32.const -6) + ) ) ) ) (if (i32.const 1026) - (br_if $label$1 - (local.tee $0 ;; but here it is *not* ok - (i32.const -7) + (then + (br_if $label$1 + (local.tee $0 ;; but here it is *not* ok + (i32.const -7) + ) ) ) ) @@ -2262,8 +2596,10 @@ (block (result i32) (if (local.get $x) - (return - (i32.const 5) + (then + (return + (i32.const 5) + ) ) ) (i32.const 6) @@ -2275,8 +2611,12 @@ (select (if (result i32) (unreachable) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) (i32.const 1) (i32.const 2) diff --git a/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast b/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast index 909e9514ac1..5c0fe15363b 100644 --- a/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast +++ b/test/passes/remove-unused-brs_precompute_vacuum_remove-unused-brs.wast @@ -11,14 +11,18 @@ (i32.const 9) (i32.const 0) ) - (return - (f64.const -3.4) + (then + (return + (f64.const -3.4) + ) ) ) (if (local.get $x) - (return - (f64.const 5.6) + (then + (return + (f64.const 5.6) + ) ) ) (return diff --git a/test/passes/remove-unused-brs_shrink-level=1.txt b/test/passes/remove-unused-brs_shrink-level=1.txt index c32b64d0330..06b4e4e7278 100644 --- a/test/passes/remove-unused-brs_shrink-level=1.txt +++ b/test/passes/remove-unused-brs_shrink-level=1.txt @@ -17,10 +17,14 @@ (drop (if (result i32) (i32.const 1) - (i32.load - (i32.const 10) + (then + (i32.load + (i32.const 10) + ) + ) + (else + (i32.const 27) ) - (i32.const 27) ) ) (drop @@ -36,10 +40,14 @@ (drop (if (result i32) (i32.const 1) - (i32.trunc_f64_u - (f64.const 12.34) + (then + (i32.trunc_f64_u + (f64.const 12.34) + ) + ) + (else + (i32.const 27) ) - (i32.const 27) ) ) (i32.const 0) @@ -108,9 +116,11 @@ (i32.const 0) ) ) - (block $out8 - (nop) - (nop) + (then + (block $out8 + (nop) + (nop) + ) ) ) (block $out83 diff --git a/test/passes/remove-unused-brs_shrink-level=1.wast b/test/passes/remove-unused-brs_shrink-level=1.wast index 2033ffd7ced..ce141c43003 100644 --- a/test/passes/remove-unused-brs_shrink-level=1.wast +++ b/test/passes/remove-unused-brs_shrink-level=1.wast @@ -7,33 +7,49 @@ (drop (if (result i32) ;; with shrinking, this can become a select (i32.const 1) - (block $block1 (result i32) - (i32.const 12) + (then + (block $block1 (result i32) + (i32.const 12) + ) ) - (block $block3 (result i32) - (i32.const 27) + (else + (block $block3 (result i32) + (i32.const 27) + ) ) ) ) (drop (if (result i32) (i32.const 1) - (i32.load (i32.const 10)) ;; load may have side effects, unless ignored - (i32.const 27) + (then + (i32.load (i32.const 10)) ;; load may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (drop (if (result i32) (i32.const 1) - (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored - (i32.const 27) + (then + (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (drop (if (result i32) (i32.const 1) - (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored - (i32.const 27) + (then + (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (i32.const 0) diff --git a/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt b/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt index 6f8f400424a..8398d6ee6fe 100644 --- a/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt +++ b/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.txt @@ -108,9 +108,11 @@ (i32.const 0) ) ) - (block $out8 - (nop) - (nop) + (then + (block $out8 + (nop) + (nop) + ) ) ) (block $out83 diff --git a/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast b/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast index 08d3fb31851..4f15dc9c020 100644 --- a/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast +++ b/test/passes/remove-unused-brs_shrink-level=1_ignore-implicit-traps.wast @@ -7,33 +7,49 @@ (drop (if (result i32) ;; with shrinking, this can become a select (i32.const 1) - (block $block1 (result i32) - (i32.const 12) + (then + (block $block1 (result i32) + (i32.const 12) + ) ) - (block $block3 (result i32) - (i32.const 27) + (else + (block $block3 (result i32) + (i32.const 27) + ) ) ) ) (drop (if (result i32) (i32.const 1) - (i32.load (i32.const 10)) ;; load may have side effects, unless ignored - (i32.const 27) + (then + (i32.load (i32.const 10)) ;; load may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (drop (if (result i32) (i32.const 1) - (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored - (i32.const 27) + (then + (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (drop (if (result i32) (i32.const 1) - (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored - (i32.const 27) + (then + (i32.trunc_f64_u (f64.const 12.34)) ;; float to int may have side effects, unless ignored + ) + (else + (i32.const 27) + ) ) ) (i32.const 0) diff --git a/test/passes/remove-unused-names_code-folding.txt b/test/passes/remove-unused-names_code-folding.txt index 7d7505b0739..d0486b3c784 100644 --- a/test/passes/remove-unused-names_code-folding.txt +++ b/test/passes/remove-unused-names_code-folding.txt @@ -6,7 +6,9 @@ (func $ifs (if (i32.const 0) - (nop) + (then + (nop) + ) ) (block (drop @@ -16,8 +18,12 @@ ) (if (i32.const 0) - (nop) - (unreachable) + (then + (nop) + ) + (else + (unreachable) + ) ) (drop (block (result i32) @@ -33,13 +39,17 @@ (drop (if (result i32) (i32.const 0) - (i32.add - (i32.const 1) - (i32.const 2) + (then + (i32.add + (i32.const 1) + (i32.const 2) + ) ) - (i32.add - (i32.const 1) - (i32.const 333333333) + (else + (i32.add + (i32.const 1) + (i32.const 333333333) + ) ) ) ) @@ -56,8 +66,10 @@ (block (if (i32.const 0) - (unreachable) - (block + (then + (unreachable) + ) + (else ) ) (nop) @@ -65,24 +77,30 @@ (block (if (i32.const 0) - (block + (then + ) + (else + (unreachable) ) - (unreachable) ) (nop) ) (if (i32.const 0) - (block + (then (nop) (unreachable) ) - (nop) + (else + (nop) + ) ) (if (i32.const 0) - (nop) - (block + (then + (nop) + ) + (else (nop) (unreachable) ) @@ -105,8 +123,10 @@ (block (if (i32.const 0) - (unreachable) - (block + (then + (unreachable) + ) + (else ) ) (drop @@ -119,9 +139,11 @@ (block (if (i32.const 0) - (block + (then + ) + (else + (unreachable) ) - (unreachable) ) (drop (i32.add @@ -132,7 +154,7 @@ ) (if (i32.const 0) - (block + (then (drop (i32.add (i32.const 1) @@ -141,22 +163,26 @@ ) (unreachable) ) - (drop - (i32.add - (i32.const 1) - (i32.const 2) + (else + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) ) ) ) (if (i32.const 0) - (drop - (i32.add - (i32.const 1) - (i32.const 2) + (then + (drop + (i32.add + (i32.const 1) + (i32.const 2) + ) ) ) - (block + (else (drop (i32.add (i32.const 1) @@ -171,7 +197,7 @@ (block (if (i32.const 1) - (block + (then (drop (i32.const -1234) ) @@ -179,8 +205,10 @@ (i32.const -1000) ) ) - (drop - (i32.const 999) + (else + (drop + (i32.const 999) + ) ) ) (drop @@ -193,7 +221,7 @@ (block (result i32) (if (i32.const 2) - (block + (then (drop (i32.const -1234) ) @@ -201,8 +229,10 @@ (i32.const -1000) ) ) - (drop - (i32.const 999) + (else + (drop + (i32.const 999) + ) ) ) (drop @@ -217,7 +247,7 @@ (block (result i32) (if (i32.const 3) - (block + (then (drop (i32.const -1234) ) @@ -225,8 +255,10 @@ (i32.const -1000) ) ) - (drop - (i32.const 999) + (else + (drop + (i32.const 999) + ) ) ) (drop @@ -242,34 +274,36 @@ (block (if (i32.const 0) - (if - (i32.const 0) - (block - (drop - (i32.const -1234) - ) - (drop - (i32.const -1000) - ) - (br $folding-inner0) - ) - (block - (drop - (i32.const 999) + (then + (if + (i32.const 0) + (then + (drop + (i32.const -1234) + ) + (drop + (i32.const -1000) + ) + (br $folding-inner0) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 999) + ) + (drop + (i32.const 1) + ) + (br $folding-inner0) ) - (br $folding-inner0) ) ) ) (if (i32.const 0) - (block + (then (if (i32.const 0) - (block + (then (drop (i32.const -1234) ) @@ -277,7 +311,7 @@ (i32.const -1000) ) ) - (block + (else (drop (i32.const 999) ) @@ -292,12 +326,12 @@ ) (if (i32.const 0) - (block + (then (if (i32.const 0) - (block + (then ) - (block + (else (drop (i32.const 999) ) @@ -311,10 +345,10 @@ ) (if (i32.const 0) - (block + (then (if (i32.const 0) - (block + (then (drop (i32.const -1234) ) @@ -322,7 +356,7 @@ (i32.const -1000) ) ) - (block + (else ) ) (br $folding-inner0) @@ -332,7 +366,7 @@ (block (if (i32.const 9999) - (block + (then (drop (i32.const -51234) ) @@ -340,7 +374,7 @@ (i32.const -51000) ) ) - (block + (else (drop (i32.const 5999) ) @@ -357,7 +391,7 @@ (block (result i32) (if (i32.const 9999) - (block + (then (drop (i32.const -51234) ) @@ -365,7 +399,7 @@ (i32.const -51000) ) ) - (block + (else (drop (i32.const 5999) ) @@ -383,7 +417,7 @@ (drop (if (result i32) (i32.const 9999) - (block (result i32) + (then (drop (i32.const -51234) ) @@ -393,7 +427,7 @@ (unreachable) (i32.const 10) ) - (block (result i32) + (else (drop (i32.const 5999) ) @@ -414,7 +448,7 @@ (func $no-grandparent (if (i32.const 9999) - (block + (then (drop (i32.const -51234) ) @@ -424,7 +458,7 @@ (unreachable) (unreachable) ) - (block + (else (drop (i32.const 5999) ) @@ -440,7 +474,7 @@ (block (if (i32.const 9999) - (block + (then (drop (i32.const -51234) ) @@ -448,7 +482,7 @@ (i32.const -51000) ) ) - (block + (else (drop (i32.const 5999) ) @@ -478,44 +512,52 @@ (block (if (local.get $x) - (br_if $out - (local.get $y) + (then + (br_if $out + (local.get $y) + ) ) - (br_if $out2 - (local.get $y) + (else + (br_if $out2 + (local.get $y) + ) ) ) (nop) ) (if (i32.const 1234) - (if - (local.get $x) - (block - (nop) - (br_if $out - (local.get $y) + (then + (if + (local.get $x) + (then + (nop) + (br_if $out + (local.get $y) + ) + (nop) ) - (nop) - ) - (block - (nop) - (br_if $out2 - (local.get $y) + (else + (nop) + (br_if $out2 + (local.get $y) + ) + (nop) ) - (nop) ) ) ) (if (local.get $x) - (block $left - (br_if $left - (local.get $y) + (then + (block $left + (br_if $left + (local.get $y) + ) + (nop) ) - (nop) ) - (block + (else (br_if $out (local.get $y) ) @@ -524,17 +566,19 @@ ) (if (local.get $x) - (block + (then (br_if $out (local.get $y) ) (nop) ) - (block $right - (br_if $right - (local.get $y) + (else + (block $right + (br_if $right + (local.get $y) + ) + (nop) ) - (nop) ) ) ) @@ -550,11 +594,15 @@ (block $x (if (i32.const 0) - (br $x) + (then + (br $x) + ) ) (if (i32.const 0) - (br $x) + (then + (br $x) + ) ) (br $x) ) @@ -569,7 +617,7 @@ (block $x (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -581,7 +629,7 @@ ) (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -604,7 +652,7 @@ (block $x (if (i32.const 0) - (block + (then (drop (i32.const 1000) ) @@ -613,7 +661,7 @@ ) (if (i32.const 0) - (block + (then (drop (i32.const 2000) ) @@ -665,10 +713,12 @@ (block (if (i32.const 1) - (drop - (i32.const 3) + (then + (drop + (i32.const 3) + ) ) - (block + (else (drop (i32.const 4) ) @@ -725,7 +775,9 @@ (block $x (if (i32.const 0) - (br $x) + (then + (br $x) + ) ) ) (drop @@ -739,7 +791,7 @@ (block $y (result i32) (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -766,7 +818,7 @@ (block $z (result i32) (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -790,7 +842,7 @@ (block $w (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -812,7 +864,7 @@ (block $x1 (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -837,7 +889,7 @@ ) (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -860,7 +912,7 @@ ) (if (i32.const 0) - (block + (then (drop (i32.const 1) ) @@ -884,15 +936,21 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) ) (return) @@ -915,15 +973,21 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (unreachable) ) @@ -947,15 +1011,21 @@ (block (result i32) (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (i32.const 4) ) @@ -979,15 +1049,19 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (block + (then (nop) (nop) (nop) @@ -1028,15 +1102,19 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner1) + (then + (br $folding-inner1) + ) ) (if (i32.const 3) - (block + (then (drop (i32.const 10) ) @@ -1069,19 +1147,27 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 1) - (br $folding-inner1) + (then + (br $folding-inner1) + ) ) (if (i32.const 1) - (br $folding-inner1) + (then + (br $folding-inner1) + ) ) ) (return) @@ -1124,15 +1210,21 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) ) (return) @@ -1145,7 +1237,7 @@ (func $terminating-not-worth-it (if (i32.const 1) - (block + (then (nop) (nop) (unreachable) @@ -1153,7 +1245,7 @@ ) (if (i32.const 2) - (block + (then (nop) (nop) (unreachable) @@ -1161,7 +1253,7 @@ ) (if (i32.const 3) - (block + (then (nop) (nop) (unreachable) @@ -1173,15 +1265,21 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) ) (return) @@ -1204,19 +1302,25 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (block + (then (nop) (return (i32.add @@ -1245,19 +1349,25 @@ (block (result i32) (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (block + (then (nop) (return (i32.add @@ -1284,27 +1394,39 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 4) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 5) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 6) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (unreachable) ) @@ -1321,26 +1443,36 @@ (block (if (i32.const 1) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 2) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 4) - (br $folding-inner0) + (then + (br $folding-inner0) + ) ) (if (i32.const 3) - (return - (i32.add - (i32.const 1) - (i32.const 234567) + (then + (return + (i32.add + (i32.const 1) + (i32.const 234567) + ) ) ) ) @@ -1368,7 +1500,9 @@ (func $drop-if-with-value-but-unreachable (if (i32.const 0) - (nop) + (then + (nop) + ) ) (block (drop @@ -1380,8 +1514,12 @@ ) (if (i32.const 0) - (nop) - (unreachable) + (then + (nop) + ) + (else + (unreachable) + ) ) (nop) (drop @@ -1400,13 +1538,17 @@ (drop (if (result i32) (i32.const 0) - (i32.add - (i32.const 1) - (i32.const 2) + (then + (i32.add + (i32.const 1) + (i32.const 2) + ) ) - (i32.add - (i32.const 1) - (i32.const 333333333) + (else + (i32.add + (i32.const 1) + (i32.const 333333333) + ) ) ) ) @@ -1417,17 +1559,23 @@ (block $x (if (i32.const 0) - (br $x) + (then + (br $x) + ) ) (if (i32.const 0) - (br $x) + (then + (br $x) + ) ) (br $x) ) (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (drop (i32.const 1) @@ -1447,27 +1595,33 @@ (block (if (i32.const 0) - (block + (then (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (br $folding-inner0) ) ) (if (i32.const 0) - (block + (then (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (br $folding-inner0) ) ) (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (br $folding-inner0) ) @@ -1492,26 +1646,30 @@ (block (if (i32.const 0) - (block + (then (if (i32.add (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) (br $folding-inner0) ) ) (if (i32.const 0) - (block + (then (if (i32.add (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) (br $folding-inner0) ) @@ -1521,7 +1679,9 @@ (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) (br $folding-inner0) ) @@ -1546,26 +1706,30 @@ (block (if (i32.const 0) - (block + (then (if (i32.add (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) (br $out) ) ) (if (i32.const 0) - (block + (then (if (i32.add (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) (br $out) ) @@ -1575,7 +1739,9 @@ (i32.const 0) (i32.const 1) ) - (br $middle) + (then + (br $middle) + ) ) ) ) @@ -1613,11 +1779,15 @@ (block (if (i32.const 0) - (br $out) + (then + (br $out) + ) ) (if (i32.const 0) - (br $out) + (then + (br $out) + ) ) (br $out) ) @@ -1628,7 +1798,9 @@ (i32.const 0) (i32.const 1) ) - (br $x) + (then + (br $x) + ) ) (drop (i32.const 1) @@ -1649,11 +1821,15 @@ (block (if (i32.const 0) - (br $out) + (then + (br $out) + ) ) (if (i32.const 0) - (br $out) + (then + (br $out) + ) ) (br $out) ) @@ -1664,7 +1840,9 @@ (i32.const 0) (i32.const 1) ) - (br $x) + (then + (br $x) + ) ) ) (drop @@ -1682,11 +1860,13 @@ (block (if (local.get $x) - (block + (then ) - (drop - (call $if-suffix - (i32.const -1) + (else + (drop + (call $if-suffix + (i32.const -1) + ) ) ) ) @@ -1697,11 +1877,13 @@ (block (result i32) (if (local.get $x) - (block + (then ) - (drop - (call $if-suffix - (i32.const -2) + (else + (drop + (call $if-suffix + (i32.const -2) + ) ) ) ) diff --git a/test/passes/remove-unused-names_code-folding.wast b/test/passes/remove-unused-names_code-folding.wast index 9979a0a3c28..642bbdf7c09 100644 --- a/test/passes/remove-unused-names_code-folding.wast +++ b/test/passes/remove-unused-names_code-folding.wast @@ -1,162 +1,222 @@ (module (func $ifs - (if (i32.const 0) (nop)) - (if (i32.const 0) (nop) (nop)) - (if (i32.const 0) (nop) (unreachable)) + (if (i32.const 0) (then (nop))) + (if (i32.const 0) (then (nop) )(else (nop))) + (if (i32.const 0) (then (nop) )(else (unreachable))) (drop (if (result i32) (i32.const 0) - (i32.add (i32.const 1) (i32.const 2)) - (i32.add (i32.const 1) (i32.const 2)) + (then + (i32.add (i32.const 1) (i32.const 2)) + ) + (else + (i32.add (i32.const 1) (i32.const 2)) + ) ) ) (drop (if (result i32) (i32.const 0) - (i32.add (i32.const 1) (i32.const 2)) - (i32.add (i32.const 1) (i32.const 333333333)) + (then + (i32.add (i32.const 1) (i32.const 2)) + ) + (else + (i32.add (i32.const 1) (i32.const 333333333)) + ) ) ) ) (func $ifs-blocks (if (i32.const 0) - (block - (nop) + (then + (block + (nop) + ) ) - (block - (nop) + (else + (block + (nop) + ) ) ) (if (i32.const 0) - (block - (unreachable) - (nop) + (then + (block + (unreachable) + (nop) + ) ) - (block - (nop) + (else + (block + (nop) + ) ) ) (if (i32.const 0) - (block - (nop) + (then + (block + (nop) + ) ) - (block - (unreachable) - (nop) + (else + (block + (unreachable) + (nop) + ) ) ) (if (i32.const 0) - (block - (nop) - (unreachable) + (then + (block + (nop) + (unreachable) + ) ) - (block - (nop) + (else + (block + (nop) + ) ) ) (if (i32.const 0) - (block - (nop) + (then + (block + (nop) + ) ) - (block - (nop) - (unreachable) + (else + (block + (nop) + (unreachable) + ) ) ) ) (func $ifs-blocks-big (if (i32.const 0) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (else + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 0) - (block - (unreachable) - (drop (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (unreachable) + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (else + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 0) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) - (block - (unreachable) - (drop (i32.add (i32.const 1) (i32.const 2))) + (else + (block + (unreachable) + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 0) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) - (unreachable) + (then + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + (unreachable) + ) ) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (else + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 0) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + ) ) - (block - (drop (i32.add (i32.const 1) (i32.const 2))) - (unreachable) + (else + (block + (drop (i32.add (i32.const 1) (i32.const 2))) + (unreachable) + ) ) ) ) (func $ifs-blocks-long (if (i32.const 1) - (block - (drop (i32.const -1234)) - (drop (i32.const -1000)) - (drop (i32.const 1)) - (nop) - (unreachable) - ) - (block - (drop (i32.const 999)) - (drop (i32.const 1)) - (nop) - (unreachable) - ) - ) - (drop - (if (result i32) (i32.const 2) - (block (result i32) + (then + (block (drop (i32.const -1234)) (drop (i32.const -1000)) (drop (i32.const 1)) (nop) (unreachable) - (i32.const 2) ) - (block (result i32) + ) + (else + (block (drop (i32.const 999)) (drop (i32.const 1)) (nop) (unreachable) - (i32.const 2) + ) + ) + ) + (drop + (if (result i32) (i32.const 2) + (then + (block (result i32) + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (drop (i32.const 1)) + (nop) + (unreachable) + (i32.const 2) + ) + ) + (else + (block (result i32) + (drop (i32.const 999)) + (drop (i32.const 1)) + (nop) + (unreachable) + (i32.const 2) + ) ) ) ) (drop (if (result i32) (i32.const 3) - (block (result i32) - (drop (i32.const -1234)) - (drop (i32.const -1000)) - (drop (i32.const 1)) - (nop) - (i32.const 2) + (then + (block (result i32) + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (drop (i32.const 1)) + (nop) + (i32.const 2) + ) ) - (block (result i32) - (drop (i32.const 999)) - (drop (i32.const 1)) - (nop) - (i32.const 2) + (else + (block (result i32) + (drop (i32.const 999)) + (drop (i32.const 1)) + (nop) + (i32.const 2) + ) ) ) ) @@ -164,84 +224,112 @@ (func $if-worth-it-i-dunno ;; just 2, so not worth it (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) - (if (i32.const 0) - (block - (drop (i32.const -1234)) - (drop (i32.const -1000)) - (unreachable) - (unreachable) - ) - (block - (drop (i32.const 999)) - (drop (i32.const 1)) - (unreachable) - (unreachable) + (then + (if (i32.const 0) + (then + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + ) + ) + (else + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + ) + ) ) ) ) ;; 3, so why not (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) - (if (i32.const 0) - (block - (drop (i32.const -1234)) - (drop (i32.const -1000)) - (unreachable) - (unreachable) - (unreachable) - ) - (block - (drop (i32.const 999)) - (drop (i32.const 1)) - (unreachable) - (unreachable) - (unreachable) + (then + (if (i32.const 0) + (then + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + (unreachable) + ) + ) + (else + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + (unreachable) + ) + ) ) ) ) ;; just 2, but we'll empty out a block (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) - (if (i32.const 0) - (block - (unreachable) - (unreachable) - ) - (block - (drop (i32.const 999)) - (drop (i32.const 1)) - (unreachable) - (unreachable) + (then + (if (i32.const 0) + (then + (block + (unreachable) + (unreachable) + ) + ) + (else + (block + (drop (i32.const 999)) + (drop (i32.const 1)) + (unreachable) + (unreachable) + ) + ) ) ) ) ;; just 2, but we'll empty out a block (if (i32.const 0) ;; (put them in ifs, so no block outside which would make us more confident in creating a block in hopes it would vanish) - (if (i32.const 0) - (block - (drop (i32.const -1234)) - (drop (i32.const -1000)) - (unreachable) - (unreachable) - ) - (block - (unreachable) - (unreachable) + (then + (if (i32.const 0) + (then + (block + (drop (i32.const -1234)) + (drop (i32.const -1000)) + (unreachable) + (unreachable) + ) + ) + (else + (block + (unreachable) + (unreachable) + ) + ) ) ) ) ;; just two, but on a block, so we hope to merge, and can optimize here (block $a-holding-block (if (i32.const 9999) - (block - (drop (i32.const -51234)) - (drop (i32.const -51000)) - (unreachable) - (unreachable) + (then + (block + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (unreachable) + ) ) - (block - (drop (i32.const 5999)) - (drop (i32.const 51)) - (unreachable) - (unreachable) + (else + (block + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (unreachable) + ) ) ) ) @@ -249,17 +337,21 @@ (drop (block $b-holding-block (result i32) (if (result i32) (i32.const 9999) - (block (result i32) - (drop (i32.const -51234)) - (drop (i32.const -51000)) - (unreachable) - (i32.const 10) + (then + (block (result i32) + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (i32.const 10) + ) ) - (block (result i32) - (drop (i32.const 5999)) - (drop (i32.const 51)) - (unreachable) - (i32.const 10) + (else + (block (result i32) + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (i32.const 10) + ) ) ) ) @@ -268,17 +360,21 @@ (block $c-holding-block (drop (if (result i32) (i32.const 9999) - (block (result i32) - (drop (i32.const -51234)) - (drop (i32.const -51000)) - (unreachable) - (i32.const 10) + (then + (block (result i32) + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (i32.const 10) + ) ) - (block (result i32) - (drop (i32.const 5999)) - (drop (i32.const 51)) - (unreachable) - (i32.const 10) + (else + (block (result i32) + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (i32.const 10) + ) ) ) ) @@ -287,29 +383,15 @@ (func $no-grandparent ;; if we had a parent block, we might optimize this (if (i32.const 9999) - (block - (drop (i32.const -51234)) - (drop (i32.const -51000)) - (unreachable) - (unreachable) - ) - (block - (drop (i32.const 5999)) - (drop (i32.const 51)) - (unreachable) - (unreachable) - ) - ) - ) - (func $yes-grandparent - (block - (if (i32.const 9999) + (then (block (drop (i32.const -51234)) (drop (i32.const -51000)) (unreachable) (unreachable) ) + ) + (else (block (drop (i32.const 5999)) (drop (i32.const 51)) @@ -319,61 +401,105 @@ ) ) ) - (func $ifs-named-block (param $x i32) (param $y i32) (result i32) - (block $out - (block $out2 - (if (local.get $x) + (func $yes-grandparent + (block + (if (i32.const 9999) + (then (block - (br_if $out (local.get $y i32)) - (nop) + (drop (i32.const -51234)) + (drop (i32.const -51000)) + (unreachable) + (unreachable) ) + ) + (else (block - (br_if $out (local.get $y i32)) - (nop) + (drop (i32.const 5999)) + (drop (i32.const 51)) + (unreachable) + (unreachable) ) ) + ) + ) + ) + (func $ifs-named-block (param $x i32) (param $y i32) (result i32) + (block $out + (block $out2 (if (local.get $x) - (block - (br_if $out (local.get $y i32)) - (nop) + (then + (block + (br_if $out (local.get $y i32)) + (nop) + ) ) - (block - (br_if $out2 (local.get $y i32)) - (nop) + (else + (block + (br_if $out (local.get $y i32)) + (nop) + ) ) ) - (if (i32.const 1234) - (if (local.get $x) + (if (local.get $x) + (then (block - (nop) (br_if $out (local.get $y i32)) (nop) ) + ) + (else (block - (nop) (br_if $out2 (local.get $y i32)) (nop) ) ) ) + (if (i32.const 1234) + (then + (if (local.get $x) + (then + (block + (nop) + (br_if $out (local.get $y i32)) + (nop) + ) + ) + (else + (block + (nop) + (br_if $out2 (local.get $y i32)) + (nop) + ) + ) + ) + ) + ) (if (local.get $x) - (block $left - (br_if $left (local.get $y i32)) - (nop) + (then + (block $left + (br_if $left (local.get $y i32)) + (nop) + ) ) - (block - (br_if $out (local.get $y i32)) - (nop) + (else + (block + (br_if $out (local.get $y i32)) + (nop) + ) ) ) (if (local.get $x) - (block - (br_if $out (local.get $y i32)) - (nop) + (then + (block + (br_if $out (local.get $y i32)) + (nop) + ) ) - (block $right - (br_if $right (local.get $y i32)) - (nop) + (else + (block $right + (br_if $right (local.get $y i32)) + (nop) + ) ) ) ) @@ -384,17 +510,21 @@ (func $block (block $x (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) ;; no fallthrough, another thing to merge @@ -406,17 +536,21 @@ (func $block2 (block $x (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 333333)) - (br $x) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 333333)) + (br $x) + ) ) ) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) ;; no fallthrough, another thing to merge @@ -428,20 +562,24 @@ (func $block3 (block $x (if (i32.const 0) - (block - (drop (i32.const 1000)) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 1000)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) (if (i32.const 0) - (block - (drop (i32.const 2000)) - (drop (i32.const 3000)) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 2000)) + (drop (i32.const 3000)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) (drop (i32.const 4000)) @@ -456,59 +594,75 @@ (func $mixture (block $out ;; then we reach the block, and the tail infos are stale, should ignore (if (i32.const 1) ;; then we optimize the if, pushing those brs outside! - (block - (drop (i32.const 2)) ;; first we note the block tails for $out - (nop) (nop) (nop) (nop) (nop) (nop) ;; totally worth it - (br $out) + (then + (block + (drop (i32.const 2)) ;; first we note the block tails for $out + (nop) (nop) (nop) (nop) (nop) (nop) ;; totally worth it + (br $out) + ) ) - (block - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out) + (else + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out) + ) ) ) ) (block $out2 (if (i32.const 1) - (block - (drop (i32.const 3)) ;; leave something - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out2) + (then + (block + (drop (i32.const 3)) ;; leave something + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out2) + ) ) - (block - (drop (i32.const 4)) ;; leave something - (drop (i32.const 5)) ;; leave something - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out2) + (else + (block + (drop (i32.const 4)) ;; leave something + (drop (i32.const 5)) ;; leave something + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out2) + ) ) ) ) ;; now a case where do **do** want to fold for the block (which we can only do in a later pass) (block $out3 (if (i32.const 1) - (block - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out3) + (then + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) ) - (block - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out3) + (else + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) ) ) (if (i32.const 1) - (block - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out3) + (then + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) ) - (block - (drop (i32.const 2)) - (nop) (nop) (nop) (nop) (nop) (nop) - (br $out3) + (else + (block + (drop (i32.const 2)) + (nop) (nop) (nop) (nop) (nop) (nop) + (br $out3) + ) ) ) (drop (i32.const 2)) @@ -520,10 +674,12 @@ ;; these should be merged (block $x (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) + ) ) ) (drop (i32.const 1)) @@ -534,10 +690,12 @@ (drop (block $y (result i32) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $y (i32.const 3)) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $y (i32.const 3)) + ) ) ) (drop (i32.const 1)) @@ -548,10 +706,12 @@ (drop (block $z (result i32) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $z (i32.const 2)) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $z (i32.const 2)) + ) ) ) (drop (i32.const 1)) @@ -562,10 +722,12 @@ ;; condition (block $w (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br_if $w (i32.const 3)) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br_if $w (i32.const 3)) + ) ) ) (drop (i32.const 1)) @@ -574,11 +736,13 @@ ;; not at the end (block $x1 (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x1) - (nop) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x1) + (nop) + ) ) ) (drop (i32.const 1)) @@ -589,10 +753,12 @@ (block $x2 (br_table $x2 $side (i32.const 0)) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x2) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x2) + ) ) ) (drop (i32.const 1)) @@ -601,10 +767,12 @@ (block $x3 (br_table $side $x3 (i32.const 0)) (if (i32.const 0) - (block - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x3) + (then + (block + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x3) + ) ) ) (drop (i32.const 1)) @@ -614,267 +782,339 @@ ) (func $terminating (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) ) (func $terminating-unreachable (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (unreachable) ) (func $terminating-value (result i32) (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (i32.const 4) ) (func $terminating-just-2 (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (drop (i32.const 10)) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 10)) + (unreachable) + ) ) ) ) (func $terminating-shortness (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ;; shorter. we do the two long ones greedily, then the merged one and this can also be opted - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) ;; shorter. we do the two long ones greedily, then the merged one and this can also be opted + (unreachable) + ) ) ) (if (i32.const 3) - (block - (drop (i32.const 10)) - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (unreachable) + (then + (block + (drop (i32.const 10)) + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (unreachable) + ) ) ) ) (func $terminating-multiple-separate (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (drop (i32.const 1)) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 1)) + (unreachable) + ) ) ) (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (drop (i32.const 1)) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 1)) + (unreachable) + ) ) ) (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (drop (i32.const 2)) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 2)) + (unreachable) + ) ) ) (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (drop (i32.const 2)) - (unreachable) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (drop (i32.const 2)) + (unreachable) + ) ) ) ) (func $terminating-just-worth-it (if (i32.const 1) - (block - (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) (nop) + (unreachable) + ) ) ) ) (func $terminating-not-worth-it (if (i32.const 1) - (block - (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) + (unreachable) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) - (unreachable) + (then + (block + (nop) (nop) + (unreachable) + ) ) ) ) (func $terminating-return (if (i32.const 1) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (return) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) ) ) (if (i32.const 2) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (return) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) ) ) (if (i32.const 3) - (block - (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) - (return) + (then + (block + (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) (nop) + (return) + ) ) ) ) (func $terminating-return-value (result i32) (if (i32.const 1) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 2) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 3) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 3) - (block - (nop) - (return (i32.add (i32.const 111111111) (i32.const 2222222))) + (then + (block + (nop) + (return (i32.add (i32.const 111111111) (i32.const 2222222))) + ) ) ) (return (i32.const 1234)) ) (func $terminating-fallthrough-value (result i32) (if (i32.const 1) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 2) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 3) - (block - (nop) - (return (i32.add (i32.const 1) (i32.const 2))) + (then + (block + (nop) + (return (i32.add (i32.const 1) (i32.const 2))) + ) ) ) (if (i32.const 3) - (block - (nop) - (return (i32.add (i32.const 111111111) (i32.const 2222222))) + (then + (block + (nop) + (return (i32.add (i32.const 111111111) (i32.const 2222222))) + ) ) ) (i32.const 1234) ) (func $big-return (result i32) - (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 5) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 6) (return (i32.add (i32.const 1) (i32.const 2)))) + (if (i32.const 1) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 2) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 3) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 4) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 5) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 6) (then (return (i32.add (i32.const 1) (i32.const 2))))) (unreachable) ) (func $return-mix (result i32) - (if (i32.const 1) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 2) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 4) (return (i32.add (i32.const 1) (i32.const 2)))) - (if (i32.const 3) (return (i32.add (i32.const 1) (i32.const 234567)))) + (if (i32.const 1) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 2) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 3) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 4) (then (return (i32.add (i32.const 1) (i32.const 2))))) + (if (i32.const 3) (then (return (i32.add (i32.const 1) (i32.const 234567))))) (return (i32.add (i32.const 1) (i32.const 2))) ;; on a block, and the toplevel in fact ) (func $just-unreachable @@ -887,42 +1127,56 @@ (block $label$0 (if (i32.const 0) - (block $label$1 - (nop) + (then + (block $label$1 + (nop) + ) ) ) (if (i32.const 0) - (block $label$2 - (nop) + (then + (block $label$2 + (nop) + ) ) - (block $label$3 - (nop) + (else + (block $label$3 + (nop) + ) ) ) (if (i32.const 0) - (block $label$4 - (nop) + (then + (block $label$4 + (nop) + ) ) - (block $label$5 - (unreachable) + (else + (block $label$5 + (unreachable) + ) ) ) (nop) (drop (if (result i32) ;; we replace this if, must replace with same type! (unreachable) - (block $label$6 (result i32) - (i32.add - (i32.const 1) - (i32.const 2) + (then + (block $label$6 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) ) ) - (block $label$7 (result i32) - (i32.add - (i32.const 1) - (i32.const 2) + (else + (block $label$7 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) ) ) ) @@ -930,16 +1184,20 @@ (drop (if (result i32) (i32.const 0) - (block $label$8 (result i32) - (i32.add - (i32.const 1) - (i32.const 2) + (then + (block $label$8 (result i32) + (i32.add + (i32.const 1) + (i32.const 2) + ) ) ) - (block $label$9 (result i32) - (i32.add - (i32.const 1) - (i32.const 333333333) + (else + (block $label$9 (result i32) + (i32.add + (i32.const 1) + (i32.const 333333333) + ) ) ) ) @@ -950,28 +1208,38 @@ (block $out (block $x (if (i32.const 0) - (block - (if (i32.const 1) - (br $out) + (then + (block + (if (i32.const 1) + (then + (br $out) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) ) ) (if (i32.const 0) - (block - (if (i32.const 1) - (br $out) + (then + (block + (if (i32.const 1) + (then + (br $out) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $x) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $x) ) ) ;; no fallthrough, another thing to merge (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (drop (i32.const 1)) (drop (i32.const 2)) @@ -984,28 +1252,38 @@ (block $out (block $x (if (i32.const 0) - (block - (if (i32.const 1) - (br $out) ;; this br cannot be moved out of the $out block! + (then + (block + (if (i32.const 1) + (then + (br $out) ;; this br cannot be moved out of the $out block! + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (return) ) ) (if (i32.const 0) - (block - (if (i32.const 1) - (br $out) + (then + (block + (if (i32.const 1) + (then + (br $out) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (return) ) ) ;; no fallthrough, another thing to merge (if (i32.const 1) - (br $out) + (then + (br $out) + ) ) (drop (i32.const 1)) (drop (i32.const 2)) @@ -1019,28 +1297,38 @@ (block $middle (block $x (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $middle) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (return) ) ) (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $middle) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (return) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (return) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) + (then + (br $middle) + ) ) (drop (i32.const 1)) (drop (i32.const 2)) @@ -1055,40 +1343,50 @@ (block $middle (block $x (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) ;; this is dangerous - we branch to middle with is inside out, so we can't move this out of out + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $middle) ;; this is dangerous - we branch to middle with is inside out, so we can't move this out of out + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (drop (i32.const 3)) - (drop (i32.const 4)) - (drop (i32.const 1)) - (drop (i32.const 2)) - (drop (i32.const 3)) - (drop (i32.const 4)) - (br $out) ) ) (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $middle) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (drop (i32.const 1)) + (drop (i32.const 2)) + (drop (i32.const 3)) + (drop (i32.const 4)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (drop (i32.const 3)) - (drop (i32.const 4)) - (drop (i32.const 1)) - (drop (i32.const 2)) - (drop (i32.const 3)) - (drop (i32.const 4)) - (br $out) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) - (br $middle) + (then + (br $middle) + ) ) ) ) @@ -1100,28 +1398,38 @@ (block $out (block $middle (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) ;; this is ok - we branch to x which is outside of out + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $x) ;; this is ok - we branch to x which is outside of out + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $out) ) ) (if (i32.const 0) - (block - (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) + (then + (block + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $x) + ) + ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $out) ) ) ;; no fallthrough, another thing to merge (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) + (then + (br $x) + ) ) (drop (i32.const 1)) (drop (i32.const 2)) @@ -1137,33 +1445,43 @@ (block $out (block $middle (if (i32.const 0) - (block - (block $x - (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) ;; this is ok - we branch to x which is nested in us + (then + (block + (block $x + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $x) ;; this is ok - we branch to x which is nested in us + ) + ) ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $out) ) ) (if (i32.const 0) - (block - (block $x - (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) ;; this is ok - we branch to x which is nested in us + (then + (block + (block $x + (if (i32.add (i32.const 0) (i32.const 1)) + (then + (br $x) ;; this is ok - we branch to x which is nested in us + ) + ) ) + (drop (i32.const 1)) + (drop (i32.const 2)) + (br $out) ) - (drop (i32.const 1)) - (drop (i32.const 2)) - (br $out) ) ) ;; no fallthrough, another thing to merge (block $x (if (i32.add (i32.const 0) (i32.const 1)) - (br $x) ;; this is ok - we branch to x which is nested in us + (then + (br $x) ;; this is ok - we branch to x which is nested in us + ) ) ) (drop (i32.const 1)) @@ -1176,19 +1494,27 @@ (func $if-suffix (param $x i32) (result i32) (if (local.get $x) - (local.set $x (i32.const 1)) - (block - (drop (call $if-suffix (i32.const -1))) + (then (local.set $x (i32.const 1)) ) + (else + (block + (drop (call $if-suffix (i32.const -1))) + (local.set $x (i32.const 1)) + ) + ) ) (if (result i32) (local.get $x) - (i32.const 2) - (block (result i32) - (drop (call $if-suffix (i32.const -2))) + (then (i32.const 2) ) + (else + (block (result i32) + (drop (call $if-suffix (i32.const -2))) + (i32.const 2) + ) + ) ) ) ) diff --git a/test/passes/remove-unused-names_merge-blocks_all-features.txt b/test/passes/remove-unused-names_merge-blocks_all-features.txt index ac7647507b7..05f27ea4c98 100644 --- a/test/passes/remove-unused-names_merge-blocks_all-features.txt +++ b/test/passes/remove-unused-names_merge-blocks_all-features.txt @@ -767,14 +767,16 @@ (local.get $0) (local.get $1) ) - (nop) + (then + (nop) + ) ) ) (func $do-reorder (type $i) (param $x i32) (local $y i32) (if (i32.const 1) - (block + (then (local.set $y (i32.const 5) ) @@ -791,14 +793,16 @@ (local $y i32) (if (i32.const 1) - (local.set $x - (i32.le_u - (local.get $y) - (block (result i32) - (local.set $y - (i32.const 5) + (then + (local.set $x + (i32.le_u + (local.get $y) + (block (result i32) + (local.set $y + (i32.const 5) + ) + (i32.const 10) ) - (i32.const 10) ) ) ) @@ -959,8 +963,10 @@ (block $l5 (if (i32.const 10) - (br_if $l5 - (i32.const 11) + (then + (br_if $l5 + (i32.const 11) + ) ) ) (drop @@ -1100,8 +1106,10 @@ (loop $l5 (if (i32.const 10) - (br_if $l5 - (i32.const 11) + (then + (br_if $l5 + (i32.const 11) + ) ) ) ) diff --git a/test/passes/remove-unused-names_merge-blocks_all-features.wast b/test/passes/remove-unused-names_merge-blocks_all-features.wast index 1063e246331..3a159abd91c 100644 --- a/test/passes/remove-unused-names_merge-blocks_all-features.wast +++ b/test/passes/remove-unused-names_merge-blocks_all-features.wast @@ -945,19 +945,23 @@ (local.get $1) ) ) - (nop) + (then + (nop) + ) ) ) (func $do-reorder (param $x i32) (local $y i32) (if (i32.const 1) - (block - (local.set $x - (i32.le_u - (local.get $x) - (block (result i32) - (local.set $y (i32.const 5)) - (i32.const 10) + (then + (block + (local.set $x + (i32.le_u + (local.get $x) + (block (result i32) + (local.set $y (i32.const 5)) + (i32.const 10) + ) ) ) ) @@ -967,13 +971,15 @@ (func $do-not-reorder (param $x i32) (local $y i32) (if (i32.const 1) - (block - (local.set $x - (i32.le_u - (local.get $y) - (block (result i32) - (local.set $y (i32.const 5)) - (i32.const 10) + (then + (block + (local.set $x + (i32.le_u + (local.get $y) + (block (result i32) + (local.set $y (i32.const 5)) + (i32.const 10) + ) ) ) ) @@ -1123,7 +1129,9 @@ ) (block $l5 (if (i32.const 10) - (br_if $l5 (i32.const 11)) + (then + (br_if $l5 (i32.const 11)) + ) ) (drop (i32.const 12)) ) @@ -1201,7 +1209,9 @@ ) (loop $l5 (if (i32.const 10) - (br_if $l5 (i32.const 11)) + (then + (br_if $l5 (i32.const 11)) + ) ) (drop (i32.const 12)) ) diff --git a/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt b/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt index a5e0c17ff22..2a157dcf98c 100644 --- a/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt +++ b/test/passes/remove-unused-names_remove-unused-brs_vacuum.txt @@ -68,28 +68,38 @@ (local $var$8 i32) (if (local.get $var$4) - (block $label$3 - (block - (if - (local.get $var$8) - (loop $label$8 - (if - (local.get $var$3) - (br $label$8) - ) - ) + (then + (block $label$3 + (block (if - (i32.eqz - (local.get $var$6) + (local.get $var$8) + (then + (loop $label$8 + (if + (local.get $var$3) + (then + (br $label$8) + ) + ) + ) + ) + (else + (if + (i32.eqz + (local.get $var$6) + ) + (then + (br $label$3) + ) + ) ) - (br $label$3) ) - ) - (drop - (call $23 - (local.get $var$7) - (local.get $var$4) - (local.get $var$0) + (drop + (call $23 + (local.get $var$7) + (local.get $var$4) + (local.get $var$0) + ) ) ) ) diff --git a/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast b/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast index f1e1d6ad3d0..54d0fbdf98c 100644 --- a/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast +++ b/test/passes/remove-unused-names_remove-unused-brs_vacuum.wast @@ -78,42 +78,56 @@ (block $label$3 (if (local.get $var$4) - (block $label$4 - (if - (local.get $var$8) - (block $label$7 - (loop $label$8 - (block $label$9 + (then + (block $label$4 + (if + (local.get $var$8) + (then + (block $label$7 + (loop $label$8 + (block $label$9 + (if + (local.get $var$3) + (then + (block $label$12 ;; these empty blocks must never be unreachable-typed + ) + ) + (else + (block $label$13 + (br $label$9) + ) + ) + ) + (br $label$8) + ) + ) + ) + ) + (else + (block $label$16 (if - (local.get $var$3) - (block $label$12 ;; these empty blocks must never be unreachable-typed + (local.get $var$6) + (then + (block $label$17 + ) ) - (block $label$13 - (br $label$9) + (else + (block $label$18 + (br $label$3) + ) ) ) - (br $label$8) ) ) ) - (block $label$16 - (if - (local.get $var$6) - (block $label$17 - ) - (block $label$18 - (br $label$3) - ) + (drop + (call $23 + (local.get $var$7) + (local.get $var$4) + (local.get $var$0) ) ) ) - (drop - (call $23 - (local.get $var$7) - (local.get $var$4) - (local.get $var$0) - ) - ) ) ) ) @@ -130,10 +144,14 @@ (i32.load8_s (i32.const 201460482) ) - (br $label$0) - (block $label$3 - (br_if $label$3 - (local.get $0) + (then + (br $label$0) + ) + (else + (block $label$3 + (br_if $label$3 + (local.get $0) + ) ) ) ) diff --git a/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.wast b/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.wast index 532fdc7c8d8..e6ccc84aaaa 100644 --- a/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.wast +++ b/test/passes/remove-unused-names_vacuum_ignore-implicit-traps.wast @@ -27,18 +27,22 @@ (drop (if (result f64) (i32.const 1) - (block (result f64) - (nop) - (f64.load - (i32.const 19) + (then + (block (result f64) + (nop) + (f64.load + (i32.const 19) + ) ) ) - (block - (drop - (f64.const 1) + (else + (block + (drop + (f64.const 1) + ) + (br $label$1) + (nop) ) - (br $label$1) - (nop) ) ) ) diff --git a/test/passes/remove-unused-nonfunction-module-elements_all-features.txt b/test/passes/remove-unused-nonfunction-module-elements_all-features.txt index b54087b8176..88998c6ca3b 100644 --- a/test/passes/remove-unused-nonfunction-module-elements_all-features.txt +++ b/test/passes/remove-unused-nonfunction-module-elements_all-features.txt @@ -292,8 +292,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) @@ -306,11 +310,15 @@ (f64.const 1) (f64.const 1) ) - (call_indirect $0 (type $0) - (f64.const 1) - (i32.const 0) + (then + (call_indirect $0 (type $0) + (f64.const 1) + (i32.const 0) + ) + ) + (else + (f64.const 0) ) - (f64.const 0) ) ) ) @@ -324,8 +332,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) diff --git a/test/passes/remove-unused-nonfunction-module-elements_all-features.wast b/test/passes/remove-unused-nonfunction-module-elements_all-features.wast index 942a20ee7e1..5ed444ca244 100644 --- a/test/passes/remove-unused-nonfunction-module-elements_all-features.wast +++ b/test/passes/remove-unused-nonfunction-module-elements_all-features.wast @@ -227,8 +227,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) @@ -241,8 +245,12 @@ (f64.const 1) (f64.const 1) ) - (call_indirect (type $0) (f64.const 1) (i32.const 0)) - (f64.const 0) + (then + (call_indirect (type $0) (f64.const 1) (i32.const 0)) + ) + (else + (f64.const 0) + ) ) ) ) @@ -256,8 +264,12 @@ (f64.const 1) (f64.const 1) ) - (f64.const 1) - (f64.const 0) + (then + (f64.const 1) + ) + (else + (f64.const 0) + ) ) ) ) diff --git a/test/passes/reverse_dwarf_abbrevs.bin.txt b/test/passes/reverse_dwarf_abbrevs.bin.txt index cbc04ac439b..2500b625b1b 100644 --- a/test/passes/reverse_dwarf_abbrevs.bin.txt +++ b/test/passes/reverse_dwarf_abbrevs.bin.txt @@ -175,10 +175,12 @@ file_names[ 1]: ;; code offset: 0x1d (local.get $0) ) - ;; code offset: 0x24 - (return - ;; code offset: 0x22 - (i32.const 0) + (then + ;; code offset: 0x24 + (return + ;; code offset: 0x22 + (i32.const 0) + ) ) ) ;; code offset: 0x2a @@ -325,177 +327,179 @@ file_names[ 1]: ) ) ) - ;; code offset: 0xa7 - (loop $label$5 - ;; code offset: 0xb3 - (br_if $label$3 - ;; code offset: 0xb2 - (i32.eq - ;; code offset: 0xa9 - (local.get $6) - ;; code offset: 0xb0 - (local.tee $4 - ;; code offset: 0xad - (i32.load offset=12 - ;; code offset: 0xab - (local.get $3) + (then + ;; code offset: 0xa7 + (loop $label$5 + ;; code offset: 0xb3 + (br_if $label$3 + ;; code offset: 0xb2 + (i32.eq + ;; code offset: 0xa9 + (local.get $6) + ;; code offset: 0xb0 + (local.tee $4 + ;; code offset: 0xad + (i32.load offset=12 + ;; code offset: 0xab + (local.get $3) + ) ) ) ) - ) - ;; code offset: 0xba - (br_if $label$2 - ;; code offset: 0xb9 - (i32.le_s - ;; code offset: 0xb5 - (local.get $4) - ;; code offset: 0xb7 - (i32.const -1) + ;; code offset: 0xba + (br_if $label$2 + ;; code offset: 0xb9 + (i32.le_s + ;; code offset: 0xb5 + (local.get $4) + ;; code offset: 0xb7 + (i32.const -1) + ) ) - ) - ;; code offset: 0xe2 - (i32.store - ;; code offset: 0xce - (local.tee $9 - ;; code offset: 0xcd - (i32.add - ;; code offset: 0xbc - (local.get $1) - ;; code offset: 0xcc - (i32.shl - ;; code offset: 0xc8 - (local.tee $5 - ;; code offset: 0xc7 - (i32.gt_u - ;; code offset: 0xbe - (local.get $4) - ;; code offset: 0xc5 - (local.tee $8 - ;; code offset: 0xc2 - (i32.load offset=4 - ;; code offset: 0xc0 - (local.get $1) + ;; code offset: 0xe2 + (i32.store + ;; code offset: 0xce + (local.tee $9 + ;; code offset: 0xcd + (i32.add + ;; code offset: 0xbc + (local.get $1) + ;; code offset: 0xcc + (i32.shl + ;; code offset: 0xc8 + (local.tee $5 + ;; code offset: 0xc7 + (i32.gt_u + ;; code offset: 0xbe + (local.get $4) + ;; code offset: 0xc5 + (local.tee $8 + ;; code offset: 0xc2 + (i32.load offset=4 + ;; code offset: 0xc0 + (local.get $1) + ) ) ) ) + ;; code offset: 0xca + (i32.const 3) + ) + ) + ) + ;; code offset: 0xe1 + (i32.add + ;; code offset: 0xda + (local.tee $8 + ;; code offset: 0xd9 + (i32.sub + ;; code offset: 0xd0 + (local.get $4) + ;; code offset: 0xd8 + (select + ;; code offset: 0xd2 + (local.get $8) + ;; code offset: 0xd4 + (i32.const 0) + ;; code offset: 0xd6 + (local.get $5) + ) ) - ;; code offset: 0xca - (i32.const 3) + ) + ;; code offset: 0xde + (i32.load + ;; code offset: 0xdc + (local.get $9) ) ) ) - ;; code offset: 0xe1 - (i32.add - ;; code offset: 0xda - (local.tee $8 - ;; code offset: 0xd9 - (i32.sub - ;; code offset: 0xd0 - (local.get $4) - ;; code offset: 0xd8 + ;; code offset: 0xf9 + (i32.store + ;; code offset: 0xef + (local.tee $9 + ;; code offset: 0xee + (i32.add + ;; code offset: 0xe5 + (local.get $1) + ;; code offset: 0xed (select - ;; code offset: 0xd2 - (local.get $8) - ;; code offset: 0xd4 - (i32.const 0) - ;; code offset: 0xd6 + ;; code offset: 0xe7 + (i32.const 12) + ;; code offset: 0xe9 + (i32.const 4) + ;; code offset: 0xeb (local.get $5) ) ) ) - ;; code offset: 0xde - (i32.load - ;; code offset: 0xdc - (local.get $9) - ) - ) - ) - ;; code offset: 0xf9 - (i32.store - ;; code offset: 0xef - (local.tee $9 - ;; code offset: 0xee - (i32.add - ;; code offset: 0xe5 - (local.get $1) - ;; code offset: 0xed - (select - ;; code offset: 0xe7 - (i32.const 12) - ;; code offset: 0xe9 - (i32.const 4) - ;; code offset: 0xeb - (local.get $5) + ;; code offset: 0xf8 + (i32.sub + ;; code offset: 0xf3 + (i32.load + ;; code offset: 0xf1 + (local.get $9) ) + ;; code offset: 0xf6 + (local.get $8) ) ) - ;; code offset: 0xf8 - (i32.sub - ;; code offset: 0xf3 - (i32.load - ;; code offset: 0xf1 - (local.get $9) + ;; code offset: 0x101 + (local.set $6 + ;; code offset: 0x100 + (i32.sub + ;; code offset: 0xfc + (local.get $6) + ;; code offset: 0xfe + (local.get $4) ) - ;; code offset: 0xf6 - (local.get $8) - ) - ) - ;; code offset: 0x101 - (local.set $6 - ;; code offset: 0x100 - (i32.sub - ;; code offset: 0xfc - (local.get $6) - ;; code offset: 0xfe - (local.get $4) ) - ) - ;; code offset: 0x125 - (br_if $label$5 - ;; code offset: 0x124 - (i32.eqz - ;; code offset: 0x122 - (call $4 - ;; code offset: 0x120 - (call $fimport$0 - ;; code offset: 0x105 - (i32.load offset=60 - ;; code offset: 0x103 - (local.get $0) - ) - ;; code offset: 0x112 - (local.tee $1 - ;; code offset: 0x111 - (select - ;; code offset: 0x10c - (i32.add - ;; code offset: 0x108 + ;; code offset: 0x125 + (br_if $label$5 + ;; code offset: 0x124 + (i32.eqz + ;; code offset: 0x122 + (call $4 + ;; code offset: 0x120 + (call $fimport$0 + ;; code offset: 0x105 + (i32.load offset=60 + ;; code offset: 0x103 + (local.get $0) + ) + ;; code offset: 0x112 + (local.tee $1 + ;; code offset: 0x111 + (select + ;; code offset: 0x10c + (i32.add + ;; code offset: 0x108 + (local.get $1) + ;; code offset: 0x10a + (i32.const 8) + ) + ;; code offset: 0x10d (local.get $1) - ;; code offset: 0x10a - (i32.const 8) + ;; code offset: 0x10f + (local.get $5) ) - ;; code offset: 0x10d - (local.get $1) - ;; code offset: 0x10f - (local.get $5) ) - ) - ;; code offset: 0x119 - (local.tee $7 - ;; code offset: 0x118 - (i32.sub - ;; code offset: 0x114 - (local.get $7) - ;; code offset: 0x116 - (local.get $5) + ;; code offset: 0x119 + (local.tee $7 + ;; code offset: 0x118 + (i32.sub + ;; code offset: 0x114 + (local.get $7) + ;; code offset: 0x116 + (local.get $5) + ) + ) + ;; code offset: 0x11f + (i32.add + ;; code offset: 0x11b + (local.get $3) + ;; code offset: 0x11d + (i32.const 12) ) - ) - ;; code offset: 0x11f - (i32.add - ;; code offset: 0x11b - (local.get $3) - ;; code offset: 0x11d - (i32.const 12) ) ) ) @@ -682,7 +686,7 @@ file_names[ 1]: ;; code offset: 0x1c0 (i32.const 8) ) - (block + (then ;; code offset: 0x1cc (i32.store ;; code offset: 0x1c5 @@ -760,7 +764,7 @@ file_names[ 1]: ;; code offset: 0x208 (i32.const 512) ) - (block + (then ;; code offset: 0x216 (drop ;; code offset: 0x214 @@ -809,7 +813,7 @@ file_names[ 1]: (i32.const 3) ) ) - (block + (then ;; code offset: 0x22f (block $label$4 ;; code offset: 0x236 @@ -821,7 +825,7 @@ file_names[ 1]: ;; code offset: 0x233 (i32.const 1) ) - (block + (then ;; code offset: 0x23a (local.set $2 ;; code offset: 0x238 @@ -843,7 +847,7 @@ file_names[ 1]: (i32.const 3) ) ) - (block + (then ;; code offset: 0x249 (local.set $2 ;; code offset: 0x247 @@ -1204,7 +1208,7 @@ file_names[ 1]: ;; code offset: 0x378 (i32.const 4) ) - (block + (then ;; code offset: 0x37f (local.set $2 ;; code offset: 0x37d @@ -1231,7 +1235,7 @@ file_names[ 1]: ;; code offset: 0x38b (local.get $0) ) - (block + (then ;; code offset: 0x392 (local.set $2 ;; code offset: 0x390 @@ -1327,44 +1331,46 @@ file_names[ 1]: ;; code offset: 0x3dc (local.get $3) ) - ;; code offset: 0x3e1 - (loop $label$15 - ;; code offset: 0x3ea - (i32.store8 - ;; code offset: 0x3e3 - (local.get $2) - ;; code offset: 0x3e7 - (i32.load8_u - ;; code offset: 0x3e5 - (local.get $1) + (then + ;; code offset: 0x3e1 + (loop $label$15 + ;; code offset: 0x3ea + (i32.store8 + ;; code offset: 0x3e3 + (local.get $2) + ;; code offset: 0x3e7 + (i32.load8_u + ;; code offset: 0x3e5 + (local.get $1) + ) ) - ) - ;; code offset: 0x3f2 - (local.set $1 - ;; code offset: 0x3f1 - (i32.add - ;; code offset: 0x3ed - (local.get $1) - ;; code offset: 0x3ef - (i32.const 1) + ;; code offset: 0x3f2 + (local.set $1 + ;; code offset: 0x3f1 + (i32.add + ;; code offset: 0x3ed + (local.get $1) + ;; code offset: 0x3ef + (i32.const 1) + ) ) - ) - ;; code offset: 0x3fe - (br_if $label$15 - ;; code offset: 0x3fd - (i32.ne - ;; code offset: 0x3f9 - (local.tee $2 - ;; code offset: 0x3f8 - (i32.add - ;; code offset: 0x3f4 - (local.get $2) - ;; code offset: 0x3f6 - (i32.const 1) + ;; code offset: 0x3fe + (br_if $label$15 + ;; code offset: 0x3fd + (i32.ne + ;; code offset: 0x3f9 + (local.tee $2 + ;; code offset: 0x3f8 + (i32.add + ;; code offset: 0x3f4 + (local.get $2) + ;; code offset: 0x3f6 + (i32.const 1) + ) ) + ;; code offset: 0x3fb + (local.get $3) ) - ;; code offset: 0x3fb - (local.get $3) ) ) ) @@ -1395,7 +1401,7 @@ file_names[ 1]: ) ) ) - (block + (then ;; code offset: 0x422 (br_if $label$1 ;; code offset: 0x420 @@ -1433,20 +1439,22 @@ file_names[ 1]: (local.get $1) ) ) - ;; code offset: 0x44a - (return - ;; code offset: 0x447 - (call_indirect (type $1) - ;; code offset: 0x43c - (local.get $2) - ;; code offset: 0x43e - (local.get $0) - ;; code offset: 0x440 - (local.get $1) - ;; code offset: 0x444 - (i32.load offset=36 - ;; code offset: 0x442 + (then + ;; code offset: 0x44a + (return + ;; code offset: 0x447 + (call_indirect (type $1) + ;; code offset: 0x43c (local.get $2) + ;; code offset: 0x43e + (local.get $0) + ;; code offset: 0x440 + (local.get $1) + ;; code offset: 0x444 + (i32.load offset=36 + ;; code offset: 0x442 + (local.get $2) + ) ) ) ) @@ -1638,7 +1646,7 @@ file_names[ 1]: ;; code offset: 0x4dc (i32.const -1) ) - (block + (then ;; code offset: 0x4e9 (local.set $0 ;; code offset: 0x4e7 @@ -1698,16 +1706,18 @@ file_names[ 1]: ;; code offset: 0x50a (local.get $4) ) - ;; code offset: 0x516 - (return - ;; code offset: 0x515 - (select - ;; code offset: 0x50f - (local.get $2) - ;; code offset: 0x511 - (i32.const 0) - ;; code offset: 0x513 - (local.get $1) + (then + ;; code offset: 0x516 + (return + ;; code offset: 0x515 + (select + ;; code offset: 0x50f + (local.get $2) + ;; code offset: 0x511 + (i32.const 0) + ;; code offset: 0x513 + (local.get $1) + ) ) ) ) @@ -1790,7 +1800,7 @@ file_names[ 1]: ) ) ) - (block + (then ;; code offset: 0x560 (local.set $2 ;; code offset: 0x55e @@ -1950,12 +1960,14 @@ file_names[ 1]: ;; code offset: 0x5df (i32.const 0) ) - ;; code offset: 0x5e8 - (local.set $2 - ;; code offset: 0x5e6 - (call $15 - ;; code offset: 0x5e4 - (local.get $1) + (then + ;; code offset: 0x5e8 + (local.set $2 + ;; code offset: 0x5e6 + (call $15 + ;; code offset: 0x5e4 + (local.get $1) + ) ) ) ) @@ -2060,10 +2072,12 @@ file_names[ 1]: (if ;; code offset: 0x638 (local.get $2) - ;; code offset: 0x63e - (call $16 - ;; code offset: 0x63c - (local.get $1) + (then + ;; code offset: 0x63e + (call $16 + ;; code offset: 0x63c + (local.get $1) + ) ) ) ;; code offset: 0x641 @@ -2112,10 +2126,12 @@ file_names[ 1]: (local.get $0) ) ) - ;; code offset: 0x670 - (return - ;; code offset: 0x66e - (i32.const 0) + (then + ;; code offset: 0x670 + (return + ;; code offset: 0x66e + (i32.const 0) + ) ) ) ;; code offset: 0x672 @@ -2215,14 +2231,16 @@ file_names[ 1]: (i32.const 255) ) ) - ;; code offset: 0x6c3 - (return - ;; code offset: 0x6c2 - (i32.sub - ;; code offset: 0x6be - (local.get $2) - ;; code offset: 0x6c0 - (local.get $0) + (then + ;; code offset: 0x6c3 + (return + ;; code offset: 0x6c2 + (i32.sub + ;; code offset: 0x6be + (local.get $2) + ;; code offset: 0x6c0 + (local.get $0) + ) ) ) ) diff --git a/test/passes/roundtrip_signed.bin.txt b/test/passes/roundtrip_signed.bin.txt index ea3fb8646b7..686a35260a5 100644 --- a/test/passes/roundtrip_signed.bin.txt +++ b/test/passes/roundtrip_signed.bin.txt @@ -9,7 +9,9 @@ (i32.eqz (global.get $global$0) ) - (return) + (then + (return) + ) ) (global.set $global$0 (i32.sub diff --git a/test/passes/rse_all-features.txt b/test/passes/rse_all-features.txt index 33032d47bb2..acc037290b7 100644 --- a/test/passes/rse_all-features.txt +++ b/test/passes/rse_all-features.txt @@ -118,11 +118,15 @@ (local $x i32) (if (i32.const 0) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) - (local.set $x - (i32.const 1) + (else + (local.set $x + (i32.const 1) + ) ) ) (drop @@ -135,11 +139,15 @@ (local.tee $x (i32.const 1) ) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (drop - (i32.const 1) + (else + (drop + (i32.const 1) + ) ) ) (drop @@ -152,11 +160,15 @@ (local.tee $x (i32.const 1) ) - (drop - (i32.const 1) + (then + (drop + (i32.const 1) + ) ) - (local.set $x - (i32.const 2) + (else + (local.set $x + (i32.const 2) + ) ) ) (local.set $x @@ -180,8 +192,12 @@ ) (if (i32.const 1) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (local.set $y (local.get $x) @@ -191,8 +207,12 @@ ) (if (i32.const 1) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (drop (i32.const 2) @@ -259,8 +279,12 @@ ) (if (i32.const 1) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (local.set $y (local.get $x) @@ -278,8 +302,12 @@ ) (if (i32.const 1) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (drop (local.get $x) @@ -310,11 +338,15 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) - (local.set $x - (i32.const 1) + (else + (local.set $x + (i32.const 1) + ) ) ) (drop @@ -347,9 +379,13 @@ ) (if (i32.const 1) - (nop) - (drop - (local.get $1) + (then + (nop) + ) + (else + (drop + (local.get $1) + ) ) ) ) @@ -359,8 +395,10 @@ ) (if (i32.const 1) - (drop - (local.get $1) + (then + (drop + (local.get $1) + ) ) ) ) @@ -388,8 +426,10 @@ ) (if (i32.const 0) - (drop - (local.get $0) + (then + (drop + (local.get $0) + ) ) ) ) @@ -399,7 +439,7 @@ (block $label$5 (if (i32.const 1) - (block + (then (local.set $x (i32.const 203) ) @@ -415,10 +455,16 @@ (if (if (result i32) (i32.const 3) - (i32.const 4) - (i32.const 5) + (then + (i32.const 4) + ) + (else + (i32.const 5) + ) + ) + (then + (br $label$7) ) - (br $label$7) ) ) ) @@ -426,10 +472,14 @@ (local $var$1 i32) (if (i32.const 0) - (if - (i32.const 1) - (local.set $var$1 - (i32.const 2) + (then + (if + (i32.const 1) + (then + (local.set $var$1 + (i32.const 2) + ) + ) ) ) ) @@ -437,8 +487,10 @@ (block $label$11 (if (i32.const 5) - (br_if $label$11 - (i32.const 6) + (then + (br_if $label$11 + (i32.const 6) + ) ) ) (br $label$10) @@ -469,8 +521,10 @@ ) (if (i32.const 0) - (drop - (local.get $0) + (then + (drop + (local.get $0) + ) ) ) ) diff --git a/test/passes/rse_all-features.wast b/test/passes/rse_all-features.wast index 7ac7a057935..6e08a1c94e5 100644 --- a/test/passes/rse_all-features.wast +++ b/test/passes/rse_all-features.wast @@ -59,24 +59,36 @@ (func $if (local $x i32) (if (local.tee $x (i32.const 0)) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 1)) + ) ) (local.set $x (i32.const 1)) ) (func $if2 (local $x i32) (if (local.tee $x (i32.const 1)) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 1)) + ) ) (local.set $x (i32.const 1)) ) (func $if3 (local $x i32) (if (local.tee $x (i32.const 1)) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 2)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 2)) + ) ) (local.set $x (i32.const 1)) ) @@ -87,10 +99,10 @@ (local.set $y (local.get $x)) (local.set $y (i32.const 1)) (local.set $x (i32.const 2)) - (if (i32.const 1) (nop) (nop)) ;; control flow + (if (i32.const 1) (then (nop) )(else (nop))) ;; control flow (local.set $y (local.get $x)) (local.set $y (i32.const 2)) - (if (i32.const 1) (nop) (nop)) ;; control flow + (if (i32.const 1) (then (nop) )(else (nop))) ;; control flow (local.set $y (i32.const 2)) ;; flip (local.set $x (i32.const 3)) @@ -116,12 +128,12 @@ (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (i32.eqz (i32.const 789))) - (if (i32.const 1) (nop) (nop)) ;; control flow + (if (i32.const 1) (then (nop) )(else (nop))) ;; control flow (local.set $y (local.get $x)) (local.set $y (local.get $x)) (local.set $x (i32.eqz (i32.const 1000))) (local.set $y (local.get $x)) - (if (i32.const 1) (nop) (nop)) ;; control flow + (if (i32.const 1) (then (nop) )(else (nop))) ;; control flow (local.set $y (local.get $x)) ) (func $identical_complex (param $x i32) @@ -136,8 +148,12 @@ (func $merge (local $x i32) (if (i32.const 1) - (local.set $x (i32.const 1)) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) + (else + (local.set $x (i32.const 1)) + ) ) (local.set $x (i32.const 1)) (local.set $x (i32.const 2)) @@ -157,9 +173,13 @@ ) (if (i32.const 1) - (nop) - (local.set $3 - (local.get $1) + (then + (nop) + ) + (else + (local.set $3 + (local.get $1) + ) ) ) ) @@ -171,8 +191,10 @@ ) (if (i32.const 1) - (local.set $3 - (local.get $1) + (then + (local.set $3 + (local.get $1) + ) ) ) ) @@ -200,8 +222,10 @@ ) (if (i32.const 0) - (local.set $1 ;; we can drop this - (local.get $0) + (then + (local.set $1 ;; we can drop this + (local.get $0) + ) ) ) ) @@ -211,11 +235,13 @@ (block $label$5 (if (i32.const 1) - (block - (local.set $x - (i32.const 203) + (then + (block + (local.set $x + (i32.const 203) + ) + (br $label$5) ) - (br $label$5) ) ) (br_if $label$4 @@ -227,10 +253,16 @@ (if (if (result i32) (i32.const 3) - (i32.const 4) - (i32.const 5) + (then + (i32.const 4) + ) + (else + (i32.const 5) + ) + ) + (then + (br $label$7) ) - (br $label$7) ) ) ) @@ -238,10 +270,14 @@ (local $var$1 i32) (if (i32.const 0) - (if - (i32.const 1) - (local.set $var$1 - (i32.const 2) + (then + (if + (i32.const 1) + (then + (local.set $var$1 + (i32.const 2) + ) + ) ) ) ) @@ -249,8 +285,10 @@ (block $label$11 (if (i32.const 5) - (br_if $label$11 - (i32.const 6) + (then + (br_if $label$11 + (i32.const 6) + ) ) ) (br $label$10) @@ -281,8 +319,10 @@ ) (if (i32.const 0) - (local.set $1 ;; we can drop this - (local.get $0) + (then + (local.set $1 ;; we can drop this + (local.get $0) + ) ) ) ) diff --git a/test/passes/safe-heap_disable-simd.txt b/test/passes/safe-heap_disable-simd.txt index a678bc0dcf4..bb55667b1cb 100644 --- a/test/passes/safe-heap_disable-simd.txt +++ b/test/passes/safe-heap_disable-simd.txt @@ -37,7 +37,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -67,7 +69,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -97,7 +101,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -127,14 +133,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -164,7 +174,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -194,14 +206,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -231,7 +247,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -261,14 +279,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -298,14 +320,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -335,7 +361,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -365,7 +393,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -395,7 +425,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -425,14 +457,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -462,7 +498,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -492,14 +530,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -529,7 +571,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -559,14 +603,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -596,14 +644,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -633,7 +685,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -663,14 +717,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -700,14 +758,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -737,7 +799,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -767,14 +831,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -804,14 +872,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -841,14 +913,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -878,7 +954,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -908,14 +986,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -945,14 +1027,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -982,7 +1068,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -1012,14 +1100,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -1049,14 +1141,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -1086,14 +1182,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -1123,7 +1223,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -1154,7 +1256,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -1185,14 +1289,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -1223,7 +1331,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -1254,14 +1364,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -1292,14 +1406,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -1330,7 +1448,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -1361,7 +1481,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -1392,14 +1514,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -1430,7 +1556,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -1461,14 +1589,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -1499,14 +1631,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -1537,7 +1673,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -1568,14 +1706,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -1606,14 +1748,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -1644,14 +1790,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -1682,7 +1832,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -1713,14 +1865,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -1751,14 +1907,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -1789,7 +1949,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -1820,14 +1982,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -1858,14 +2024,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -1896,14 +2066,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -1950,7 +2124,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -1980,7 +2156,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -2010,7 +2188,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -2040,14 +2220,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -2077,7 +2261,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -2107,14 +2293,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -2144,7 +2334,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -2174,14 +2366,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -2211,14 +2407,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -2248,7 +2448,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -2278,7 +2480,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -2308,7 +2512,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -2338,14 +2544,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -2375,7 +2585,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -2405,14 +2617,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -2442,7 +2658,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -2472,14 +2690,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -2509,14 +2731,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -2546,7 +2772,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -2576,14 +2804,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -2613,14 +2845,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -2650,7 +2886,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -2680,14 +2918,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -2717,14 +2959,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -2754,14 +3000,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -2791,7 +3041,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -2821,14 +3073,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -2858,14 +3114,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -2895,7 +3155,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -2925,14 +3187,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -2962,14 +3228,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -2999,14 +3269,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -3036,7 +3310,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -3067,7 +3343,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -3098,14 +3376,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -3136,7 +3418,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -3167,14 +3451,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -3205,14 +3493,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -3243,7 +3535,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -3274,7 +3568,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -3305,14 +3601,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -3343,7 +3643,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -3374,14 +3676,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -3412,14 +3718,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -3450,7 +3760,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -3481,14 +3793,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -3519,14 +3835,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -3557,14 +3877,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -3595,7 +3919,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -3626,14 +3952,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -3664,14 +3994,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -3702,7 +4036,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -3733,14 +4069,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -3771,14 +4111,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -3809,14 +4153,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -3871,7 +4219,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -3901,7 +4251,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -3931,7 +4283,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -3961,14 +4315,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -3998,7 +4356,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -4028,14 +4388,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -4065,7 +4429,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -4095,14 +4461,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -4132,14 +4502,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -4169,7 +4543,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -4199,7 +4575,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -4229,7 +4607,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -4259,14 +4639,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -4296,7 +4680,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -4326,14 +4712,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -4363,7 +4753,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -4393,14 +4785,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -4430,14 +4826,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -4467,7 +4867,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -4497,14 +4899,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -4534,14 +4940,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -4571,7 +4981,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -4601,14 +5013,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -4638,14 +5054,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -4675,14 +5095,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -4712,7 +5136,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -4742,14 +5168,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -4779,14 +5209,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -4816,7 +5250,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -4846,14 +5282,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -4883,14 +5323,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -4920,14 +5364,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -4957,7 +5405,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -4988,7 +5438,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -5019,14 +5471,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -5057,7 +5513,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -5088,14 +5546,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -5126,14 +5588,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -5164,7 +5630,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -5195,7 +5663,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -5226,14 +5696,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -5264,7 +5738,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -5295,14 +5771,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -5333,14 +5813,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -5371,7 +5855,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -5402,14 +5888,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -5440,14 +5930,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -5478,14 +5972,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -5516,7 +6014,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -5547,14 +6047,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -5585,14 +6089,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -5623,7 +6131,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -5654,14 +6164,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -5692,14 +6206,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -5730,14 +6248,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) diff --git a/test/passes/safe-heap_enable-threads_enable-simd.txt b/test/passes/safe-heap_enable-threads_enable-simd.txt index c1f8110077c..aeea4f02cd0 100644 --- a/test/passes/safe-heap_enable-threads_enable-simd.txt +++ b/test/passes/safe-heap_enable-threads_enable-simd.txt @@ -208,7 +208,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -244,7 +246,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -274,7 +278,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -304,7 +310,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -334,7 +342,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -364,14 +374,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -407,14 +421,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -444,7 +462,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -474,14 +494,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -511,14 +535,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -548,7 +576,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -578,14 +608,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -615,14 +649,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -652,14 +690,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -689,7 +731,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -725,7 +769,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -755,7 +801,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -785,7 +833,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -815,7 +865,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -845,14 +897,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -888,14 +944,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -925,7 +985,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -955,14 +1017,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -992,14 +1058,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -1029,7 +1099,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -1059,14 +1131,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -1096,14 +1172,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -1139,14 +1219,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -1176,7 +1260,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -1206,14 +1292,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -1243,14 +1333,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -1280,14 +1374,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -1317,7 +1415,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -1347,14 +1447,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -1384,14 +1488,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -1421,14 +1529,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -1458,14 +1570,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -1495,7 +1611,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -1525,14 +1643,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -1562,14 +1684,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -1599,7 +1725,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -1629,14 +1757,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -1666,14 +1798,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -1703,14 +1839,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -1740,7 +1880,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -1770,14 +1912,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -1807,14 +1953,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -1844,14 +1994,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -1881,14 +2035,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -1918,7 +2076,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -1949,7 +2109,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -1980,7 +2142,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -2011,14 +2175,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -2049,14 +2217,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -2087,7 +2259,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -2118,14 +2292,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -2156,14 +2334,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -2194,14 +2376,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -2232,7 +2418,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -2263,7 +2451,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -2294,7 +2484,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -2325,14 +2517,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -2363,14 +2559,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -2401,7 +2601,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -2432,14 +2634,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -2470,14 +2676,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -2508,14 +2718,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -2546,7 +2760,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -2577,14 +2793,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -2615,14 +2835,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -2653,14 +2877,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -2691,14 +2919,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -2729,7 +2961,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -2760,14 +2994,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -2798,14 +3036,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -2836,7 +3078,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -2867,14 +3111,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -2905,14 +3153,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -2943,14 +3195,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -2981,7 +3237,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -3012,14 +3270,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -3050,14 +3312,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -3088,14 +3354,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -3126,14 +3396,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -3190,7 +3464,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -3220,7 +3496,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -3250,7 +3528,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -3280,14 +3560,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -3317,7 +3601,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -3347,14 +3633,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -3384,7 +3674,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -3414,14 +3706,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -3451,14 +3747,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -3488,7 +3788,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -3518,7 +3820,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -3548,7 +3852,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -3578,14 +3884,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -3615,7 +3925,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -3645,14 +3957,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -3682,7 +3998,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -3712,14 +4030,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -3749,14 +4071,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -3786,7 +4112,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -3816,14 +4144,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -3853,14 +4185,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -3890,7 +4226,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -3920,14 +4258,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -3957,14 +4299,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -3994,14 +4340,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -4031,7 +4381,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -4061,14 +4413,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -4098,14 +4454,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -4135,7 +4495,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -4165,14 +4527,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -4202,14 +4568,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -4239,14 +4609,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -4276,7 +4650,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -4306,14 +4682,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -4343,14 +4723,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -4380,14 +4764,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -4417,14 +4805,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -4454,7 +4846,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -4485,7 +4879,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -4516,14 +4912,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -4554,7 +4954,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -4585,14 +4987,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -4623,14 +5029,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -4661,7 +5071,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -4692,7 +5104,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -4723,14 +5137,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -4761,7 +5179,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -4792,14 +5212,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -4830,14 +5254,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -4868,7 +5296,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -4899,14 +5329,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -4937,14 +5371,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -4975,14 +5413,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -5013,7 +5455,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -5044,14 +5488,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -5082,14 +5530,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -5120,7 +5572,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -5151,14 +5605,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -5189,14 +5647,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -5227,14 +5689,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -5265,7 +5731,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -5296,14 +5764,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -5334,14 +5806,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -5372,14 +5848,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -5410,14 +5890,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -5479,7 +5963,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -5515,7 +6001,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -5545,7 +6033,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -5575,7 +6065,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -5605,7 +6097,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -5635,14 +6129,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -5678,14 +6176,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -5715,7 +6217,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -5745,14 +6249,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -5782,14 +6290,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -5819,7 +6331,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -5849,14 +6363,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -5886,14 +6404,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -5923,14 +6445,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -5960,7 +6486,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -5996,7 +6524,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -6026,7 +6556,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -6056,7 +6588,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -6086,7 +6620,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -6116,14 +6652,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6159,14 +6699,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -6196,7 +6740,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -6226,14 +6772,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -6263,14 +6813,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -6300,7 +6854,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -6330,14 +6886,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -6367,14 +6927,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6410,14 +6974,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -6447,7 +7015,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -6477,14 +7047,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -6514,14 +7088,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -6551,14 +7129,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -6588,7 +7170,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -6618,14 +7202,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -6655,14 +7243,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -6692,14 +7284,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -6729,14 +7325,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -6766,7 +7366,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -6796,14 +7398,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -6833,14 +7439,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -6870,7 +7480,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -6900,14 +7512,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -6937,14 +7553,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -6974,14 +7594,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -7011,7 +7635,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -7041,14 +7667,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -7078,14 +7708,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -7115,14 +7749,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -7152,14 +7790,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -7189,7 +7831,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -7220,7 +7864,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -7251,7 +7897,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -7282,14 +7930,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -7320,14 +7972,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -7358,7 +8014,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -7389,14 +8047,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -7427,14 +8089,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -7465,14 +8131,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -7503,7 +8173,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -7534,7 +8206,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -7565,7 +8239,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -7596,14 +8272,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -7634,14 +8314,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -7672,7 +8356,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -7703,14 +8389,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -7741,14 +8431,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -7779,14 +8473,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -7817,7 +8515,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -7848,14 +8548,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -7886,14 +8590,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -7924,14 +8632,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -7962,14 +8674,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -8000,7 +8716,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -8031,14 +8749,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -8069,14 +8791,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -8107,7 +8833,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -8138,14 +8866,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -8176,14 +8908,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -8214,14 +8950,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -8252,7 +8992,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -8283,14 +9025,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -8321,14 +9067,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -8359,14 +9109,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -8397,14 +9151,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) diff --git a/test/passes/safe-heap_enable-threads_enable-simd64.txt b/test/passes/safe-heap_enable-threads_enable-simd64.txt index 49319377e44..c76b664d53d 100644 --- a/test/passes/safe-heap_enable-threads_enable-simd64.txt +++ b/test/passes/safe-heap_enable-threads_enable-simd64.txt @@ -208,7 +208,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -244,7 +246,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -274,7 +278,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -304,7 +310,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -334,7 +342,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -364,7 +374,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -373,7 +385,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -409,7 +423,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -418,7 +434,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -448,7 +466,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -478,7 +498,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -487,7 +509,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -517,7 +541,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -526,7 +552,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -556,7 +584,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -586,7 +616,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -595,7 +627,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -625,7 +659,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -634,7 +670,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -664,7 +702,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -673,7 +713,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -703,7 +745,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -739,7 +783,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -769,7 +815,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -799,7 +847,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -829,7 +879,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -859,7 +911,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -868,7 +922,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -904,7 +960,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -913,7 +971,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -943,7 +1003,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -973,7 +1035,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -982,7 +1046,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -1012,7 +1078,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1021,7 +1089,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -1051,7 +1121,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -1081,7 +1153,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1090,7 +1164,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -1120,7 +1196,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1129,7 +1207,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -1165,7 +1245,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1174,7 +1256,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -1204,7 +1288,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -1234,7 +1320,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1243,7 +1331,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -1273,7 +1363,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1282,7 +1374,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -1312,7 +1406,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1321,7 +1417,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -1351,7 +1449,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -1381,7 +1481,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1390,7 +1492,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -1420,7 +1524,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1429,7 +1535,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -1459,7 +1567,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1468,7 +1578,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -1498,7 +1610,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1507,7 +1621,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -1537,7 +1653,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -1567,7 +1685,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1576,7 +1696,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -1606,7 +1728,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1615,7 +1739,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -1645,7 +1771,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -1675,7 +1803,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1684,7 +1814,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -1714,7 +1846,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1723,7 +1857,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -1753,7 +1889,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1762,7 +1900,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -1792,7 +1932,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -1822,7 +1964,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1831,7 +1975,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -1861,7 +2007,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1870,7 +2018,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -1900,7 +2050,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1909,7 +2061,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -1939,7 +2093,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -1948,7 +2104,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -1978,7 +2136,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -2009,7 +2169,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -2040,7 +2202,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -2071,7 +2235,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2080,7 +2246,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -2111,7 +2279,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2120,7 +2290,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -2151,7 +2323,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -2182,7 +2356,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2191,7 +2367,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -2222,7 +2400,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2231,7 +2411,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -2262,7 +2444,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2271,7 +2455,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -2302,7 +2488,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -2333,7 +2521,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -2364,7 +2554,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -2395,7 +2587,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2404,7 +2598,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -2435,7 +2631,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2444,7 +2642,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -2475,7 +2675,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -2506,7 +2708,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2515,7 +2719,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -2546,7 +2752,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2555,7 +2763,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -2586,7 +2796,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2595,7 +2807,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -2626,7 +2840,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -2657,7 +2873,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2666,7 +2884,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -2697,7 +2917,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2706,7 +2928,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -2737,7 +2961,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2746,7 +2972,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -2777,7 +3005,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2786,7 +3016,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -2817,7 +3049,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -2848,7 +3082,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2857,7 +3093,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -2888,7 +3126,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2897,7 +3137,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -2928,7 +3170,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -2959,7 +3203,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -2968,7 +3214,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -2999,7 +3247,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3008,7 +3258,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -3039,7 +3291,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3048,7 +3302,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -3079,7 +3335,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -3110,7 +3368,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3119,7 +3379,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -3150,7 +3412,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3159,7 +3423,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -3190,7 +3456,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3199,7 +3467,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -3230,7 +3500,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3239,7 +3511,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -3296,7 +3570,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -3326,7 +3602,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -3356,7 +3634,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -3386,7 +3666,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3395,7 +3677,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -3425,7 +3709,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -3455,7 +3741,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3464,7 +3752,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -3494,7 +3784,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -3524,7 +3816,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3533,7 +3827,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -3563,7 +3859,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3572,7 +3870,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -3602,7 +3902,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -3632,7 +3934,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -3662,7 +3966,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -3692,7 +3998,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3701,7 +4009,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -3731,7 +4041,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -3761,7 +4073,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3770,7 +4084,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -3800,7 +4116,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -3830,7 +4148,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3839,7 +4159,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -3869,7 +4191,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3878,7 +4202,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -3908,7 +4234,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -3938,7 +4266,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3947,7 +4277,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -3977,7 +4309,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -3986,7 +4320,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -4016,7 +4352,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -4046,7 +4384,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4055,7 +4395,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -4085,7 +4427,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4094,7 +4438,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -4124,7 +4470,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4133,7 +4481,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -4163,7 +4513,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -4193,7 +4545,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4202,7 +4556,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -4232,7 +4588,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4241,7 +4599,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -4271,7 +4631,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -4301,7 +4663,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4310,7 +4674,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -4340,7 +4706,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4349,7 +4717,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -4379,7 +4749,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4388,7 +4760,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -4418,7 +4792,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -4448,7 +4824,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4457,7 +4835,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -4487,7 +4867,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4496,7 +4878,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -4526,7 +4910,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4535,7 +4921,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -4565,7 +4953,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4574,7 +4964,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -4604,7 +4996,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -4635,7 +5029,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -4666,7 +5062,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4675,7 +5073,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -4706,7 +5106,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -4737,7 +5139,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4746,7 +5150,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -4777,7 +5183,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4786,7 +5194,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -4817,7 +5227,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -4848,7 +5260,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -4879,7 +5293,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4888,7 +5304,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -4919,7 +5337,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -4950,7 +5370,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4959,7 +5381,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -4990,7 +5414,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -4999,7 +5425,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -5030,7 +5458,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -5061,7 +5491,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5070,7 +5502,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -5101,7 +5535,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5110,7 +5546,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -5141,7 +5579,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5150,7 +5590,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -5181,7 +5623,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -5212,7 +5656,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5221,7 +5667,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -5252,7 +5700,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5261,7 +5711,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -5292,7 +5744,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -5323,7 +5777,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5332,7 +5788,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -5363,7 +5821,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5372,7 +5832,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -5403,7 +5865,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5412,7 +5876,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -5443,7 +5909,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -5474,7 +5942,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5483,7 +5953,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -5514,7 +5986,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5523,7 +5997,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -5554,7 +6030,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5563,7 +6041,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -5594,7 +6074,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5603,7 +6085,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -5665,7 +6149,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -5701,7 +6187,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -5731,7 +6219,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -5761,7 +6251,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -5791,7 +6283,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -5821,7 +6315,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5830,7 +6326,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -5866,7 +6364,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5875,7 +6375,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -5905,7 +6407,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -5935,7 +6439,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5944,7 +6450,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -5974,7 +6482,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -5983,7 +6493,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -6013,7 +6525,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -6043,7 +6557,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6052,7 +6568,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -6082,7 +6600,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6091,7 +6611,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -6121,7 +6643,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6130,7 +6654,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -6160,7 +6686,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -6196,7 +6724,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -6226,7 +6756,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -6256,7 +6788,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -6286,7 +6820,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -6316,7 +6852,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6325,7 +6863,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6361,7 +6901,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6370,7 +6912,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -6400,7 +6944,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -6430,7 +6976,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6439,7 +6987,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -6469,7 +7019,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6478,7 +7030,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -6508,7 +7062,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -6538,7 +7094,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6547,7 +7105,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -6577,7 +7137,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6586,7 +7148,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6622,7 +7186,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6631,7 +7197,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -6661,7 +7229,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -6691,7 +7261,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6700,7 +7272,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -6730,7 +7304,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6739,7 +7315,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -6769,7 +7347,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6778,7 +7358,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -6808,7 +7390,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -6838,7 +7422,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6847,7 +7433,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -6877,7 +7465,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6886,7 +7476,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -6916,7 +7508,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6925,7 +7519,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -6955,7 +7551,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -6964,7 +7562,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -6994,7 +7594,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -7024,7 +7626,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7033,7 +7637,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -7063,7 +7669,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7072,7 +7680,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -7102,7 +7712,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -7132,7 +7744,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7141,7 +7755,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -7171,7 +7787,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7180,7 +7798,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -7210,7 +7830,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7219,7 +7841,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -7249,7 +7873,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -7279,7 +7905,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7288,7 +7916,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -7318,7 +7948,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7327,7 +7959,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -7357,7 +7991,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7366,7 +8002,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -7396,7 +8034,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7405,7 +8045,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -7435,7 +8077,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -7466,7 +8110,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -7497,7 +8143,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -7528,7 +8176,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7537,7 +8187,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -7568,7 +8220,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7577,7 +8231,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -7608,7 +8264,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -7639,7 +8297,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7648,7 +8308,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -7679,7 +8341,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7688,7 +8352,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -7719,7 +8385,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7728,7 +8396,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -7759,7 +8429,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -7790,7 +8462,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -7821,7 +8495,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -7852,7 +8528,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7861,7 +8539,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -7892,7 +8572,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7901,7 +8583,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -7932,7 +8616,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -7963,7 +8649,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -7972,7 +8660,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -8003,7 +8693,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8012,7 +8704,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -8043,7 +8737,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8052,7 +8748,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -8083,7 +8781,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -8114,7 +8814,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8123,7 +8825,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -8154,7 +8858,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8163,7 +8869,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -8194,7 +8902,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8203,7 +8913,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -8234,7 +8946,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8243,7 +8957,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -8274,7 +8990,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -8305,7 +9023,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8314,7 +9034,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -8345,7 +9067,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8354,7 +9078,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -8385,7 +9111,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -8416,7 +9144,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8425,7 +9155,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -8456,7 +9188,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8465,7 +9199,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -8496,7 +9232,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8505,7 +9243,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -8536,7 +9276,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -8567,7 +9309,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8576,7 +9320,9 @@ ) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -8607,7 +9353,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8616,7 +9364,9 @@ ) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -8647,7 +9397,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8656,7 +9408,9 @@ ) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -8687,7 +9441,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and @@ -8696,7 +9452,9 @@ ) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) diff --git a/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.txt b/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.txt index 53b048331a7..02904abadeb 100644 --- a/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.txt +++ b/test/passes/safe-heap_low-memory-unused_enable-threads_enable-simd.txt @@ -208,7 +208,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -244,7 +246,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -274,7 +278,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -304,7 +310,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -334,7 +342,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -364,14 +374,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -407,14 +421,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -444,7 +462,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -474,14 +494,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -511,14 +535,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -548,7 +576,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -578,14 +608,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -615,14 +649,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -652,14 +690,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -689,7 +731,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -725,7 +769,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -755,7 +801,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -785,7 +833,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -815,7 +865,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -845,14 +897,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -888,14 +944,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -925,7 +985,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -955,14 +1017,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -992,14 +1058,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -1029,7 +1099,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -1059,14 +1131,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -1096,14 +1172,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -1139,14 +1219,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -1176,7 +1260,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -1206,14 +1292,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -1243,14 +1333,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -1280,14 +1374,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -1317,7 +1415,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -1347,14 +1447,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -1384,14 +1488,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -1421,14 +1529,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -1458,14 +1570,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -1495,7 +1611,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -1525,14 +1643,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -1562,14 +1684,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -1599,7 +1725,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -1629,14 +1757,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -1666,14 +1798,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -1703,14 +1839,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -1740,7 +1880,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -1770,14 +1912,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -1807,14 +1953,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -1844,14 +1994,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -1881,14 +2035,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -1918,7 +2076,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -1949,7 +2109,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -1980,7 +2142,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -2011,14 +2175,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -2049,14 +2217,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -2087,7 +2259,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -2118,14 +2292,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -2156,14 +2334,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -2194,14 +2376,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -2232,7 +2418,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -2263,7 +2451,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -2294,7 +2484,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -2325,14 +2517,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -2363,14 +2559,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -2401,7 +2601,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -2432,14 +2634,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -2470,14 +2676,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -2508,14 +2718,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -2546,7 +2760,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -2577,14 +2793,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -2615,14 +2835,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -2653,14 +2877,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -2691,14 +2919,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -2729,7 +2961,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -2760,14 +2994,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -2798,14 +3036,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -2836,7 +3078,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -2867,14 +3111,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -2905,14 +3153,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -2943,14 +3195,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -2981,7 +3237,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -3012,14 +3270,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -3050,14 +3312,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -3088,14 +3354,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -3126,14 +3396,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -3190,7 +3464,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -3220,7 +3496,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -3250,7 +3528,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -3280,14 +3560,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -3317,7 +3601,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -3347,14 +3633,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -3384,7 +3674,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -3414,14 +3706,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -3451,14 +3747,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -3488,7 +3788,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -3518,7 +3820,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -3548,7 +3852,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -3578,14 +3884,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -3615,7 +3925,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -3645,14 +3957,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -3682,7 +3998,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -3712,14 +4030,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -3749,14 +4071,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -3786,7 +4112,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -3816,14 +4144,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -3853,14 +4185,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -3890,7 +4226,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -3920,14 +4258,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -3957,14 +4299,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -3994,14 +4340,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -4031,7 +4381,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -4061,14 +4413,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -4098,14 +4454,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -4135,7 +4495,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -4165,14 +4527,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -4202,14 +4568,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -4239,14 +4609,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -4276,7 +4650,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -4306,14 +4682,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -4343,14 +4723,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -4380,14 +4764,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -4417,14 +4805,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -4454,7 +4846,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -4485,7 +4879,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -4516,14 +4912,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -4554,7 +4954,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -4585,14 +4987,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -4623,14 +5029,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -4661,7 +5071,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -4692,7 +5104,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -4723,14 +5137,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -4761,7 +5179,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -4792,14 +5212,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -4830,14 +5254,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -4868,7 +5296,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -4899,14 +5329,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -4937,14 +5371,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -4975,14 +5413,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -5013,7 +5455,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -5044,14 +5488,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -5082,14 +5530,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -5120,7 +5572,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -5151,14 +5605,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -5189,14 +5647,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -5227,14 +5689,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -5265,7 +5731,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -5296,14 +5764,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -5334,14 +5806,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -5372,14 +5848,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -5410,14 +5890,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) @@ -5479,7 +5963,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.shr_s (i32.shl @@ -5515,7 +6001,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -5545,7 +6033,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.load8_u (local.get $2) @@ -5575,7 +6065,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -5605,7 +6097,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -5635,14 +6129,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.shr_s (i32.shl @@ -5678,14 +6176,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -5715,7 +6217,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -5745,14 +6249,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load16_u (local.get $2) @@ -5782,14 +6290,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -5819,7 +6331,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -5849,14 +6363,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -5886,14 +6404,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.load (local.get $2) @@ -5923,14 +6445,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -5960,7 +6486,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.shr_s (i64.shl @@ -5996,7 +6524,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -6026,7 +6556,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.load8_u (local.get $2) @@ -6056,7 +6588,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -6086,7 +6620,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -6116,14 +6652,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6159,14 +6699,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -6196,7 +6740,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -6226,14 +6772,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load16_u (local.get $2) @@ -6263,14 +6813,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -6300,7 +6854,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -6330,14 +6886,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -6367,14 +6927,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.shr_s (i64.shl @@ -6410,14 +6974,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -6447,7 +7015,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -6477,14 +7047,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -6514,14 +7088,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load32_u (local.get $2) @@ -6551,14 +7129,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -6588,7 +7170,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -6618,14 +7202,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -6655,14 +7243,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -6692,14 +7284,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.load (local.get $2) @@ -6729,14 +7325,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -6766,7 +7366,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -6796,14 +7398,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -6833,14 +7439,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -6870,7 +7480,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -6900,14 +7512,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -6937,14 +7553,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -6974,14 +7594,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -7011,7 +7635,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.load align=1 (local.get $2) @@ -7041,14 +7667,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=2 (local.get $2) @@ -7078,14 +7708,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=4 (local.get $2) @@ -7115,14 +7749,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load align=8 (local.get $2) @@ -7152,14 +7790,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.load (local.get $2) @@ -7189,7 +7831,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.atomic.store8 (local.get $3) @@ -7220,7 +7864,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -7251,7 +7897,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -7282,14 +7930,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store16 (local.get $3) @@ -7320,14 +7972,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -7358,7 +8014,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -7389,14 +8047,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -7427,14 +8089,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.atomic.store (local.get $3) @@ -7465,14 +8131,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -7503,7 +8173,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.atomic.store8 (local.get $3) @@ -7534,7 +8206,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -7565,7 +8239,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -7596,14 +8272,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store16 (local.get $3) @@ -7634,14 +8314,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -7672,7 +8356,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -7703,14 +8389,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -7741,14 +8431,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store32 (local.get $3) @@ -7779,14 +8473,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -7817,7 +8515,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -7848,14 +8548,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -7886,14 +8590,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -7924,14 +8632,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.atomic.store (local.get $3) @@ -7962,14 +8674,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -8000,7 +8716,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -8031,14 +8749,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -8069,14 +8791,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -8107,7 +8833,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -8138,14 +8866,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -8176,14 +8908,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -8214,14 +8950,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) @@ -8252,7 +8992,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (v128.store align=1 (local.get $3) @@ -8283,14 +9025,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=2 (local.get $3) @@ -8321,14 +9067,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=4 (local.get $3) @@ -8359,14 +9109,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store align=8 (local.get $3) @@ -8397,14 +9151,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 15) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (v128.store (local.get $3) diff --git a/test/passes/safe-heap_start-function.txt b/test/passes/safe-heap_start-function.txt index ae7559a9796..11b258945a4 100644 --- a/test/passes/safe-heap_start-function.txt +++ b/test/passes/safe-heap_start-function.txt @@ -74,7 +74,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_s (local.get $2) @@ -104,7 +106,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load8_u (local.get $2) @@ -134,7 +138,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_s align=1 (local.get $2) @@ -164,14 +170,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_s (local.get $2) @@ -201,7 +211,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load16_u align=1 (local.get $2) @@ -231,14 +243,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load16_u (local.get $2) @@ -268,7 +284,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.load align=1 (local.get $2) @@ -298,14 +316,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load align=2 (local.get $2) @@ -335,14 +357,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.load (local.get $2) @@ -372,7 +398,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_s (local.get $2) @@ -402,7 +430,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load8_u (local.get $2) @@ -432,7 +462,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_s align=1 (local.get $2) @@ -462,14 +494,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_s (local.get $2) @@ -499,7 +535,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load16_u align=1 (local.get $2) @@ -529,14 +567,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load16_u (local.get $2) @@ -566,7 +608,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_s align=1 (local.get $2) @@ -596,14 +640,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s align=2 (local.get $2) @@ -633,14 +681,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_s (local.get $2) @@ -670,7 +722,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load32_u align=1 (local.get $2) @@ -700,14 +754,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u align=2 (local.get $2) @@ -737,14 +795,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load32_u (local.get $2) @@ -774,7 +836,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.load align=1 (local.get $2) @@ -804,14 +868,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=2 (local.get $2) @@ -841,14 +909,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load align=4 (local.get $2) @@ -878,14 +950,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.load (local.get $2) @@ -915,7 +991,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.load align=1 (local.get $2) @@ -945,14 +1023,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load align=2 (local.get $2) @@ -982,14 +1064,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.load (local.get $2) @@ -1019,7 +1105,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.load align=1 (local.get $2) @@ -1049,14 +1137,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=2 (local.get $2) @@ -1086,14 +1178,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load align=4 (local.get $2) @@ -1123,14 +1219,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $2) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.load (local.get $2) @@ -1160,7 +1260,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store8 (local.get $3) @@ -1191,7 +1293,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store16 align=1 (local.get $3) @@ -1222,14 +1326,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store16 (local.get $3) @@ -1260,7 +1368,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i32.store align=1 (local.get $3) @@ -1291,14 +1401,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store align=2 (local.get $3) @@ -1329,14 +1443,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i32.store (local.get $3) @@ -1367,7 +1485,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store8 (local.get $3) @@ -1398,7 +1518,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store16 align=1 (local.get $3) @@ -1429,14 +1551,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store16 (local.get $3) @@ -1467,7 +1593,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store32 align=1 (local.get $3) @@ -1498,14 +1626,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 align=2 (local.get $3) @@ -1536,14 +1668,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store32 (local.get $3) @@ -1574,7 +1710,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (i64.store align=1 (local.get $3) @@ -1605,14 +1743,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=2 (local.get $3) @@ -1643,14 +1785,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store align=4 (local.get $3) @@ -1681,14 +1827,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (i64.store (local.get $3) @@ -1719,7 +1869,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f32.store align=1 (local.get $3) @@ -1750,14 +1902,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store align=2 (local.get $3) @@ -1788,14 +1944,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f32.store (local.get $3) @@ -1826,7 +1986,9 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (f64.store align=1 (local.get $3) @@ -1857,14 +2019,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 1) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=2 (local.get $3) @@ -1895,14 +2061,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 3) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store align=4 (local.get $3) @@ -1933,14 +2103,18 @@ ) ) ) - (call $segfault) + (then + (call $segfault) + ) ) (if (i32.and (local.get $3) (i32.const 7) ) - (call $alignfault) + (then + (call $alignfault) + ) ) (f64.store (local.get $3) diff --git a/test/passes/simplify-globals-optimizing_all-features.txt b/test/passes/simplify-globals-optimizing_all-features.txt index 72c0620a675..3f8d4374be9 100644 --- a/test/passes/simplify-globals-optimizing_all-features.txt +++ b/test/passes/simplify-globals-optimizing_all-features.txt @@ -82,8 +82,10 @@ ) (if (local.get $0) - (return - (i32.const 0) + (then + (return + (i32.const 0) + ) ) ) (if @@ -93,8 +95,10 @@ (global.get $g2) ) ) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (global.set $g1 diff --git a/test/passes/simplify-globals-optimizing_all-features.wast b/test/passes/simplify-globals-optimizing_all-features.wast index 988650a74e9..2b26654c9be 100644 --- a/test/passes/simplify-globals-optimizing_all-features.wast +++ b/test/passes/simplify-globals-optimizing_all-features.wast @@ -69,14 +69,14 @@ (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) - (if (local.get $x) (return (i32.const 0))) + (if (local.get $x) (then (return (i32.const 0)))) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) - (if (local.get $x) (return (i32.const 1))) + (if (local.get $x) (then (return (i32.const 1)))) (global.set $g1 (i32.const 200)) (global.set $g2 (local.get $x)) (local.set $x @@ -137,7 +137,9 @@ (i32.eqz (global.get $global$1) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 2) ) diff --git a/test/passes/simplify-globals_all-features.txt b/test/passes/simplify-globals_all-features.txt index e885b3cfe40..5bb7213f2df 100644 --- a/test/passes/simplify-globals_all-features.txt +++ b/test/passes/simplify-globals_all-features.txt @@ -120,8 +120,10 @@ ) (if (local.get $x) - (return - (i32.const 0) + (then + (return + (i32.const 0) + ) ) ) (local.set $x @@ -132,8 +134,10 @@ ) (if (local.get $x) - (return - (i32.const 1) + (then + (return + (i32.const 1) + ) ) ) (global.set $g1 diff --git a/test/passes/simplify-globals_all-features.wast b/test/passes/simplify-globals_all-features.wast index 52d57b656bc..6efe5eaa8f8 100644 --- a/test/passes/simplify-globals_all-features.wast +++ b/test/passes/simplify-globals_all-features.wast @@ -69,14 +69,14 @@ (func $f (param $x i32) (result i32) (global.set $g1 (i32.const 100)) (global.set $g2 (local.get $x)) - (if (local.get $x) (return (i32.const 0))) + (if (local.get $x) (then (return (i32.const 0)))) (local.set $x (i32.add (global.get $g1) (global.get $g2) ) ) - (if (local.get $x) (return (i32.const 1))) + (if (local.get $x) (then (return (i32.const 1)))) (global.set $g1 (i32.const 200)) (global.set $g2 (local.get $x)) (local.set $x diff --git a/test/passes/simplify-locals-nonesting.txt b/test/passes/simplify-locals-nonesting.txt index abc3aecb939..a5dd4d3436b 100644 --- a/test/passes/simplify-locals-nonesting.txt +++ b/test/passes/simplify-locals-nonesting.txt @@ -87,7 +87,7 @@ ) (if (local.get $8) - (block + (then (block $block1 (nop) (nop) @@ -127,7 +127,7 @@ ) (unreachable) ) - (block + (else (unreachable) (unreachable) ) @@ -157,7 +157,7 @@ ) (if (local.get $2) - (block + (then (nop) (nop) (local.set $x @@ -168,7 +168,7 @@ ) (nop) ) - (block + (else (nop) (nop) (local.set $x diff --git a/test/passes/simplify-locals-nonesting.wast b/test/passes/simplify-locals-nonesting.wast index b49ffe13897..8c4da016823 100644 --- a/test/passes/simplify-locals-nonesting.wast +++ b/test/passes/simplify-locals-nonesting.wast @@ -113,69 +113,73 @@ ) (if (local.get $8) - (block - (block $block - (local.set $9 - (local.get $a) - ) - (local.set $10 - (local.get $x) - ) - (local.set $11 - (i64.eq - (local.get $9) - (local.get $10) + (then + (block + (block $block + (local.set $9 + (local.get $a) ) - ) - (local.set $i - (local.get $11) - ) - (nop) - (local.set $12 - (local.get $a) - ) - (local.set $13 - (local.get $y) - ) - (local.set $14 - (i64.ne - (local.get $12) - (local.get $13) + (local.set $10 + (local.get $x) ) - ) - (local.set $j - (local.get $14) - ) - (nop) - (local.set $15 - (local.get $i) - ) - (local.set $16 - (local.get $j) - ) - (local.set $17 - (i32.and - (local.get $15) - (local.get $16) + (local.set $11 + (i64.eq + (local.get $9) + (local.get $10) + ) ) - ) - (local.set $r - (local.get $17) - ) - (nop) - (local.set $18 - (local.get $r) - ) - (return - (local.get $18) + (local.set $i + (local.get $11) + ) + (nop) + (local.set $12 + (local.get $a) + ) + (local.set $13 + (local.get $y) + ) + (local.set $14 + (i64.ne + (local.get $12) + (local.get $13) + ) + ) + (local.set $j + (local.get $14) + ) + (nop) + (local.set $15 + (local.get $i) + ) + (local.set $16 + (local.get $j) + ) + (local.set $17 + (i32.and + (local.get $15) + (local.get $16) + ) + ) + (local.set $r + (local.get $17) + ) + (nop) + (local.set $18 + (local.get $r) + ) + (return + (local.get $18) + ) + (unreachable) ) (unreachable) ) - (unreachable) ) - (block - (unreachable) - (unreachable) + (else + (block + (unreachable) + (unreachable) + ) ) ) ) @@ -205,35 +209,39 @@ ) (if (local.get $2) - (block - (local.set $3 - (local.get $x) - ) - (local.set $4 - (i32.add - (local.get $3) - (i32.const 1) + (then + (block + (local.set $3 + (local.get $x) ) + (local.set $4 + (i32.add + (local.get $3) + (i32.const 1) + ) + ) + (local.set $x + (local.get $4) + ) + (nop) ) - (local.set $x - (local.get $4) - ) - (nop) ) - (block - (local.set $5 - (local.get $x) - ) - (local.set $6 - (i32.add - (local.get $5) - (i32.const 2) + (else + (block + (local.set $5 + (local.get $x) ) + (local.set $6 + (i32.add + (local.get $5) + (i32.const 2) + ) + ) + (local.set $x + (local.get $6) + ) + (nop) ) - (local.set $x - (local.get $6) - ) - (nop) ) ) ) diff --git a/test/passes/simplify-locals-nostructure.txt b/test/passes/simplify-locals-nostructure.txt index f0be46edc9e..18b7052d4e2 100644 --- a/test/passes/simplify-locals-nostructure.txt +++ b/test/passes/simplify-locals-nostructure.txt @@ -14,18 +14,26 @@ (local.tee $x (i32.const 1) ) - (nop) + (then + (nop) + ) ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (nop) (drop (if (result i32) (i32.const 2) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) ) (nop) @@ -36,11 +44,15 @@ ) (if (i32.const 6) - (local.set $a - (i32.const 7) + (then + (local.set $a + (i32.const 7) + ) ) - (local.set $a - (i32.const 8) + (else + (local.set $a + (i32.const 8) + ) ) ) (drop @@ -49,7 +61,7 @@ (block $val (if (i32.const 10) - (block + (then (local.set $b (i32.const 11) ) @@ -97,8 +109,10 @@ ) (if (i32.const 1) - (drop - (local.get $other) + (then + (drop + (local.get $other) + ) ) ) ) @@ -119,10 +133,12 @@ (local $y i32) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) ) - (block + (else (nop) (nop) ) diff --git a/test/passes/simplify-locals-nostructure.wast b/test/passes/simplify-locals-nostructure.wast index 4dc6cfb827b..e93a77ced04 100644 --- a/test/passes/simplify-locals-nostructure.wast +++ b/test/passes/simplify-locals-nostructure.wast @@ -7,22 +7,28 @@ (local $a i32) (local $b i32) (local.set $x (i32.const 1)) - (if (local.get $x) (nop)) - (if (local.get $x) (nop)) - (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (if (local.get $x) (then (nop))) + (if (local.get $x) (then (nop))) + (local.set $y (if (result i32) (i32.const 2) (then (i32.const 3) )(else (i32.const 4)))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) - (local.set $a (i32.const 7)) - (local.set $a (i32.const 8)) + (then + (local.set $a (i32.const 7)) + ) + (else + (local.set $a (i32.const 8)) + ) ) (drop (local.get $a)) (block $val (if (i32.const 10) - (block - (local.set $b (i32.const 11)) - (br $val) + (then + (block + (local.set $b (i32.const 11)) + (br $val) + ) ) ) (local.set $b (i32.const 12)) @@ -65,8 +71,10 @@ (local.get $var$0) ) (if (i32.const 1) - (drop - (local.get $other) + (then + (drop + (local.get $other) + ) ) ) ) @@ -88,10 +96,14 @@ (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) - (local.set $x (i32.const 2)) - (block - (local.set $y (local.get $x)) - (local.set $x (local.get $y)) + (then + (local.set $x (i32.const 2)) + ) + (else + (block + (local.set $y (local.get $x)) + (local.set $x (local.get $y)) + ) ) ) (local.get $x) diff --git a/test/passes/simplify-locals-notee-nostructure.txt b/test/passes/simplify-locals-notee-nostructure.txt index 0c8a3d78bfd..6015fc83328 100644 --- a/test/passes/simplify-locals-notee-nostructure.txt +++ b/test/passes/simplify-locals-notee-nostructure.txt @@ -11,18 +11,26 @@ ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (nop) (drop (if (result i32) (i32.const 2) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) ) (nop) @@ -33,11 +41,15 @@ ) (if (i32.const 6) - (local.set $a - (i32.const 7) + (then + (local.set $a + (i32.const 7) + ) ) - (local.set $a - (i32.const 8) + (else + (local.set $a + (i32.const 8) + ) ) ) (drop @@ -46,7 +58,7 @@ (block $val (if (i32.const 10) - (block + (then (local.set $b (i32.const 11) ) diff --git a/test/passes/simplify-locals-notee-nostructure.wast b/test/passes/simplify-locals-notee-nostructure.wast index 8185bbe3523..51f910eebcb 100644 --- a/test/passes/simplify-locals-notee-nostructure.wast +++ b/test/passes/simplify-locals-notee-nostructure.wast @@ -6,22 +6,28 @@ (local $a i32) (local $b i32) (local.set $x (i32.const 1)) - (if (local.get $x) (nop)) - (if (local.get $x) (nop)) - (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (if (local.get $x) (then (nop))) + (if (local.get $x) (then (nop))) + (local.set $y (if (result i32) (i32.const 2) (then (i32.const 3) )(else (i32.const 4)))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) - (local.set $a (i32.const 7)) - (local.set $a (i32.const 8)) + (then + (local.set $a (i32.const 7)) + ) + (else + (local.set $a (i32.const 8)) + ) ) (drop (local.get $a)) (block $val (if (i32.const 10) - (block - (local.set $b (i32.const 11)) - (br $val) + (then + (block + (local.set $b (i32.const 11)) + (br $val) + ) ) ) (local.set $b (i32.const 12)) diff --git a/test/passes/simplify-locals-notee.txt b/test/passes/simplify-locals-notee.txt index 56ac575f2f3..ae12af8c992 100644 --- a/test/passes/simplify-locals-notee.txt +++ b/test/passes/simplify-locals-notee.txt @@ -11,18 +11,26 @@ ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (nop) (drop (if (result i32) (i32.const 2) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) ) (nop) @@ -35,11 +43,11 @@ (drop (if (result i32) (i32.const 6) - (block (result i32) + (then (nop) (i32.const 7) ) - (block (result i32) + (else (nop) (i32.const 8) ) @@ -50,7 +58,7 @@ (block $val (result i32) (if (i32.const 10) - (block + (then (nop) (br $val (i32.const 11) diff --git a/test/passes/simplify-locals-notee.wast b/test/passes/simplify-locals-notee.wast index 8185bbe3523..51f910eebcb 100644 --- a/test/passes/simplify-locals-notee.wast +++ b/test/passes/simplify-locals-notee.wast @@ -6,22 +6,28 @@ (local $a i32) (local $b i32) (local.set $x (i32.const 1)) - (if (local.get $x) (nop)) - (if (local.get $x) (nop)) - (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (if (local.get $x) (then (nop))) + (if (local.get $x) (then (nop))) + (local.set $y (if (result i32) (i32.const 2) (then (i32.const 3) )(else (i32.const 4)))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) - (local.set $a (i32.const 7)) - (local.set $a (i32.const 8)) + (then + (local.set $a (i32.const 7)) + ) + (else + (local.set $a (i32.const 8)) + ) ) (drop (local.get $a)) (block $val (if (i32.const 10) - (block - (local.set $b (i32.const 11)) - (br $val) + (then + (block + (local.set $b (i32.const 11)) + (br $val) + ) ) ) (local.set $b (i32.const 12)) diff --git a/test/passes/simplify-locals_all-features.txt b/test/passes/simplify-locals_all-features.txt index 4225a70336e..36a635e2973 100644 --- a/test/passes/simplify-locals_all-features.txt +++ b/test/passes/simplify-locals_all-features.txt @@ -31,18 +31,26 @@ (local.tee $x (i32.const 1) ) - (nop) + (then + (nop) + ) ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (nop) (drop (if (result i32) (i32.const 2) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) ) (nop) @@ -55,11 +63,11 @@ (drop (if (result i32) (i32.const 6) - (block (result i32) + (then (nop) (i32.const 7) ) - (block (result i32) + (else (nop) (i32.const 8) ) @@ -70,7 +78,7 @@ (block $val (result i32) (if (i32.const 10) - (block + (then (nop) (br $val (i32.const 11) @@ -488,8 +496,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -503,8 +515,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -514,8 +530,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -533,8 +553,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -548,8 +572,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -559,8 +587,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -672,11 +704,11 @@ (local.set $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 13) ) - (block (result i32) + (else (nop) (i32.const 24) ) @@ -689,13 +721,13 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (block $block3 (nop) ) (i32.const 14) ) - (block (result i32) + (else (block $block5 (nop) ) @@ -820,19 +852,23 @@ (drop (if (result i32) (local.get $x) - (block $block53 (result i32) - (nop) - (local.set $temp - (local.get $y) + (then + (block $block53 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) - (block $block54 (result i32) - (nop) - (local.set $temp - (local.get $y) + (else + (block $block54 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) ) ) @@ -852,19 +888,21 @@ (local.get $label) (i32.const 15) ) - (block $block - (nop) - (nop) - (drop - (br_if $label$break$L4 - (local.tee $label - (i32.const 0) - ) - (i32.eqz - (i32.eq - (local.get $$$0151) + (then + (block $block + (nop) + (nop) + (drop + (br_if $label$break$L4 + (local.tee $label (i32.const 0) ) + (i32.eqz + (i32.eq + (local.get $$$0151) + (i32.const 0) + ) + ) ) ) ) @@ -887,11 +925,15 @@ (func $if-return-but-unreachable (type $11) (param $var$0 i64) (if (unreachable) - (drop - (local.get $var$0) + (then + (drop + (local.get $var$0) + ) ) - (local.set $var$0 - (i64.const 1) + (else + (local.set $var$0 + (i64.const 1) + ) ) ) ) @@ -901,11 +943,13 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $x) + (else + (local.get $x) + ) ) ) ) @@ -918,11 +962,13 @@ (local.set $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $x) + (else + (local.get $x) + ) ) ) (local.get $y) @@ -935,22 +981,24 @@ (local.get $0) (i32.const -1073741824) ) - (block (result i32) + (then (nop) (i32.const -1073741824) ) - (block (result i32) + (else (nop) (if (result i32) (i32.gt_s (local.get $0) (i32.const 1073741823) ) - (block (result i32) + (then (nop) (i32.const 1073741823) ) - (local.get $0) + (else + (local.get $0) + ) ) ) ) @@ -967,8 +1015,12 @@ (local.set $x (if (result i32) (i32.const -1) - (i32.const -2) - (local.get $x) + (then + (i32.const -2) + ) + (else + (local.get $x) + ) ) ) (drop @@ -976,8 +1028,12 @@ (local.tee $x (if (result i32) (i32.const -3) - (i32.const -4) - (local.get $x) + (then + (i32.const -4) + ) + (else + (local.get $x) + ) ) ) ) @@ -988,8 +1044,12 @@ (local.tee $y (if (result i32) (i32.const -5) - (i32.const -6) - (local.get $y) + (then + (i32.const -6) + ) + (else + (local.get $y) + ) ) ) ) @@ -1000,8 +1060,12 @@ (local.tee $z (if (result i32) (i32.const -7) - (i32.const -8) - (local.get $z) + (then + (i32.const -8) + ) + (else + (local.get $z) + ) ) ) (local.get $z) @@ -1016,22 +1080,28 @@ (local.tee $4 (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $4) + (else + (local.get $4) + ) ) ) - (block (result i32) + (then (nop) (i32.const 0) ) - (local.get $4) + (else + (local.get $4) + ) ) ) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 0) ) @@ -1040,16 +1110,28 @@ (local.tee $20 (if (result i32) (i32.const 1) - (if (result i32) - (i32.const 2) + (then (if (result i32) - (i32.const 3) - (i32.const 4) - (local.get $20) + (i32.const 2) + (then + (if (result i32) + (i32.const 3) + (then + (i32.const 4) + ) + (else + (local.get $20) + ) + ) + ) + (else + (local.get $20) + ) ) + ) + (else (local.get $20) ) - (local.get $20) ) ) ) @@ -1085,8 +1167,12 @@ (i32.eqz (local.get $0) ) - (f32.const 4623408228068004207103214e13) - (local.get $3) + (then + (f32.const 4623408228068004207103214e13) + ) + (else + (local.get $3) + ) ) ) ) @@ -1098,7 +1184,7 @@ ) (if (result f64) (global.get $global$0) - (block + (then (global.set $global$0 (i32.sub (global.get $global$0) @@ -1116,7 +1202,9 @@ ) (br $label$1) ) - (f64.const -70) + (else + (f64.const -70) + ) ) ) ) @@ -1319,11 +1407,11 @@ (drop (if (result i32) (i32.const 1) - (block + (then (br $out) (nop) ) - (block (result i32) + (else (nop) (i32.const 2) ) @@ -1332,11 +1420,11 @@ (drop (if (result i32) (i32.const 3) - (block (result i32) + (then (nop) (i32.const 4) ) - (block + (else (br $out) (nop) ) @@ -1344,8 +1432,12 @@ ) (if (i32.const 5) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1356,13 +1448,13 @@ (drop (if (result i32) (i32.const 1) - (block + (then (nop) (nop) (br $out) (nop) ) - (block (result i32) + (else (nop) (nop) (i32.const 4) @@ -1372,12 +1464,12 @@ (drop (if (result i32) (i32.const 6) - (block (result i32) + (then (nop) (nop) (i32.const 7) ) - (block + (else (nop) (nop) (br $out) @@ -1387,12 +1479,12 @@ ) (if (i32.const 11) - (block + (then (nop) (nop) (br $out) ) - (block + (else (nop) (nop) (br $out) @@ -1428,11 +1520,11 @@ (nop) (if (result i32) (i32.const 0) - (block (result i32) + (then (nop) (i32.const 0) ) - (block + (else (loop $label$4 (br $label$4) ) @@ -1453,11 +1545,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $x) + (else + (local.get $x) + ) ) ) (drop @@ -1476,11 +1570,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (drop @@ -1508,11 +1604,13 @@ (local.set $y (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (local.set $x @@ -1521,11 +1619,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (nop) @@ -1542,11 +1642,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (nop) @@ -1603,11 +1705,11 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (block (result i32) + (else (nop) (nop) (local.get $x) @@ -1660,11 +1762,11 @@ (nop) (if (result f32) (call $fimport$0) - (block (result f32) + (then (nop) (f32.const -2048) ) - (block + (else (call $fimport$1 (i32.const -25732) ) diff --git a/test/passes/simplify-locals_all-features.wast b/test/passes/simplify-locals_all-features.wast index f46f9fd7129..b302a317ded 100644 --- a/test/passes/simplify-locals_all-features.wast +++ b/test/passes/simplify-locals_all-features.wast @@ -21,22 +21,28 @@ (local $a i32) (local $b i32) (local.set $x (i32.const 1)) - (if (local.get $x) (nop)) - (if (local.get $x) (nop)) - (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (if (local.get $x) (then (nop))) + (if (local.get $x) (then (nop))) + (local.set $y (if (result i32) (i32.const 2) (then (i32.const 3) )(else (i32.const 4)))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) - (local.set $a (i32.const 7)) - (local.set $a (i32.const 8)) + (then + (local.set $a (i32.const 7)) + ) + (else + (local.set $a (i32.const 8)) + ) ) (drop (local.get $a)) (block $val (if (i32.const 10) - (block - (local.set $b (i32.const 11)) - (br $val) + (then + (block + (local.set $b (i32.const 11)) + (br $val) + ) ) ) (local.set $b (i32.const 12)) @@ -502,8 +508,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -517,8 +527,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -528,8 +542,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -547,8 +565,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -562,8 +584,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -573,8 +599,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -681,23 +711,31 @@ (block $waka2 (if (i32.const 1) - (local.set $x - (i32.const 13) + (then + (local.set $x + (i32.const 13) + ) ) - (local.set $x - (i32.const 24) + (else + (local.set $x + (i32.const 24) + ) ) ) (if (i32.const 1) - (block $block3 - (local.set $x - (i32.const 14) + (then + (block $block3 + (local.set $x + (i32.const 14) + ) ) ) - (block $block5 - (local.set $x - (i32.const 25) + (else + (block $block5 + (local.set $x + (i32.const 25) + ) ) ) ) @@ -811,19 +849,23 @@ (drop (if (result i32) (local.get $x) - (block $block53 (result i32) - (nop) - (local.set $temp - (local.get $y) + (then + (block $block53 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) - (block $block54 (result i32) - (nop) - (local.set $temp - (local.get $y) + (else + (block $block54 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) ) ) @@ -839,19 +881,21 @@ (local.get $label) (i32.const 15) ) - (block $block - (local.set $label - (i32.const 0) - ) - (local.set $$cond2 - (i32.eq - (local.get $$$0151) + (then + (block $block + (local.set $label (i32.const 0) ) - ) - (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped - (i32.eqz - (local.get $$cond2) + (local.set $$cond2 + (i32.eq + (local.get $$$0151) + (i32.const 0) + ) + ) + (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped + (i32.eqz + (local.get $$cond2) + ) ) ) ) @@ -876,11 +920,15 @@ (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) - (local.set $var$0 - (local.get $var$0) + (then + (local.set $var$0 + (local.get $var$0) + ) ) - (local.set $var$0 - (i64.const 1) + (else + (local.set $var$0 + (i64.const 1) + ) ) ) ) @@ -888,8 +936,10 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) ) ) (local.get $x) @@ -902,8 +952,10 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) ) ) (local.get $y) @@ -914,16 +966,22 @@ (local.get $0) (i32.const -1073741824) ) - (local.set $0 - (i32.const -1073741824) - ) - (if - (i32.gt_s - (local.get $0) - (i32.const 1073741823) - ) + (then (local.set $0 - (i32.const 1073741823) + (i32.const -1073741824) + ) + ) + (else + (if + (i32.gt_s + (local.get $0) + (i32.const 1073741823) + ) + (then + (local.set $0 + (i32.const 1073741823) + ) + ) ) ) ) @@ -941,8 +999,12 @@ (local.set $x (if (result i32) (i32.const -1) - (i32.const -2) - (local.get $x) + (then + (i32.const -2) + ) + (else + (local.get $x) + ) ) ) ;; oops, this one is a tee @@ -951,8 +1013,12 @@ (local.tee $x (if (result i32) (i32.const -3) - (i32.const -4) - (local.get $x) + (then + (i32.const -4) + ) + (else + (local.get $x) + ) ) ) ) @@ -961,8 +1027,12 @@ (local.set $y (if (result i32) (i32.const -5) - (i32.const -6) - (local.get $y) + (then + (i32.const -6) + ) + (else + (local.get $y) + ) ) ) (drop (i32.eqz (local.get $y))) @@ -970,8 +1040,12 @@ (local.set $z (if (result i32) (i32.const -7) - (i32.const -8) - (local.get $z) + (then + (i32.const -8) + ) + (else + (local.get $z) + ) ) ) (drop @@ -984,19 +1058,25 @@ (block $label$1 (result i32) (if (i32.const 1) - (local.set $4 - (i32.const 2) + (then + (local.set $4 + (i32.const 2) + ) ) ) (if (local.get $4) - (local.set $4 - (i32.const 0) + (then + (local.set $4 + (i32.const 0) + ) ) ) (local.get $4) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 0) ) @@ -1004,16 +1084,28 @@ (local.set $20 (if (result i32) (i32.const 1) - (if (result i32) - (i32.const 2) + (then (if (result i32) - (i32.const 3) - (i32.const 4) - (local.get $20) + (i32.const 2) + (then + (if (result i32) + (i32.const 3) + (then + (i32.const 4) + ) + (else + (local.get $20) + ) + ) + ) + (else + (local.get $20) + ) ) + ) + (else (local.get $20) ) - (local.get $20) ) ) (local.get $20) @@ -1050,8 +1142,12 @@ (i32.eqz (local.get $0) ) - (f32.const 4623408228068004207103214e13) - (local.get $3) + (then + (f32.const 4623408228068004207103214e13) + ) + (else + (local.get $3) + ) ) ) ) @@ -1063,25 +1159,29 @@ ) (if (result f64) (global.get $global$0) - (block - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (then + (block + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) - ) - (local.set $0 - (i32.const -65) - ) - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (local.set $0 + (i32.const -65) + ) + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) + (br $label$1) ) - (br $label$1) ) - (f64.const -70) + (else + (f64.const -70) + ) ) ) ) @@ -1199,22 +1299,34 @@ (block $out (if (i32.const 1) - (br $out) - (local.set $x - (i32.const 2) + (then + (br $out) + ) + (else + (local.set $x + (i32.const 2) + ) ) ) (if (i32.const 3) - (local.set $x - (i32.const 4) + (then + (local.set $x + (i32.const 4) + ) + ) + (else + (br $out) ) - (br $out) ) (if (i32.const 5) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1224,63 +1336,75 @@ (block $out (if (i32.const 1) - (block - (local.set $x - (i32.const 2) - ) - (local.set $y - (i32.const 3) + (then + (block + (local.set $x + (i32.const 2) + ) + (local.set $y + (i32.const 3) + ) + (br $out) ) - (br $out) ) - (block - (local.set $x - (i32.const 4) - ) - (local.set $y - (i32.const 5) + (else + (block + (local.set $x + (i32.const 4) + ) + (local.set $y + (i32.const 5) + ) ) ) ) (if (i32.const 6) - (block - (local.set $x - (i32.const 7) - ) - (local.set $y - (i32.const 8) + (then + (block + (local.set $x + (i32.const 7) + ) + (local.set $y + (i32.const 8) + ) ) ) - (block - (local.set $x - (i32.const 9) - ) - (local.set $y - (i32.const 10) + (else + (block + (local.set $x + (i32.const 9) + ) + (local.set $y + (i32.const 10) + ) + (br $out) ) - (br $out) ) ) (if (i32.const 11) - (block - (local.set $x - (i32.const 12) - ) - (local.set $y - (i32.const 13) + (then + (block + (local.set $x + (i32.const 12) + ) + (local.set $y + (i32.const 13) + ) + (br $out) ) - (br $out) ) - (block - (local.set $x - (i32.const 14) - ) - (local.set $y - (i32.const 15) + (else + (block + (local.set $x + (i32.const 14) + ) + (local.set $y + (i32.const 15) + ) + (br $out) ) - (br $out) ) ) ) @@ -1308,11 +1432,15 @@ (local $0 i32) (if (i32.const 0) - (local.set $0 - (i32.const 0) + (then + (local.set $0 + (i32.const 0) + ) ) - (loop $label$4 - (br $label$4) + (else + (loop $label$4 + (br $label$4) + ) ) ) (local.get $0) @@ -1322,11 +1450,13 @@ (block $label$2 (if (i32.const 0) - (block - (local.set $var$0 - (i32.const -1) + (then + (block + (local.set $var$0 + (i32.const -1) + ) + (br $label$2) ) - (br $label$2) ) ) (local.set $var$0 @@ -1341,7 +1471,9 @@ (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) @@ -1351,7 +1483,9 @@ (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) @@ -1366,11 +1500,15 @@ (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -1378,7 +1516,9 @@ (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -1425,10 +1565,14 @@ (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) - (local.set $x (i32.const 2)) - (block - (local.set $y (local.get $x)) - (local.set $x (local.get $y)) + (then + (local.set $x (i32.const 2)) + ) + (else + (block + (local.set $y (local.get $x)) + (local.set $x (local.get $y)) + ) ) ) (local.get $x) @@ -1472,14 +1616,18 @@ ) (if (local.get $0) - (local.set $5 - (f32.const -2048) + (then + (local.set $5 + (f32.const -2048) + ) ) - (block - (call $fimport$1 - (i32.const -25732) + (else + (block + (call $fimport$1 + (i32.const -25732) + ) + (br $label$2) ) - (br $label$2) ) ) ) diff --git a/test/passes/simplify-locals_all-features_disable-exception-handling.txt b/test/passes/simplify-locals_all-features_disable-exception-handling.txt index 6ee89372d20..f14253c3e73 100644 --- a/test/passes/simplify-locals_all-features_disable-exception-handling.txt +++ b/test/passes/simplify-locals_all-features_disable-exception-handling.txt @@ -31,18 +31,26 @@ (local.tee $x (i32.const 1) ) - (nop) + (then + (nop) + ) ) (if (local.get $x) - (nop) + (then + (nop) + ) ) (nop) (drop (if (result i32) (i32.const 2) - (i32.const 3) - (i32.const 4) + (then + (i32.const 3) + ) + (else + (i32.const 4) + ) ) ) (nop) @@ -55,11 +63,11 @@ (drop (if (result i32) (i32.const 6) - (block (result i32) + (then (nop) (i32.const 7) ) - (block (result i32) + (else (nop) (i32.const 8) ) @@ -70,7 +78,7 @@ (block $val (result i32) (if (i32.const 10) - (block + (then (nop) (br $val (i32.const 11) @@ -492,8 +500,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -510,8 +522,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -521,8 +537,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -550,8 +570,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -568,8 +592,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -579,8 +607,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -666,11 +698,11 @@ (local.set $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 13) ) - (block (result i32) + (else (nop) (i32.const 24) ) @@ -683,13 +715,13 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (block $block3 (nop) ) (i32.const 14) ) - (block (result i32) + (else (block $block5 (nop) ) @@ -814,19 +846,23 @@ (drop (if (result i32) (local.get $x) - (block $block53 (result i32) - (nop) - (local.set $temp - (local.get $y) + (then + (block $block53 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) - (block $block54 (result i32) - (nop) - (local.set $temp - (local.get $y) + (else + (block $block54 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) ) ) @@ -846,19 +882,21 @@ (local.get $label) (i32.const 15) ) - (block $block - (nop) - (nop) - (drop - (br_if $label$break$L4 - (local.tee $label - (i32.const 0) - ) - (i32.eqz - (i32.eq - (local.get $$$0151) + (then + (block $block + (nop) + (nop) + (drop + (br_if $label$break$L4 + (local.tee $label (i32.const 0) ) + (i32.eqz + (i32.eq + (local.get $$$0151) + (i32.const 0) + ) + ) ) ) ) @@ -881,11 +919,15 @@ (func $if-return-but-unreachable (type $11) (param $var$0 i64) (if (unreachable) - (drop - (local.get $var$0) + (then + (drop + (local.get $var$0) + ) ) - (local.set $var$0 - (i64.const 1) + (else + (local.set $var$0 + (i64.const 1) + ) ) ) ) @@ -895,11 +937,13 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $x) + (else + (local.get $x) + ) ) ) ) @@ -912,11 +956,13 @@ (local.set $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $x) + (else + (local.get $x) + ) ) ) (local.get $y) @@ -929,22 +975,24 @@ (local.get $0) (i32.const -1073741824) ) - (block (result i32) + (then (nop) (i32.const -1073741824) ) - (block (result i32) + (else (nop) (if (result i32) (i32.gt_s (local.get $0) (i32.const 1073741823) ) - (block (result i32) + (then (nop) (i32.const 1073741823) ) - (local.get $0) + (else + (local.get $0) + ) ) ) ) @@ -961,8 +1009,12 @@ (local.set $x (if (result i32) (i32.const -1) - (i32.const -2) - (local.get $x) + (then + (i32.const -2) + ) + (else + (local.get $x) + ) ) ) (drop @@ -970,8 +1022,12 @@ (local.tee $x (if (result i32) (i32.const -3) - (i32.const -4) - (local.get $x) + (then + (i32.const -4) + ) + (else + (local.get $x) + ) ) ) ) @@ -982,8 +1038,12 @@ (local.tee $y (if (result i32) (i32.const -5) - (i32.const -6) - (local.get $y) + (then + (i32.const -6) + ) + (else + (local.get $y) + ) ) ) ) @@ -994,8 +1054,12 @@ (local.tee $z (if (result i32) (i32.const -7) - (i32.const -8) - (local.get $z) + (then + (i32.const -8) + ) + (else + (local.get $z) + ) ) ) (local.get $z) @@ -1010,22 +1074,28 @@ (local.tee $4 (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (local.get $4) + (else + (local.get $4) + ) ) ) - (block (result i32) + (then (nop) (i32.const 0) ) - (local.get $4) + (else + (local.get $4) + ) ) ) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 0) ) @@ -1034,16 +1104,28 @@ (local.tee $20 (if (result i32) (i32.const 1) - (if (result i32) - (i32.const 2) + (then (if (result i32) - (i32.const 3) - (i32.const 4) - (local.get $20) + (i32.const 2) + (then + (if (result i32) + (i32.const 3) + (then + (i32.const 4) + ) + (else + (local.get $20) + ) + ) + ) + (else + (local.get $20) + ) ) + ) + (else (local.get $20) ) - (local.get $20) ) ) ) @@ -1079,8 +1161,12 @@ (i32.eqz (local.get $0) ) - (f32.const 4623408228068004207103214e13) - (local.get $3) + (then + (f32.const 4623408228068004207103214e13) + ) + (else + (local.get $3) + ) ) ) ) @@ -1092,7 +1178,7 @@ ) (if (result f64) (global.get $global$0) - (block + (then (global.set $global$0 (i32.sub (global.get $global$0) @@ -1110,7 +1196,9 @@ ) (br $label$1) ) - (f64.const -70) + (else + (f64.const -70) + ) ) ) ) @@ -1313,11 +1401,11 @@ (drop (if (result i32) (i32.const 1) - (block + (then (br $out) (nop) ) - (block (result i32) + (else (nop) (i32.const 2) ) @@ -1326,11 +1414,11 @@ (drop (if (result i32) (i32.const 3) - (block (result i32) + (then (nop) (i32.const 4) ) - (block + (else (br $out) (nop) ) @@ -1338,8 +1426,12 @@ ) (if (i32.const 5) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1350,13 +1442,13 @@ (drop (if (result i32) (i32.const 1) - (block + (then (nop) (nop) (br $out) (nop) ) - (block (result i32) + (else (nop) (nop) (i32.const 4) @@ -1366,12 +1458,12 @@ (drop (if (result i32) (i32.const 6) - (block (result i32) + (then (nop) (nop) (i32.const 7) ) - (block + (else (nop) (nop) (br $out) @@ -1381,12 +1473,12 @@ ) (if (i32.const 11) - (block + (then (nop) (nop) (br $out) ) - (block + (else (nop) (nop) (br $out) @@ -1422,11 +1514,11 @@ (nop) (if (result i32) (i32.const 0) - (block (result i32) + (then (nop) (i32.const 0) ) - (block + (else (loop $label$4 (br $label$4) ) @@ -1447,11 +1539,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $x) + (else + (local.get $x) + ) ) ) (drop @@ -1470,11 +1564,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (drop @@ -1502,11 +1598,13 @@ (local.set $y (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (local.set $x @@ -1515,11 +1613,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (nop) @@ -1536,11 +1636,13 @@ (drop (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 1) ) - (local.get $y) + (else + (local.get $y) + ) ) ) (nop) @@ -1597,11 +1699,11 @@ (local.tee $x (if (result i32) (i32.const 1) - (block (result i32) + (then (nop) (i32.const 2) ) - (block (result i32) + (else (nop) (nop) (local.get $x) @@ -1654,11 +1756,11 @@ (nop) (if (result f32) (call $fimport$0) - (block (result f32) + (then (nop) (f32.const -2048) ) - (block + (else (call $fimport$1 (i32.const -25732) ) diff --git a/test/passes/simplify-locals_all-features_disable-exception-handling.wast b/test/passes/simplify-locals_all-features_disable-exception-handling.wast index 1f308723a65..9cb4bf748bd 100644 --- a/test/passes/simplify-locals_all-features_disable-exception-handling.wast +++ b/test/passes/simplify-locals_all-features_disable-exception-handling.wast @@ -21,22 +21,28 @@ (local $a i32) (local $b i32) (local.set $x (i32.const 1)) - (if (local.get $x) (nop)) - (if (local.get $x) (nop)) - (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) + (if (local.get $x) (then (nop))) + (if (local.get $x) (then (nop))) + (local.set $y (if (result i32) (i32.const 2) (then (i32.const 3) )(else (i32.const 4)))) (drop (local.get $y)) (local.set $z (block (result i32) (i32.const 5))) (drop (local.get $z)) (if (i32.const 6) - (local.set $a (i32.const 7)) - (local.set $a (i32.const 8)) + (then + (local.set $a (i32.const 7)) + ) + (else + (local.set $a (i32.const 8)) + ) ) (drop (local.get $a)) (block $val (if (i32.const 10) - (block - (local.set $b (i32.const 11)) - (br $val) + (then + (block + (local.set $b (i32.const 11)) + (br $val) + ) ) ) (local.set $b (i32.const 12)) @@ -502,8 +508,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -517,8 +527,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -528,8 +542,12 @@ (local.get $$a$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -547,8 +565,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -562,8 +584,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 31) ) @@ -573,8 +599,12 @@ (local.get $$b$1) (i32.const 0) ) - (i32.const -1) - (i32.const 0) + (then + (i32.const -1) + ) + (else + (i32.const 0) + ) ) (i32.const 1) ) @@ -681,23 +711,31 @@ (block $waka2 (if (i32.const 1) - (local.set $x - (i32.const 13) + (then + (local.set $x + (i32.const 13) + ) ) - (local.set $x - (i32.const 24) + (else + (local.set $x + (i32.const 24) + ) ) ) (if (i32.const 1) - (block $block3 - (local.set $x - (i32.const 14) + (then + (block $block3 + (local.set $x + (i32.const 14) + ) ) ) - (block $block5 - (local.set $x - (i32.const 25) + (else + (block $block5 + (local.set $x + (i32.const 25) + ) ) ) ) @@ -811,19 +849,23 @@ (drop (if (result i32) (local.get $x) - (block $block53 (result i32) - (nop) - (local.set $temp - (local.get $y) + (then + (block $block53 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) - (block $block54 (result i32) - (nop) - (local.set $temp - (local.get $y) + (else + (block $block54 (result i32) + (nop) + (local.set $temp + (local.get $y) + ) + (local.get $z) ) - (local.get $z) ) ) ) @@ -839,19 +881,21 @@ (local.get $label) (i32.const 15) ) - (block $block - (local.set $label - (i32.const 0) - ) - (local.set $$cond2 - (i32.eq - (local.get $$$0151) + (then + (block $block + (local.set $label (i32.const 0) ) - ) - (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped - (i32.eqz - (local.get $$cond2) + (local.set $$cond2 + (i32.eq + (local.get $$$0151) + (i32.const 0) + ) + ) + (br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped + (i32.eqz + (local.get $$cond2) + ) ) ) ) @@ -876,11 +920,15 @@ (func $if-return-but-unreachable (param $var$0 i64) (if (unreachable) - (local.set $var$0 - (local.get $var$0) + (then + (local.set $var$0 + (local.get $var$0) + ) ) - (local.set $var$0 - (i64.const 1) + (else + (local.set $var$0 + (i64.const 1) + ) ) ) ) @@ -888,8 +936,10 @@ (local $x i32) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) ) ) (local.get $x) @@ -902,8 +952,10 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) ) ) (local.get $y) @@ -914,16 +966,22 @@ (local.get $0) (i32.const -1073741824) ) - (local.set $0 - (i32.const -1073741824) - ) - (if - (i32.gt_s - (local.get $0) - (i32.const 1073741823) - ) + (then (local.set $0 - (i32.const 1073741823) + (i32.const -1073741824) + ) + ) + (else + (if + (i32.gt_s + (local.get $0) + (i32.const 1073741823) + ) + (then + (local.set $0 + (i32.const 1073741823) + ) + ) ) ) ) @@ -941,8 +999,12 @@ (local.set $x (if (result i32) (i32.const -1) - (i32.const -2) - (local.get $x) + (then + (i32.const -2) + ) + (else + (local.get $x) + ) ) ) ;; oops, this one is a tee @@ -951,8 +1013,12 @@ (local.tee $x (if (result i32) (i32.const -3) - (i32.const -4) - (local.get $x) + (then + (i32.const -4) + ) + (else + (local.get $x) + ) ) ) ) @@ -961,8 +1027,12 @@ (local.set $y (if (result i32) (i32.const -5) - (i32.const -6) - (local.get $y) + (then + (i32.const -6) + ) + (else + (local.get $y) + ) ) ) (drop (i32.eqz (local.get $y))) @@ -970,8 +1040,12 @@ (local.set $z (if (result i32) (i32.const -7) - (i32.const -8) - (local.get $z) + (then + (i32.const -8) + ) + (else + (local.get $z) + ) ) ) (drop @@ -984,19 +1058,25 @@ (block $label$1 (result i32) (if (i32.const 1) - (local.set $4 - (i32.const 2) + (then + (local.set $4 + (i32.const 2) + ) ) ) (if (local.get $4) - (local.set $4 - (i32.const 0) + (then + (local.set $4 + (i32.const 0) + ) ) ) (local.get $4) ) - (unreachable) + (then + (unreachable) + ) ) (i32.const 0) ) @@ -1004,16 +1084,28 @@ (local.set $20 (if (result i32) (i32.const 1) - (if (result i32) - (i32.const 2) + (then (if (result i32) - (i32.const 3) - (i32.const 4) - (local.get $20) + (i32.const 2) + (then + (if (result i32) + (i32.const 3) + (then + (i32.const 4) + ) + (else + (local.get $20) + ) + ) + ) + (else + (local.get $20) + ) ) + ) + (else (local.get $20) ) - (local.get $20) ) ) (local.get $20) @@ -1050,8 +1142,12 @@ (i32.eqz (local.get $0) ) - (f32.const 4623408228068004207103214e13) - (local.get $3) + (then + (f32.const 4623408228068004207103214e13) + ) + (else + (local.get $3) + ) ) ) ) @@ -1063,25 +1159,29 @@ ) (if (result f64) (global.get $global$0) - (block - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (then + (block + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) - ) - (local.set $0 - (i32.const -65) - ) - (global.set $global$0 - (i32.sub - (global.get $global$0) - (i32.const 1) + (local.set $0 + (i32.const -65) + ) + (global.set $global$0 + (i32.sub + (global.get $global$0) + (i32.const 1) + ) ) + (br $label$1) ) - (br $label$1) ) - (f64.const -70) + (else + (f64.const -70) + ) ) ) ) @@ -1199,22 +1299,34 @@ (block $out (if (i32.const 1) - (br $out) - (local.set $x - (i32.const 2) + (then + (br $out) + ) + (else + (local.set $x + (i32.const 2) + ) ) ) (if (i32.const 3) - (local.set $x - (i32.const 4) + (then + (local.set $x + (i32.const 4) + ) + ) + (else + (br $out) ) - (br $out) ) (if (i32.const 5) - (br $out) - (br $out) + (then + (br $out) + ) + (else + (br $out) + ) ) ) ) @@ -1224,63 +1336,75 @@ (block $out (if (i32.const 1) - (block - (local.set $x - (i32.const 2) - ) - (local.set $y - (i32.const 3) + (then + (block + (local.set $x + (i32.const 2) + ) + (local.set $y + (i32.const 3) + ) + (br $out) ) - (br $out) ) - (block - (local.set $x - (i32.const 4) - ) - (local.set $y - (i32.const 5) + (else + (block + (local.set $x + (i32.const 4) + ) + (local.set $y + (i32.const 5) + ) ) ) ) (if (i32.const 6) - (block - (local.set $x - (i32.const 7) - ) - (local.set $y - (i32.const 8) + (then + (block + (local.set $x + (i32.const 7) + ) + (local.set $y + (i32.const 8) + ) ) ) - (block - (local.set $x - (i32.const 9) - ) - (local.set $y - (i32.const 10) + (else + (block + (local.set $x + (i32.const 9) + ) + (local.set $y + (i32.const 10) + ) + (br $out) ) - (br $out) ) ) (if (i32.const 11) - (block - (local.set $x - (i32.const 12) - ) - (local.set $y - (i32.const 13) + (then + (block + (local.set $x + (i32.const 12) + ) + (local.set $y + (i32.const 13) + ) + (br $out) ) - (br $out) ) - (block - (local.set $x - (i32.const 14) - ) - (local.set $y - (i32.const 15) + (else + (block + (local.set $x + (i32.const 14) + ) + (local.set $y + (i32.const 15) + ) + (br $out) ) - (br $out) ) ) ) @@ -1308,11 +1432,15 @@ (local $0 i32) (if (i32.const 0) - (local.set $0 - (i32.const 0) + (then + (local.set $0 + (i32.const 0) + ) ) - (loop $label$4 - (br $label$4) + (else + (loop $label$4 + (br $label$4) + ) ) ) (local.get $0) @@ -1322,11 +1450,13 @@ (block $label$2 (if (i32.const 0) - (block - (local.set $var$0 - (i32.const -1) + (then + (block + (local.set $var$0 + (i32.const -1) + ) + (br $label$2) ) - (br $label$2) ) ) (local.set $var$0 @@ -1341,7 +1471,9 @@ (local $y i32) (local.set $x (local.get $y)) (if (i32.const 1) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) ) (local.set $x (local.get $y)) (local.set $x (local.get $y)) @@ -1351,7 +1483,9 @@ (local $y i32) (local.set $y (local.get $x)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $y (local.get $x)) @@ -1366,11 +1500,15 @@ (local.set $w (local.get $z)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -1378,7 +1516,9 @@ (local.set $z (i32.const 2)) (local.set $x (local.get $z)) (if (i32.const 1) - (local.set $y (i32.const 1)) + (then + (local.set $y (i32.const 1)) + ) ) (local.set $y (local.get $x)) (local.set $z (local.get $y)) @@ -1425,10 +1565,14 @@ (func $if-value-structure-equivalent (param $x i32) (result i32) (local $y i32) (if (i32.const 1) - (local.set $x (i32.const 2)) - (block - (local.set $y (local.get $x)) - (local.set $x (local.get $y)) + (then + (local.set $x (i32.const 2)) + ) + (else + (block + (local.set $y (local.get $x)) + (local.set $x (local.get $y)) + ) ) ) (local.get $x) @@ -1472,14 +1616,18 @@ ) (if (local.get $0) - (local.set $5 - (f32.const -2048) + (then + (local.set $5 + (f32.const -2048) + ) ) - (block - (call $fimport$1 - (i32.const -25732) + (else + (block + (call $fimport$1 + (i32.const -25732) + ) + (br $label$2) ) - (br $label$2) ) ) ) diff --git a/test/passes/souperify.txt b/test/passes/souperify.txt index c98e21b712a..113400e67c6 100644 --- a/test/passes/souperify.txt +++ b/test/passes/souperify.txt @@ -13,11 +13,13 @@ infer %0 (local $0 i32) (if (i32.const 0) - (loop $label$0 - (local.set $0 - (i32.sub - (i32.const 0) - (i32.const 0) + (then + (loop $label$0 + (local.set $0 + (i32.sub + (i32.const 0) + (i32.const 0) + ) ) ) ) diff --git a/test/passes/souperify.wast b/test/passes/souperify.wast index 97227ed5343..a67c7d04f70 100644 --- a/test/passes/souperify.wast +++ b/test/passes/souperify.wast @@ -4,11 +4,13 @@ (func $if-loop-test (local $0 i32) (if (i32.const 0) - (loop $label$0 - (local.set $0 - (i32.sub - (i32.const 0) - (i32.const 0) + (then + (loop $label$0 + (local.set $0 + (i32.sub + (i32.const 0) + (i32.const 0) + ) ) ) ) diff --git a/test/passes/spill-pointers.txt b/test/passes/spill-pointers.txt index ebfb3b9e7c2..c9b9a4a3edb 100644 --- a/test/passes/spill-pointers.txt +++ b/test/passes/spill-pointers.txt @@ -337,7 +337,7 @@ ) (if (i32.const 1) - (block + (then (local.set $2 (i32.const 2) ) @@ -348,7 +348,7 @@ (local.get $2) ) ) - (block + (else (local.set $3 (i32.const 3) ) @@ -985,7 +985,7 @@ ) (if (i32.const 1) - (block + (then (local.set $2 (i32.const 2) ) @@ -996,7 +996,7 @@ (local.get $2) ) ) - (block + (else (local.set $3 (i32.const 3) ) diff --git a/test/passes/spill-pointers.wast b/test/passes/spill-pointers.wast index 4eb05a72116..4a9d71f144f 100644 --- a/test/passes/spill-pointers.wast +++ b/test/passes/spill-pointers.wast @@ -83,8 +83,12 @@ (call $nothing) (drop (local.get $x)) (if (i32.const 1) - (return (i32.const 2)) - (return (i32.const 3)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 3)) + ) ) (i32.const 4) ) @@ -254,8 +258,12 @@ (call $nothing) (drop (local.get $x)) (if (i32.const 1) - (return (i32.const 2)) - (return (i32.const 3)) + (then + (return (i32.const 2)) + ) + (else + (return (i32.const 3)) + ) ) (i32.const 4) ) diff --git a/test/passes/ssa-nomerge_enable-simd.txt b/test/passes/ssa-nomerge_enable-simd.txt index 55105fe91ed..4c7a186ebce 100644 --- a/test/passes/ssa-nomerge_enable-simd.txt +++ b/test/passes/ssa-nomerge_enable-simd.txt @@ -56,14 +56,20 @@ (drop (if (result i32) (i32.const 1) - (i32.const 0) - (i32.const 0) + (then + (i32.const 0) + ) + (else + (i32.const 0) + ) ) ) (if (i32.const 1) - (local.set $x - (i32.const 1) + (then + (local.set $x + (i32.const 1) + ) ) ) (drop @@ -71,8 +77,10 @@ ) (if (i32.const 1) - (local.set $p - (i32.const 1) + (then + (local.set $p + (i32.const 1) + ) ) ) (drop @@ -80,19 +88,27 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 2) + (then + (local.set $x + (i32.const 2) + ) + ) + (else + (nop) ) - (nop) ) (drop (local.get $x) ) (if (i32.const 1) - (nop) - (local.set $x - (i32.const 3) + (then + (nop) + ) + (else + (local.set $x + (i32.const 3) + ) ) ) (drop @@ -100,11 +116,15 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 4) + (then + (local.set $x + (i32.const 4) + ) ) - (local.set $x - (i32.const 5) + (else + (local.set $x + (i32.const 5) + ) ) ) (drop @@ -112,10 +132,12 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 6) + (then + (local.set $x + (i32.const 6) + ) ) - (block + (else (local.set $3 (i32.const 7) ) @@ -131,7 +153,7 @@ (func $if2 (param $x i32) (if (i32.const 1) - (block + (then (local.set $x (i32.const 1) ) @@ -172,8 +194,10 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 4) + (then + (local.set $x + (i32.const 4) + ) ) ) (call $nomerge @@ -189,11 +213,15 @@ ) (if (i32.const 1) - (local.set $x - (i32.const 6) + (then + (local.set $x + (i32.const 6) + ) ) - (local.set $x - (i32.const 7) + (else + (local.set $x + (i32.const 7) + ) ) ) (call $nomerge diff --git a/test/passes/ssa-nomerge_enable-simd.wast b/test/passes/ssa-nomerge_enable-simd.wast index fa1187a7fdf..f99febe3e5d 100644 --- a/test/passes/ssa-nomerge_enable-simd.wast +++ b/test/passes/ssa-nomerge_enable-simd.wast @@ -25,46 +25,70 @@ (drop (if i32 (i32.const 1) - (local.get $x) - (local.get $y) + (then + (local.get $x) + ) + (else + (local.get $y) + ) ) ) (if (i32.const 1) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) ) (drop (local.get $x)) ;; same but with param (if (i32.const 1) - (local.set $p (i32.const 1)) + (then + (local.set $p (i32.const 1)) + ) ) (drop (local.get $p)) ;; if-else (if (i32.const 1) - (local.set $x (i32.const 2)) - (nop) + (then + (local.set $x (i32.const 2)) + ) + (else + (nop) + ) ) (drop (local.get $x)) (if (i32.const 1) - (nop) - (local.set $x (i32.const 3)) + (then + (nop) + ) + (else + (local.set $x (i32.const 3)) + ) ) (drop (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 4)) - (local.set $x (i32.const 5)) + (then + (local.set $x (i32.const 4)) + ) + (else + (local.set $x (i32.const 5)) + ) ) (drop (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 6)) - (block - (local.set $x (i32.const 7)) - (local.set $x (i32.const 8)) + (then + (local.set $x (i32.const 6)) + ) + (else + (block + (local.set $x (i32.const 7)) + (local.set $x (i32.const 8)) + ) ) ) (drop (local.get $x)) @@ -72,9 +96,11 @@ (func $if2 (param $x i32) (if (i32.const 1) - (block - (local.set $x (i32.const 1)) - (drop (local.get $x)) ;; use between phi set and use + (then + (block + (local.set $x (i32.const 1)) + (drop (local.get $x)) ;; use between phi set and use + ) ) ) (drop (local.get $x)) @@ -88,14 +114,20 @@ (local.set $x (i32.const 3)) ;; but this reaches a merge later (call $nomerge (local.get $x) (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 4)) + (then + (local.set $x (i32.const 4)) + ) ) (call $nomerge (local.get $x) (local.get $x)) (local.set $x (i32.const 5)) ;; this is good again (call $nomerge (local.get $x) (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 6)) ;; these merge, - (local.set $x (i32.const 7)) ;; so no + (then + (local.set $x (i32.const 6)) ;; these merge, + ) + (else + (local.set $x (i32.const 7)) ;; so no + ) ) (call $nomerge (local.get $x) (local.get $x)) ) diff --git a/test/passes/ssa_enable-threads.txt b/test/passes/ssa_enable-threads.txt index d159e0e4158..e2ea811fe61 100644 --- a/test/passes/ssa_enable-threads.txt +++ b/test/passes/ssa_enable-threads.txt @@ -73,17 +73,23 @@ (drop (if (result i32) (i32.const 1) - (i32.const 0) - (i32.const 0) + (then + (i32.const 0) + ) + (else + (i32.const 0) + ) ) ) (if (i32.const 1) - (local.set $3 - (local.tee $15 - (local.tee $14 - (local.tee $12 - (i32.const 1) + (then + (local.set $3 + (local.tee $15 + (local.tee $14 + (local.tee $12 + (i32.const 1) + ) ) ) ) @@ -94,9 +100,11 @@ ) (if (i32.const 1) - (local.set $4 - (local.tee $13 - (i32.const 1) + (then + (local.set $4 + (local.tee $13 + (i32.const 1) + ) ) ) ) @@ -105,24 +113,32 @@ ) (if (i32.const 1) - (local.set $5 - (local.tee $15 - (local.tee $14 - (i32.const 2) + (then + (local.set $5 + (local.tee $15 + (local.tee $14 + (i32.const 2) + ) ) ) ) - (nop) + (else + (nop) + ) ) (drop (local.get $14) ) (if (i32.const 1) - (nop) - (local.set $6 - (local.tee $15 - (i32.const 3) + (then + (nop) + ) + (else + (local.set $6 + (local.tee $15 + (i32.const 3) + ) ) ) ) @@ -131,14 +147,18 @@ ) (if (i32.const 1) - (local.set $7 - (local.tee $16 - (i32.const 4) + (then + (local.set $7 + (local.tee $16 + (i32.const 4) + ) ) ) - (local.set $8 - (local.tee $16 - (i32.const 5) + (else + (local.set $8 + (local.tee $16 + (i32.const 5) + ) ) ) ) @@ -147,12 +167,14 @@ ) (if (i32.const 1) - (local.set $9 - (local.tee $17 - (i32.const 6) + (then + (local.set $9 + (local.tee $17 + (i32.const 6) + ) ) ) - (block + (else (local.set $10 (i32.const 7) ) @@ -177,7 +199,7 @@ (block (if (i32.const 1) - (block + (then (local.set $1 (local.tee $2 (i32.const 1) @@ -239,7 +261,7 @@ ) (if (i32.const 3) - (block + (then (local.set $2 (local.tee $6 (i32.const 1) @@ -264,19 +286,27 @@ ) (if (i32.const 5) - (br $out) + (then + (br $out) + ) ) (drop (local.get $3) ) (if (i32.const 6) - (nop) + (then + (nop) + ) ) (if (i32.const 7) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) (block $in (local.set $4 @@ -453,7 +483,9 @@ (block $stop (if (i32.const 1) - (br $stop) + (then + (br $stop) + ) ) (local.set $inc (i32.add @@ -493,7 +525,9 @@ (loop $more (if (i32.const 1) - (br $stop) + (then + (br $stop) + ) ) (local.set $inc (i32.add @@ -531,7 +565,9 @@ (block $out1 (if (local.get $3) - (br $out1) + (then + (br $out1) + ) ) (local.set $1 (local.tee $4 @@ -547,7 +583,9 @@ (block $out2 (if (local.get $4) - (br $out2) + (then + (br $out2) + ) ) (local.set $2 (local.tee $4 @@ -572,7 +610,9 @@ ) (if (local.get $1) - (br $out1) + (then + (br $out1) + ) ) (br $loop1) ) @@ -581,7 +621,9 @@ (block $out2 (if (local.get $3) - (br $out2) + (then + (br $out2) + ) ) (local.set $2 (local.tee $3 @@ -612,12 +654,16 @@ (loop $loop1 (if (local.get $3) - (br $out) + (then + (br $out) + ) ) (loop $loop2 (if (local.get $4) - (br $out) + (then + (br $out) + ) ) (local.set $1 (local.tee $5 @@ -665,12 +711,16 @@ (loop $loop1 (if (local.get $3) - (br $out) + (then + (br $out) + ) ) (loop $loop2 (if (local.get $4) - (br $out) + (then + (br $out) + ) ) (local.set $1 (local.tee $5 @@ -711,8 +761,10 @@ (i32.eqz (global.get $global$0) ) - (return - (local.get $4) + (then + (return + (local.get $4) + ) ) ) (global.set $global$0 @@ -758,8 +810,10 @@ (i32.eqz (global.get $global$0) ) - (return - (i32.const 12345) + (then + (return + (i32.const 12345) + ) ) ) (global.set $global$0 @@ -769,11 +823,13 @@ (i32.eqz (local.get $7) ) - (br_if $label$1 - (i32.eqz - (local.tee $4 - (local.tee $7 - (i32.const 1) + (then + (br_if $label$1 + (i32.eqz + (local.tee $4 + (local.tee $7 + (i32.const 1) + ) ) ) ) diff --git a/test/passes/ssa_enable-threads.wast b/test/passes/ssa_enable-threads.wast index bbfad89bf99..a368f3c348f 100644 --- a/test/passes/ssa_enable-threads.wast +++ b/test/passes/ssa_enable-threads.wast @@ -24,46 +24,70 @@ (drop (if i32 (i32.const 1) - (local.get $x) - (local.get $y) + (then + (local.get $x) + ) + (else + (local.get $y) + ) ) ) (if (i32.const 1) - (local.set $x (i32.const 1)) + (then + (local.set $x (i32.const 1)) + ) ) (drop (local.get $x)) ;; same but with param (if (i32.const 1) - (local.set $p (i32.const 1)) + (then + (local.set $p (i32.const 1)) + ) ) (drop (local.get $p)) ;; if-else (if (i32.const 1) - (local.set $x (i32.const 2)) - (nop) + (then + (local.set $x (i32.const 2)) + ) + (else + (nop) + ) ) (drop (local.get $x)) (if (i32.const 1) - (nop) - (local.set $x (i32.const 3)) + (then + (nop) + ) + (else + (local.set $x (i32.const 3)) + ) ) (drop (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 4)) - (local.set $x (i32.const 5)) + (then + (local.set $x (i32.const 4)) + ) + (else + (local.set $x (i32.const 5)) + ) ) (drop (local.get $x)) (if (i32.const 1) - (local.set $x (i32.const 6)) - (block - (local.set $x (i32.const 7)) - (local.set $x (i32.const 8)) + (then + (local.set $x (i32.const 6)) + ) + (else + (block + (local.set $x (i32.const 7)) + (local.set $x (i32.const 8)) + ) ) ) (drop (local.get $x)) @@ -71,9 +95,11 @@ (func $if2 (param $x i32) (if (i32.const 1) - (block - (local.set $x (i32.const 1)) - (drop (local.get $x)) ;; use between phi set and use + (then + (block + (local.set $x (i32.const 1)) + (drop (local.get $x)) ;; use between phi set and use + ) ) ) (drop (local.get $x)) @@ -92,25 +118,35 @@ (br_if $out (i32.const 2)) (drop (local.get $x)) (if (i32.const 3) - (block - (local.set $x (i32.const 1)) - (drop (local.get $x)) - (br $out) + (then + (block + (local.set $x (i32.const 1)) + (drop (local.get $x)) + (br $out) + ) ) ) (drop (local.get $x)) (local.set $x (i32.const 4)) (drop (local.get $x)) (if (i32.const 5) - (br $out) + (then + (br $out) + ) ) (drop (local.get $x)) (if (i32.const 6) - (nop) + (then + (nop) + ) ) (if (i32.const 7) - (nop) - (nop) + (then + (nop) + ) + (else + (nop) + ) ) ;; finally, switching (block $in @@ -179,7 +215,9 @@ (block $stop (if (i32.const 1) - (br $stop) + (then + (br $stop) + ) ) (local.set $inc (i32.add @@ -206,7 +244,9 @@ (loop $more (if (i32.const 1) - (br $stop) + (then + (br $stop) + ) ) (local.set $inc (i32.add @@ -228,7 +268,9 @@ (block $out1 (if (local.get $param) - (br $out1) + (then + (br $out1) + ) ) (local.set $param (i32.const 1)) (br $loop1) @@ -238,7 +280,9 @@ (block $out2 (if (local.get $param) - (br $out2) + (then + (br $out2) + ) ) (local.set $param (i32.const 2)) (br $loop2) @@ -252,7 +296,9 @@ (local.set $param (i32.const 1)) (if (local.get $param) - (br $out1) + (then + (br $out1) + ) ) (br $loop1) ) @@ -261,7 +307,9 @@ (block $out2 (if (local.get $param) - (br $out2) + (then + (br $out2) + ) ) (local.set $param (i32.const 2)) (br $loop2) @@ -274,12 +322,16 @@ (loop $loop1 (if (local.get $x) - (br $out) + (then + (br $out) + ) ) (loop $loop2 (if (local.get $x) - (br $out) + (then + (br $out) + ) ) (local.set $x (i32.const 1)) (br $loop2) @@ -296,12 +348,16 @@ (loop $loop1 (if (local.get $x) - (br $out) + (then + (br $out) + ) ) (loop $loop2 (if (local.get $x) - (br $out) + (then + (br $out) + ) ) (local.set $x (i32.const 1)) (br_if $loop2 (i32.const 3)) ;; add fallthrough @@ -320,8 +376,10 @@ (i32.eqz (global.get $global$0) ) - (return - (local.get $result) ;; we eventually reach here + (then + (return + (local.get $result) ;; we eventually reach here + ) ) ) (global.set $global$0 @@ -352,8 +410,10 @@ (i32.eqz (global.get $global$0) ) - (return - (i32.const 12345) + (then + (return + (i32.const 12345) + ) ) ) (global.set $global$0 @@ -363,10 +423,12 @@ (i32.eqz (local.get $var$0) ;; check $0 here. this will get a phi var ) - (br_if $label$1 - (i32.eqz - (local.tee $var$0 ;; set $0 to 1. here the two diverge. for the phi, we'll get a set here and above - (i32.const 1) + (then + (br_if $label$1 + (i32.eqz + (local.tee $var$0 ;; set $0 to 1. here the two diverge. for the phi, we'll get a set here and above + (i32.const 1) + ) ) ) ) diff --git a/test/passes/ssa_fuzz-exec_enable-threads.txt b/test/passes/ssa_fuzz-exec_enable-threads.txt index f9d49d5bbaa..04d6ef59a6e 100644 --- a/test/passes/ssa_fuzz-exec_enable-threads.txt +++ b/test/passes/ssa_fuzz-exec_enable-threads.txt @@ -21,102 +21,120 @@ (block $label$1 (result i32) (if (result i32) (i32.const 0) - (unreachable) - (block $label$4 (result i32) - (loop $label$5 - (block $label$6 - (block $label$7 - (local.set $8 - (if (result i32) - (local.get $10) - (select - (loop $label$9 (result i32) - (if (result i32) - (local.tee $4 - (i32.const 16384) + (then + (unreachable) + ) + (else + (block $label$4 (result i32) + (loop $label$5 + (block $label$6 + (block $label$7 + (local.set $8 + (if (result i32) + (local.get $10) + (then + (select + (loop $label$9 (result i32) + (if (result i32) + (local.tee $4 + (i32.const 16384) + ) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) + ) ) - (i32.const 1) - (i32.const 0) - ) - ) - (br_if $label$4 - (i32.const 0) - (local.tee $var$1 - (local.tee $5 - (block $label$12 (result i32) - (br_if $label$5 - (br $label$6) + (br_if $label$4 + (i32.const 0) + (local.tee $var$1 + (local.tee $5 + (block $label$12 (result i32) + (br_if $label$5 + (br $label$6) + ) + (unreachable) + ) ) - (unreachable) ) ) + (i32.const 1) ) ) - (i32.const 1) - ) - (block (result i32) - (loop $label$15 - (if - (i32.const 0) - (return - (local.get $11) + (else + (loop $label$15 + (if + (i32.const 0) + (then + (return + (local.get $11) + ) + ) ) - ) - (if - (local.tee $var$1 - (local.tee $6 - (local.tee $11 + (if + (local.tee $var$1 + (local.tee $6 + (local.tee $11 + (i32.const 0) + ) + ) + ) + (then + (br_if $label$15 (i32.const 0) ) ) ) (br_if $label$15 - (i32.const 0) - ) - ) - (br_if $label$15 - (i32.eqz - (local.tee $7 - (local.tee $11 - (local.tee $10 - (i32.const 129) + (i32.eqz + (local.tee $7 + (local.tee $11 + (local.tee $10 + (i32.const 129) + ) ) ) ) ) ) + (i32.const -5742806) ) - (i32.const -5742806) ) ) ) - ) - (br_if $label$6 - (if (result i32) - (local.get $var$1) - (unreachable) - (block $label$25 (result i32) - (local.set $9 - (block $label$26 (result f64) - (drop - (br_if $label$4 - (br_if $label$25 - (br $label$5) - (i32.const 0) + (br_if $label$6 + (if (result i32) + (local.get $var$1) + (then + (unreachable) + ) + (else + (block $label$25 (result i32) + (local.set $9 + (block $label$26 (result f64) + (drop + (br_if $label$4 + (br_if $label$25 + (br $label$5) + (i32.const 0) + ) + (i32.const 0) + ) ) - (i32.const 0) + (f64.const 1) ) ) - (f64.const 1) + (i32.const 0) ) ) - (i32.const 0) ) ) ) ) + (local.get $4) ) - (local.get $4) ) ) ) diff --git a/test/passes/ssa_fuzz-exec_enable-threads.wast b/test/passes/ssa_fuzz-exec_enable-threads.wast index 5917a3eb360..7dd2fcc7374 100644 --- a/test/passes/ssa_fuzz-exec_enable-threads.wast +++ b/test/passes/ssa_fuzz-exec_enable-threads.wast @@ -12,98 +12,118 @@ (block $label$1 (result i32) (if (result i32) (i32.const 0) - (unreachable) - (block $label$4 (result i32) - (loop $label$5 - (block $label$6 - (block $label$7 - (local.set $var$0 - (if (result i32) - (local.get $var$2) - (select - (loop $label$9 (result i32) - (if (result i32) - (local.tee $var$2 - (i32.const 16384) + (then + (unreachable) + ) + (else + (block $label$4 (result i32) + (loop $label$5 + (block $label$6 + (block $label$7 + (local.set $var$0 + (if (result i32) + (local.get $var$2) + (then + (select + (loop $label$9 (result i32) + (if (result i32) + (local.tee $var$2 + (i32.const 16384) + ) + (then + (i32.const 1) + ) + (else + (i32.const 0) + ) + ) ) - (i32.const 1) - (i32.const 0) - ) - ) - (br_if $label$4 - (i32.const 0) - (local.tee $var$1 - (local.tee $var$2 - (block $label$12 (result i32) - (br_if $label$5 - (br $label$6) + (br_if $label$4 + (i32.const 0) + (local.tee $var$1 + (local.tee $var$2 + (block $label$12 (result i32) + (br_if $label$5 + (br $label$6) + ) + (unreachable) + ) ) - (unreachable) ) ) + (i32.const 1) ) ) - (i32.const 1) - ) - (block (result i32) - (loop $label$15 - (if - (i32.const 0) - (return - (local.get $var$2) - ) - ) - (if - (local.tee $var$1 - (local.tee $var$2 + (else + (block (result i32) + (loop $label$15 + (if (i32.const 0) + (then + (return + (local.get $var$2) + ) + ) ) - ) - (block - (br_if $label$15 - (i32.const 0) + (if + (local.tee $var$1 + (local.tee $var$2 + (i32.const 0) + ) + ) + (then + (block + (br_if $label$15 + (i32.const 0) + ) + ) + ) ) - ) - ) - (br_if $label$15 - (i32.eqz - (local.tee $var$2 - (i32.const 129) + (br_if $label$15 + (i32.eqz + (local.tee $var$2 + (i32.const 129) + ) + ) ) ) + (i32.const -5742806) ) ) - (i32.const -5742806) ) ) ) - ) - (br_if $label$6 - (if (result i32) - (local.get $var$1) - (unreachable) - (block $label$25 (result i32) - (local.set $var$3 - (block $label$26 (result f64) - (drop - (br_if $label$4 - (br_if $label$25 - (br $label$5) - (i32.const 0) + (br_if $label$6 + (if (result i32) + (local.get $var$1) + (then + (unreachable) + ) + (else + (block $label$25 (result i32) + (local.set $var$3 + (block $label$26 (result f64) + (drop + (br_if $label$4 + (br_if $label$25 + (br $label$5) + (i32.const 0) + ) + (i32.const 0) + ) ) - (i32.const 0) + (f64.const 1) ) ) - (f64.const 1) + (i32.const 0) ) ) - (i32.const 0) ) ) ) ) + (local.get $var$2) ) - (local.get $var$2) ) ) ) diff --git a/test/passes/stack-check_enable-mutable-globals.txt b/test/passes/stack-check_enable-mutable-globals.txt index a2d7f374de9..43e352bdbad 100644 --- a/test/passes/stack-check_enable-mutable-globals.txt +++ b/test/passes/stack-check_enable-mutable-globals.txt @@ -22,7 +22,9 @@ (global.get $__stack_limit) ) ) - (unreachable) + (then + (unreachable) + ) ) (global.set $sp (local.get $0) diff --git a/test/passes/trap-mode-clamp.txt b/test/passes/trap-mode-clamp.txt index e41b4e0e30b..27512712e2a 100644 --- a/test/passes/trap-mode-clamp.txt +++ b/test/passes/trap-mode-clamp.txt @@ -110,21 +110,33 @@ (local.get $0) (local.get $0) ) - (i32.const -2147483648) - (if (result i32) - (f32.ge - (local.get $0) - (f32.const 2147483648) - ) + (then (i32.const -2147483648) + ) + (else (if (result i32) - (f32.le + (f32.ge (local.get $0) - (f32.const -2147483648) + (f32.const 2147483648) ) - (i32.const -2147483648) - (i32.trunc_f32_s - (local.get $0) + (then + (i32.const -2147483648) + ) + (else + (if (result i32) + (f32.le + (local.get $0) + (f32.const -2147483648) + ) + (then + (i32.const -2147483648) + ) + (else + (i32.trunc_f32_s + (local.get $0) + ) + ) + ) ) ) ) @@ -136,21 +148,33 @@ (local.get $0) (local.get $0) ) - (i64.const -9223372036854775808) - (if (result i64) - (f32.ge - (local.get $0) - (f32.const 9223372036854775808) - ) + (then (i64.const -9223372036854775808) + ) + (else (if (result i64) - (f32.le + (f32.ge (local.get $0) - (f32.const -9223372036854775808) + (f32.const 9223372036854775808) ) - (i64.const -9223372036854775808) - (i64.trunc_f32_s - (local.get $0) + (then + (i64.const -9223372036854775808) + ) + (else + (if (result i64) + (f32.le + (local.get $0) + (f32.const -9223372036854775808) + ) + (then + (i64.const -9223372036854775808) + ) + (else + (i64.trunc_f32_s + (local.get $0) + ) + ) + ) ) ) ) @@ -162,21 +186,33 @@ (local.get $0) (local.get $0) ) - (i32.const 0) - (if (result i32) - (f32.ge - (local.get $0) - (f32.const 4294967296) - ) + (then (i32.const 0) + ) + (else (if (result i32) - (f32.le + (f32.ge (local.get $0) - (f32.const -1) + (f32.const 4294967296) ) - (i32.const 0) - (i32.trunc_f32_u - (local.get $0) + (then + (i32.const 0) + ) + (else + (if (result i32) + (f32.le + (local.get $0) + (f32.const -1) + ) + (then + (i32.const 0) + ) + (else + (i32.trunc_f32_u + (local.get $0) + ) + ) + ) ) ) ) @@ -188,21 +224,33 @@ (local.get $0) (local.get $0) ) - (i64.const 0) - (if (result i64) - (f32.ge - (local.get $0) - (f32.const 18446744073709551615) - ) + (then (i64.const 0) + ) + (else (if (result i64) - (f32.le + (f32.ge (local.get $0) - (f32.const -1) + (f32.const 18446744073709551615) ) - (i64.const 0) - (i64.trunc_f32_u - (local.get $0) + (then + (i64.const 0) + ) + (else + (if (result i64) + (f32.le + (local.get $0) + (f32.const -1) + ) + (then + (i64.const 0) + ) + (else + (i64.trunc_f32_u + (local.get $0) + ) + ) + ) ) ) ) @@ -214,21 +262,33 @@ (local.get $0) (local.get $0) ) - (i32.const -2147483648) - (if (result i32) - (f64.ge - (local.get $0) - (f64.const 2147483648) - ) + (then (i32.const -2147483648) + ) + (else (if (result i32) - (f64.le + (f64.ge (local.get $0) - (f64.const -2147483649) + (f64.const 2147483648) ) - (i32.const -2147483648) - (i32.trunc_f64_s - (local.get $0) + (then + (i32.const -2147483648) + ) + (else + (if (result i32) + (f64.le + (local.get $0) + (f64.const -2147483649) + ) + (then + (i32.const -2147483648) + ) + (else + (i32.trunc_f64_s + (local.get $0) + ) + ) + ) ) ) ) @@ -240,21 +300,33 @@ (local.get $0) (local.get $0) ) - (i64.const -9223372036854775808) - (if (result i64) - (f64.ge - (local.get $0) - (f64.const 9223372036854775808) - ) + (then (i64.const -9223372036854775808) + ) + (else (if (result i64) - (f64.le + (f64.ge (local.get $0) - (f64.const -9223372036854775808) + (f64.const 9223372036854775808) ) - (i64.const -9223372036854775808) - (i64.trunc_f64_s - (local.get $0) + (then + (i64.const -9223372036854775808) + ) + (else + (if (result i64) + (f64.le + (local.get $0) + (f64.const -9223372036854775808) + ) + (then + (i64.const -9223372036854775808) + ) + (else + (i64.trunc_f64_s + (local.get $0) + ) + ) + ) ) ) ) @@ -266,21 +338,33 @@ (local.get $0) (local.get $0) ) - (i32.const 0) - (if (result i32) - (f64.ge - (local.get $0) - (f64.const 4294967296) - ) + (then (i32.const 0) + ) + (else (if (result i32) - (f64.le + (f64.ge (local.get $0) - (f64.const -1) + (f64.const 4294967296) ) - (i32.const 0) - (i32.trunc_f64_u - (local.get $0) + (then + (i32.const 0) + ) + (else + (if (result i32) + (f64.le + (local.get $0) + (f64.const -1) + ) + (then + (i32.const 0) + ) + (else + (i32.trunc_f64_u + (local.get $0) + ) + ) + ) ) ) ) @@ -292,21 +376,33 @@ (local.get $0) (local.get $0) ) - (i64.const 0) - (if (result i64) - (f64.ge - (local.get $0) - (f64.const 18446744073709551615) - ) + (then (i64.const 0) + ) + (else (if (result i64) - (f64.le + (f64.ge (local.get $0) - (f64.const -1) + (f64.const 18446744073709551615) ) - (i64.const 0) - (i64.trunc_f64_u - (local.get $0) + (then + (i64.const 0) + ) + (else + (if (result i64) + (f64.le + (local.get $0) + (f64.const -1) + ) + (then + (i64.const 0) + ) + (else + (i64.trunc_f64_u + (local.get $0) + ) + ) + ) ) ) ) @@ -317,22 +413,30 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (if (result i32) - (i32.and - (i32.eq - (local.get $0) - (i32.const -2147483648) + (then + (i32.const 0) + ) + (else + (if (result i32) + (i32.and + (i32.eq + (local.get $0) + (i32.const -2147483648) + ) + (i32.eq + (local.get $1) + (i32.const -1) + ) ) - (i32.eq - (local.get $1) - (i32.const -1) + (then + (i32.const 0) + ) + (else + (i32.div_s + (local.get $0) + (local.get $1) + ) ) - ) - (i32.const 0) - (i32.div_s - (local.get $0) - (local.get $1) ) ) ) @@ -342,10 +446,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.rem_s - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.rem_s + (local.get $0) + (local.get $1) + ) ) ) ) @@ -354,10 +462,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.div_u - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.div_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -366,10 +478,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.rem_u - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.rem_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -378,22 +494,30 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (if (result i64) - (i32.and - (i64.eq - (local.get $0) - (i64.const -9223372036854775808) + (then + (i64.const 0) + ) + (else + (if (result i64) + (i32.and + (i64.eq + (local.get $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (local.get $1) + (i64.const -1) + ) ) - (i64.eq - (local.get $1) - (i64.const -1) + (then + (i64.const 0) + ) + (else + (i64.div_s + (local.get $0) + (local.get $1) + ) ) - ) - (i64.const 0) - (i64.div_s - (local.get $0) - (local.get $1) ) ) ) @@ -403,10 +527,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.rem_s - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.rem_s + (local.get $0) + (local.get $1) + ) ) ) ) @@ -415,10 +543,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.div_u - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.div_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -427,10 +559,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.rem_u - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.rem_u + (local.get $0) + (local.get $1) + ) ) ) ) diff --git a/test/passes/trap-mode-js.txt b/test/passes/trap-mode-js.txt index 39cb28de6d4..b43d7e9503c 100644 --- a/test/passes/trap-mode-js.txt +++ b/test/passes/trap-mode-js.txt @@ -114,21 +114,33 @@ (local.get $0) (local.get $0) ) - (i64.const -9223372036854775808) - (if (result i64) - (f32.ge - (local.get $0) - (f32.const 9223372036854775808) - ) + (then (i64.const -9223372036854775808) + ) + (else (if (result i64) - (f32.le + (f32.ge (local.get $0) - (f32.const -9223372036854775808) + (f32.const 9223372036854775808) ) - (i64.const -9223372036854775808) - (i64.trunc_f32_s - (local.get $0) + (then + (i64.const -9223372036854775808) + ) + (else + (if (result i64) + (f32.le + (local.get $0) + (f32.const -9223372036854775808) + ) + (then + (i64.const -9223372036854775808) + ) + (else + (i64.trunc_f32_s + (local.get $0) + ) + ) + ) ) ) ) @@ -140,21 +152,33 @@ (local.get $0) (local.get $0) ) - (i64.const 0) - (if (result i64) - (f32.ge - (local.get $0) - (f32.const 18446744073709551615) - ) + (then (i64.const 0) + ) + (else (if (result i64) - (f32.le + (f32.ge (local.get $0) - (f32.const -1) + (f32.const 18446744073709551615) ) - (i64.const 0) - (i64.trunc_f32_u - (local.get $0) + (then + (i64.const 0) + ) + (else + (if (result i64) + (f32.le + (local.get $0) + (f32.const -1) + ) + (then + (i64.const 0) + ) + (else + (i64.trunc_f32_u + (local.get $0) + ) + ) + ) ) ) ) @@ -166,21 +190,33 @@ (local.get $0) (local.get $0) ) - (i64.const -9223372036854775808) - (if (result i64) - (f64.ge - (local.get $0) - (f64.const 9223372036854775808) - ) + (then (i64.const -9223372036854775808) + ) + (else (if (result i64) - (f64.le + (f64.ge (local.get $0) - (f64.const -9223372036854775808) + (f64.const 9223372036854775808) ) - (i64.const -9223372036854775808) - (i64.trunc_f64_s - (local.get $0) + (then + (i64.const -9223372036854775808) + ) + (else + (if (result i64) + (f64.le + (local.get $0) + (f64.const -9223372036854775808) + ) + (then + (i64.const -9223372036854775808) + ) + (else + (i64.trunc_f64_s + (local.get $0) + ) + ) + ) ) ) ) @@ -192,21 +228,33 @@ (local.get $0) (local.get $0) ) - (i64.const 0) - (if (result i64) - (f64.ge - (local.get $0) - (f64.const 18446744073709551615) - ) + (then (i64.const 0) + ) + (else (if (result i64) - (f64.le + (f64.ge (local.get $0) - (f64.const -1) + (f64.const 18446744073709551615) ) - (i64.const 0) - (i64.trunc_f64_u - (local.get $0) + (then + (i64.const 0) + ) + (else + (if (result i64) + (f64.le + (local.get $0) + (f64.const -1) + ) + (then + (i64.const 0) + ) + (else + (i64.trunc_f64_u + (local.get $0) + ) + ) + ) ) ) ) @@ -217,22 +265,30 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (if (result i32) - (i32.and - (i32.eq - (local.get $0) - (i32.const -2147483648) + (then + (i32.const 0) + ) + (else + (if (result i32) + (i32.and + (i32.eq + (local.get $0) + (i32.const -2147483648) + ) + (i32.eq + (local.get $1) + (i32.const -1) + ) ) - (i32.eq - (local.get $1) - (i32.const -1) + (then + (i32.const 0) + ) + (else + (i32.div_s + (local.get $0) + (local.get $1) + ) ) - ) - (i32.const 0) - (i32.div_s - (local.get $0) - (local.get $1) ) ) ) @@ -242,10 +298,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.rem_s - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.rem_s + (local.get $0) + (local.get $1) + ) ) ) ) @@ -254,10 +314,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.div_u - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.div_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -266,10 +330,14 @@ (i32.eqz (local.get $1) ) - (i32.const 0) - (i32.rem_u - (local.get $0) - (local.get $1) + (then + (i32.const 0) + ) + (else + (i32.rem_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -278,22 +346,30 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (if (result i64) - (i32.and - (i64.eq - (local.get $0) - (i64.const -9223372036854775808) + (then + (i64.const 0) + ) + (else + (if (result i64) + (i32.and + (i64.eq + (local.get $0) + (i64.const -9223372036854775808) + ) + (i64.eq + (local.get $1) + (i64.const -1) + ) ) - (i64.eq - (local.get $1) - (i64.const -1) + (then + (i64.const 0) + ) + (else + (i64.div_s + (local.get $0) + (local.get $1) + ) ) - ) - (i64.const 0) - (i64.div_s - (local.get $0) - (local.get $1) ) ) ) @@ -303,10 +379,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.rem_s - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.rem_s + (local.get $0) + (local.get $1) + ) ) ) ) @@ -315,10 +395,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.div_u - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.div_u + (local.get $0) + (local.get $1) + ) ) ) ) @@ -327,10 +411,14 @@ (i64.eqz (local.get $1) ) - (i64.const 0) - (i64.rem_u - (local.get $0) - (local.get $1) + (then + (i64.const 0) + ) + (else + (i64.rem_u + (local.get $0) + (local.get $1) + ) ) ) ) diff --git a/test/reduce/destructive.wast b/test/reduce/destructive.wast index 2670fccf94b..743141de68c 100644 --- a/test/reduce/destructive.wast +++ b/test/reduce/destructive.wast @@ -2,7 +2,9 @@ (export "x" (func $x)) (func $x (param $x i32) (result i32) (if (i32.eq (local.get $x) (i32.const 98658746)) - (unreachable) ;; this can be removed destructively, since we do not sent this param + (then + (unreachable) ;; this can be removed destructively, since we do not sent this param + ) ) (i32.const 100) ) diff --git a/test/spec/exception-handling-old.wast b/test/spec/exception-handling-old.wast index 48fbe838991..75bfe70e8aa 100644 --- a/test/spec/exception-handling-old.wast +++ b/test/spec/exception-handling-old.wast @@ -605,8 +605,12 @@ (throw $e-i32 (if (result i32) (i32.const 0) - (pop i32) ;; pop is within an if true body - (i32.const 3) + (then + (pop i32) ;; pop is within an if true body + ) + (else + (i32.const 3) + ) ) ) ) diff --git a/test/spec/old_br_if.wast b/test/spec/old_br_if.wast index 44aeffbe7a9..9ed24f15349 100644 --- a/test/spec/old_br_if.wast +++ b/test/spec/old_br_if.wast @@ -37,10 +37,10 @@ ) (func (export "as-if-then") (param i32 i32) - (block (if (local.get 0) (br_if 1 (local.get 1)) (call $dummy))) + (block (if (local.get 0) (then (br_if 1 (local.get 1)) )(else (call $dummy)))) ) (func (export "as-if-else") (param i32 i32) - (block (if (local.get 0) (call $dummy) (br_if 1 (local.get 1)))) + (block (if (local.get 0) (then (call $dummy) )(else (br_if 1 (local.get 1))))) ) (func (export "nested-block-value") (param i32) (result i32) diff --git a/test/spec/old_call.wast b/test/spec/old_call.wast index 00bd97397bf..ed2cd286bb3 100644 --- a/test/spec/old_call.wast +++ b/test/spec/old_call.wast @@ -46,41 +46,61 @@ (func $fac (export "fac") (param i64) (result i64) (if i64 (i64.eqz (local.get 0)) - (i64.const 1) - (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1)))) + (then + (i64.const 1) + ) + (else + (i64.mul (local.get 0) (call $fac (i64.sub (local.get 0) (i64.const 1)))) + ) ) ) (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) (if i64 (i64.eqz (local.get 0)) - (local.get 1) - (call $fac-acc - (i64.sub (local.get 0) (i64.const 1)) - (i64.mul (local.get 0) (local.get 1)) + (then + (local.get 1) + ) + (else + (call $fac-acc + (i64.sub (local.get 0) (i64.const 1)) + (i64.mul (local.get 0) (local.get 1)) + ) ) ) ) (func $fib (export "fib") (param i64) (result i64) (if i64 (i64.le_u (local.get 0) (i64.const 1)) - (i64.const 1) - (i64.add - (call $fib (i64.sub (local.get 0) (i64.const 2))) - (call $fib (i64.sub (local.get 0) (i64.const 1))) + (then + (i64.const 1) + ) + (else + (i64.add + (call $fib (i64.sub (local.get 0) (i64.const 2))) + (call $fib (i64.sub (local.get 0) (i64.const 1))) + ) ) ) ) (func $even (export "even") (param i64) (result i32) (if i32 (i64.eqz (local.get 0)) - (i32.const 44) - (call $odd (i64.sub (local.get 0) (i64.const 1))) + (then + (i32.const 44) + ) + (else + (call $odd (i64.sub (local.get 0) (i64.const 1))) + ) ) ) (func $odd (export "odd") (param i64) (result i32) (if i32 (i64.eqz (local.get 0)) - (i32.const 99) - (call $even (i64.sub (local.get 0) (i64.const 1))) + (then + (i32.const 99) + ) + (else + (call $even (i64.sub (local.get 0) (i64.const 1))) + ) ) ) diff --git a/test/spec/old_call_indirect.wast b/test/spec/old_call_indirect.wast index 41f4316f658..00ecd08633c 100644 --- a/test/spec/old_call_indirect.wast +++ b/test/spec/old_call_indirect.wast @@ -103,12 +103,16 @@ (func $fac (export "fac") (type $over-i64) (if i64 (i64.eqz (local.get 0)) - (i64.const 1) - (i64.mul - (local.get 0) - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 1)) - (i32.const 12) + (then + (i64.const 1) + ) + (else + (i64.mul + (local.get 0) + (call_indirect (type $over-i64) + (i64.sub (local.get 0) (i64.const 1)) + (i32.const 12) + ) ) ) ) @@ -116,15 +120,19 @@ (func $fib (export "fib") (type $over-i64) (if i64 (i64.le_u (local.get 0) (i64.const 1)) - (i64.const 1) - (i64.add - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 2)) - (i32.const 13) - ) - (call_indirect (type $over-i64) - (i64.sub (local.get 0) (i64.const 1)) - (i32.const 13) + (then + (i64.const 1) + ) + (else + (i64.add + (call_indirect (type $over-i64) + (i64.sub (local.get 0) (i64.const 2)) + (i32.const 13) + ) + (call_indirect (type $over-i64) + (i64.sub (local.get 0) (i64.const 1)) + (i32.const 13) + ) ) ) ) @@ -132,19 +140,27 @@ (func $even (export "even") (param i32) (result i32) (if i32 (i32.eqz (local.get 0)) - (i32.const 44) - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 15) + (then + (i32.const 44) + ) + (else + (call_indirect (type $over-i32) + (i32.sub (local.get 0) (i32.const 1)) + (i32.const 15) + ) ) ) ) (func $odd (export "odd") (param i32) (result i32) (if i32 (i32.eqz (local.get 0)) - (i32.const 99) - (call_indirect (type $over-i32) - (i32.sub (local.get 0) (i32.const 1)) - (i32.const 14) + (then + (i32.const 99) + ) + (else + (call_indirect (type $over-i32) + (i32.sub (local.get 0) (i32.const 1)) + (i32.const 14) + ) ) ) ) diff --git a/test/spec/old_float_exprs.wast b/test/spec/old_float_exprs.wast index 854e21a6243..c6e900f0399 100644 --- a/test/spec/old_float_exprs.wast +++ b/test/spec/old_float_exprs.wast @@ -897,15 +897,15 @@ ;; Test that x>> 0 < i64toi32_i32$1 >>> 0) + 0 | 0; i64toi32_i32$5 = $0$hi - i64toi32_i32$5 | 0; i64toi32_i32$5 = $0(i64toi32_i32$3 - i64toi32_i32$1 | 0 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; - $8 = i64toi32_i32$5; - $8$hi = i64toi32_i32$3; + $6 = i64toi32_i32$5; + $6$hi = i64toi32_i32$3; i64toi32_i32$3 = $0$hi; - i64toi32_i32$5 = $8$hi; - i64toi32_i32$5 = __wasm_i64_mul($0_1 | 0, i64toi32_i32$3 | 0, $8 | 0, i64toi32_i32$5 | 0) | 0; + i64toi32_i32$5 = $6$hi; + i64toi32_i32$5 = __wasm_i64_mul($0_1 | 0, $0$hi | 0, $6 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; - $12 = i64toi32_i32$5; - $12$hi = i64toi32_i32$3; + $8 = i64toi32_i32$5; + $8$hi = i64toi32_i32$3; } - i64toi32_i32$3 = $12$hi; - i64toi32_i32$5 = $12; + i64toi32_i32$3 = $8$hi; + i64toi32_i32$5 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } @@ -51,33 +48,30 @@ function asmFunc(imports) { function fac_rec_named(n, n$hi) { n = n | 0; n$hi = n$hi | 0; - var i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $12 = 0, $12$hi = 0, $8 = 0, $8$hi = 0; - i64toi32_i32$2 = n; + var i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$1 = 0, $8 = 0, $8$hi = 0, $6 = 0, $6$hi = 0; i64toi32_i32$1 = 0; i64toi32_i32$3 = 0; - if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (n$hi | 0) == (i64toi32_i32$1 | 0) | 0) { - i64toi32_i32$2 = 0; - $12 = 1; - $12$hi = i64toi32_i32$2; + if ((n | 0) == (i64toi32_i32$3 | 0) & (n$hi | 0) == (i64toi32_i32$1 | 0) | 0) { + $8 = 1; + $8$hi = 0; } else { - i64toi32_i32$2 = n$hi; i64toi32_i32$3 = n; i64toi32_i32$1 = 1; i64toi32_i32$5 = (i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0) + 0 | 0; i64toi32_i32$5 = n$hi - i64toi32_i32$5 | 0; i64toi32_i32$5 = fac_rec_named(i64toi32_i32$3 - i64toi32_i32$1 | 0 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; - $8 = i64toi32_i32$5; - $8$hi = i64toi32_i32$3; + $6 = i64toi32_i32$5; + $6$hi = i64toi32_i32$3; i64toi32_i32$3 = n$hi; - i64toi32_i32$5 = $8$hi; - i64toi32_i32$5 = __wasm_i64_mul(n | 0, i64toi32_i32$3 | 0, $8 | 0, i64toi32_i32$5 | 0) | 0; + i64toi32_i32$5 = $6$hi; + i64toi32_i32$5 = __wasm_i64_mul(n | 0, n$hi | 0, $6 | 0, i64toi32_i32$5 | 0) | 0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; - $12 = i64toi32_i32$5; - $12$hi = i64toi32_i32$3; + $8 = i64toi32_i32$5; + $8$hi = i64toi32_i32$3; } - i64toi32_i32$3 = $12$hi; - i64toi32_i32$5 = $12; + i64toi32_i32$3 = $8$hi; + i64toi32_i32$5 = $8; i64toi32_i32$HIGH_BITS = i64toi32_i32$3; return i64toi32_i32$5 | 0; } diff --git a/test/wasm2js/forward.2asm.js b/test/wasm2js/forward.2asm.js index dab073477b9..053f0f99306 100644 --- a/test/wasm2js/forward.2asm.js +++ b/test/wasm2js/forward.2asm.js @@ -12,24 +12,24 @@ function asmFunc(imports) { var Math_sqrt = Math.sqrt; function even(n) { n = n | 0; - var $10 = 0; + var $6 = 0; if ((n | 0) == (0 | 0)) { - $10 = 1 + $6 = 1 } else { - $10 = odd(n - 1 | 0 | 0) | 0 + $6 = odd(n - 1 | 0 | 0) | 0 } - return $10 | 0; + return $6 | 0; } function odd(n) { n = n | 0; - var $10 = 0; + var $6 = 0; if ((n | 0) == (0 | 0)) { - $10 = 0 + $6 = 0 } else { - $10 = even(n - 1 | 0 | 0) | 0 + $6 = even(n - 1 | 0 | 0) | 0 } - return $10 | 0; + return $6 | 0; } return { diff --git a/test/wasm2js/if_unreachable.wast b/test/wasm2js/if_unreachable.wast index 11b41d16eb1..65cd4e119ef 100644 --- a/test/wasm2js/if_unreachable.wast +++ b/test/wasm2js/if_unreachable.wast @@ -7,13 +7,17 @@ (i32.const 0) (i32.const 48) ) - (block $label$2 - (br_if $label$2 - (i32.const 0) + (then + (block $label$2 + (br_if $label$2 + (i32.const 0) + ) + (unreachable) ) + ) + (else (unreachable) ) - (unreachable) ) (unreachable) ) diff --git a/test/wasm2js/stack-modified.wast b/test/wasm2js/stack-modified.wast index b3ede238037..1ba9f30a878 100644 --- a/test/wasm2js/stack-modified.wast +++ b/test/wasm2js/stack-modified.wast @@ -21,18 +21,22 @@ (local.get $var$1) (i64.const 0) ) - (br $label$1) - (block $label$5 - (local.set $var$2 - (i64.mul - (local.get $var$1) - (local.get $var$2) + (then + (br $label$1) + ) + (else + (block $label$5 + (local.set $var$2 + (i64.mul + (local.get $var$1) + (local.get $var$2) + ) ) - ) - (local.set $var$1 - (i64.sub - (local.get $var$1) - (i64.const 1) + (local.set $var$1 + (i64.sub + (local.get $var$1) + (i64.const 1) + ) ) ) ) @@ -58,18 +62,22 @@ (local.get $var$1) (i64.const 0) ) - (br $label$1) - (block - (local.set $var$2 - (i64.mul - (local.get $var$1) - (local.get $var$2) + (then + (br $label$1) + ) + (else + (block + (local.set $var$2 + (i64.mul + (local.get $var$1) + (local.get $var$2) + ) ) - ) - (local.set $var$1 - (i64.sub - (local.get $var$1) - (i64.const 1) + (local.set $var$1 + (i64.sub + (local.get $var$1) + (i64.const 1) + ) ) ) ) @@ -95,18 +103,22 @@ (local.get $var$1) (i64.const 0) ) - (br $label$1) - (block - (local.set $var$2 - (i64.mul - (local.get $var$1) - (local.get $var$2) + (then + (br $label$1) + ) + (else + (block + (local.set $var$2 + (i64.mul + (local.get $var$1) + (local.get $var$2) + ) ) - ) - (local.set $var$1 - (i64.sub - (local.get $var$1) - (i64.const 1) + (local.set $var$1 + (i64.sub + (local.get $var$1) + (i64.const 1) + ) ) ) ) @@ -132,18 +144,22 @@ (local.get $var$1) (i64.const 0) ) - (br $label$1) - (block - (local.set $var$2 - (i64.mul - (local.get $var$1) - (local.get $var$2) + (then + (br $label$1) + ) + (else + (block + (local.set $var$2 + (i64.mul + (local.get $var$1) + (local.get $var$2) + ) ) - ) - (local.set $var$1 - (i64.sub - (local.get $var$1) - (i64.const 1) + (local.set $var$1 + (i64.sub + (local.get $var$1) + (i64.const 1) + ) ) ) ) @@ -169,18 +185,22 @@ (local.get $var$1) (i64.const 0) ) - (br $label$1) - (block - (local.set $var$2 - (i64.mul - (local.get $var$1) - (local.get $var$2) + (then + (br $label$1) + ) + (else + (block + (local.set $var$2 + (i64.mul + (local.get $var$1) + (local.get $var$2) + ) ) - ) - (local.set $var$1 - (i64.sub - (local.get $var$1) - (i64.const 1) + (local.set $var$1 + (i64.sub + (local.get $var$1) + (i64.const 1) + ) ) ) ) diff --git a/test/wasm2js/unreachable-get-cycle.wast b/test/wasm2js/unreachable-get-cycle.wast index 6fc714a3990..3a25fea722d 100644 --- a/test/wasm2js/unreachable-get-cycle.wast +++ b/test/wasm2js/unreachable-get-cycle.wast @@ -10,25 +10,33 @@ ) (i32.const 0) ) - (loop $label$3 - (block $label$4 - (f32.store offset=22 align=2 - (i32.const 0) - (local.get $2) - ) - (drop - (local.tee $2 - (if (result f32) - (i32.const -19666) - (local.get $2) - (unreachable) + (then + (loop $label$3 + (block $label$4 + (f32.store offset=22 align=2 + (i32.const 0) + (local.get $2) + ) + (drop + (local.tee $2 + (if (result f32) + (i32.const -19666) + (then + (local.get $2) + ) + (else + (unreachable) + ) + ) ) ) ) + (br $label$3) ) - (br $label$3) ) - (i64.const 1) + (else + (i64.const 1) + ) ) ) ) diff --git a/test/wasm2js/unreachable-later.wast b/test/wasm2js/unreachable-later.wast index 0af55221255..49a7cdb8574 100644 --- a/test/wasm2js/unreachable-later.wast +++ b/test/wasm2js/unreachable-later.wast @@ -5,14 +5,18 @@ (func $0 (; 0 ;) (type $0) (param $0 i32) (result i32) (if (global.get $global$0) - (return - (local.get $0) + (then + (return + (local.get $0) + ) ) ) (if (global.get $global$0) - (return - (local.get $0) + (then + (return + (local.get $0) + ) ) ) (global.set $global$0 @@ -29,8 +33,10 @@ (block $label$4 (result i32) (if (global.get $global$0) - (return - (local.get $0) + (then + (return + (local.get $0) + ) ) ) (drop @@ -38,48 +44,70 @@ (block $label$6 (result i32) (if (global.get $global$0) - (return - (local.get $0) + (then + (return + (local.get $0) + ) ) ) (i32.const 65445) ) - (block (result f32) - (if - (global.get $global$0) - (return - (local.get $0) + (then + (block (result f32) + (if + (global.get $global$0) + (then + (return + (local.get $0) + ) + ) ) + (f32.const 0) ) - (f32.const 0) ) - (f32.const 1) + (else + (f32.const 1) + ) ) ) (if (global.get $global$0) - (return - (local.get $0) + (then + (return + (local.get $0) + ) ) ) (i32.const 1) ) - (i32.const 32) - (i32.const 0) + (then + (i32.const 32) + ) + (else + (i32.const 0) + ) ) ) ) (i32.const 1) ) ) - (i32.const 0) - (i32.const 1) + (then + (i32.const 0) + ) + (else + (i32.const 1) + ) + ) + ) + (then + (return + (i32.const -255) ) ) - (return - (i32.const -255) + (else + (unreachable) ) - (unreachable) ) ) )