diff options
-rw-r--r-- | src/ir/linear-execution.h | 17 | ||||
-rw-r--r-- | test/lit/passes/O4_disable-bulk-memory.wast | 29 | ||||
-rw-r--r-- | test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast | 6 | ||||
-rw-r--r-- | test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast | 6 | ||||
-rw-r--r-- | test/lit/passes/simplify-locals-gc.wast | 63 | ||||
-rw-r--r-- | test/wasm2js/i64-ctz.2asm.js | 3 | ||||
-rw-r--r-- | test/wasm2js/int_exprs.2asm.js | 84 | ||||
-rw-r--r-- | test/wasm2js/left-to-right.2asm.js | 6 | ||||
-rw-r--r-- | test/wasm2js/traps.2asm.js | 12 | ||||
-rw-r--r-- | test/wasm2js/unary-ops.2asm.js | 3 |
10 files changed, 147 insertions, 82 deletions
diff --git a/src/ir/linear-execution.h b/src/ir/linear-execution.h index b7020f7fb..c6593bd64 100644 --- a/src/ir/linear-execution.h +++ b/src/ir/linear-execution.h @@ -127,9 +127,16 @@ struct LinearExecutionWalker : public PostWalker<SubType, VisitorType> { } case Expression::Id::BreakId: { self->pushTask(SubType::doVisitBreak, currp); - self->pushTask(SubType::doNoteNonLinear, currp); - self->maybePushTask(SubType::scan, &curr->cast<Break>()->condition); - self->maybePushTask(SubType::scan, &curr->cast<Break>()->value); + auto* br = curr->cast<Break>(); + // If there is no condition then we note non-linearity as the code after + // us is unreachable anyhow (we do the same for Switch, Return, etc.). + // If there is a condition, then we note or do not note depending on + // whether we allow adjacent blocks. + if (!br->condition || !self->connectAdjacentBlocks) { + self->pushTask(SubType::doNoteNonLinear, currp); + } + self->maybePushTask(SubType::scan, &br->condition); + self->maybePushTask(SubType::scan, &br->value); break; } case Expression::Id::SwitchId: { @@ -185,7 +192,9 @@ struct LinearExecutionWalker : public PostWalker<SubType, VisitorType> { } case Expression::Id::BrOnId: { self->pushTask(SubType::doVisitBrOn, currp); - self->pushTask(SubType::doNoteNonLinear, currp); + if (!self->connectAdjacentBlocks) { + self->pushTask(SubType::doNoteNonLinear, currp); + } self->pushTask(SubType::scan, &curr->cast<BrOn>()->ref); break; } diff --git a/test/lit/passes/O4_disable-bulk-memory.wast b/test/lit/passes/O4_disable-bulk-memory.wast index 89a172661..5029f13e9 100644 --- a/test/lit/passes/O4_disable-bulk-memory.wast +++ b/test/lit/passes/O4_disable-bulk-memory.wast @@ -1371,7 +1371,7 @@ ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $1 + ;; CHECK-NEXT: (local.tee $3 ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (i32.sub ;; CHECK-NEXT: (i32.const 20) @@ -1389,7 +1389,7 @@ ;; CHECK-NEXT: (block $__inlined_func$~lib/internal/memory/memset$8 ;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset$8 ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1409,10 +1409,10 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 12) @@ -1421,14 +1421,14 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 8) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (br_if $__inlined_func$~lib/internal/memory/memset$8 ;; CHECK-NEXT: (i32.le_u - ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (local.get $3) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) @@ -1462,40 +1462,35 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.tee $3 - ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.get $0) - ;; CHECK-NEXT: (local.get $1) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 28) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 24) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 20) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.store ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (i32.const 16) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (i32.const 0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $0 ;; CHECK-NEXT: (i32.add - ;; CHECK-NEXT: (local.tee $3 + ;; CHECK-NEXT: (local.tee $1 ;; CHECK-NEXT: (i32.add ;; CHECK-NEXT: (i32.and ;; CHECK-NEXT: (local.get $0) @@ -1509,8 +1504,8 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (local.set $1 ;; CHECK-NEXT: (i32.sub - ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (local.get $1) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (loop $label$8 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 3a4b0265c..7103c94e8 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 @@ -3487,7 +3487,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 @@ -3498,7 +3498,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -3614,7 +3614,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.clz - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) 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 05731dfe9..163785fd4 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 @@ -3555,7 +3555,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 @@ -3566,7 +3566,7 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (unreachable) ;; CHECK-NEXT: (unreachable) @@ -3682,7 +3682,7 @@ ;; CHECK-NEXT: (nop) ;; CHECK-NEXT: (local.set $6 ;; CHECK-NEXT: (i32.clz - ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $var$0) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) diff --git a/test/lit/passes/simplify-locals-gc.wast b/test/lit/passes/simplify-locals-gc.wast index 6b2b10462..155649dbb 100644 --- a/test/lit/passes/simplify-locals-gc.wast +++ b/test/lit/passes/simplify-locals-gc.wast @@ -541,4 +541,67 @@ ) ) ) + + ;; CHECK: (func $equivalent-set-removal-branching (type $i32_anyref_=>_none) (param $0 i32) (param $any anyref) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (block $block + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br_if $block + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (br_on_null $block + ;; CHECK-NEXT: (local.get $any) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (br $block) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $equivalent-set-removal-branching (param $0 i32) (param $any anyref) + (local $1 i32) + (block $block + (local.set $1 (local.get $0)) + (br_if $block + (local.get $0) + ) + (drop + (br_on_null $block + (local.get $any) + ) + ) + ;; We can optimize these to both use the same local index, as they must + ;; contain the same value, even past the br_if and br_on_null. + (drop (local.get $0)) + (drop (local.get $1)) + (br $block) + ;; But we do not optimize these as they are after an unconditional br + ;; (so they are unreachable code). + (drop (local.get $0)) + (drop (local.get $1)) + ) + ;; Past the end of the block we do not optimize. The local.set actually does + ;; dominate these, but currently we do not realize that in this pass. TODO + (drop (local.get $0)) + (drop (local.get $1)) + ) ) diff --git a/test/wasm2js/i64-ctz.2asm.js b/test/wasm2js/i64-ctz.2asm.js index 5bd8cfc9b..fc8c52a54 100644 --- a/test/wasm2js/i64-ctz.2asm.js +++ b/test/wasm2js/i64-ctz.2asm.js @@ -176,7 +176,7 @@ function asmFunc(imports) { function __wasm_popcnt_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5 = 0, $5$hi = 0, $4 = 0, $9$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $4 = 0, $5 = 0, $5$hi = 0, $9$hi = 0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; @@ -188,7 +188,6 @@ function asmFunc(imports) { if ($4) { break label$1 } - i64toi32_i32$0 = $5$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; diff --git a/test/wasm2js/int_exprs.2asm.js b/test/wasm2js/int_exprs.2asm.js index 041e556b7..824e3313c 100644 --- a/test/wasm2js/int_exprs.2asm.js +++ b/test/wasm2js/int_exprs.2asm.js @@ -1154,8 +1154,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -1185,7 +1184,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -1886,8 +1886,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -1917,7 +1916,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -2582,8 +2582,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -2613,7 +2612,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -3378,8 +3378,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -3409,7 +3408,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -4064,8 +4064,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -4095,7 +4094,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -4694,8 +4694,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -4725,7 +4724,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -5392,8 +5392,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -5423,7 +5422,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -6108,8 +6108,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -6139,7 +6138,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -6824,8 +6824,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -6855,7 +6854,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -7540,8 +7540,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -7571,7 +7570,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -8236,8 +8236,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -8267,7 +8266,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -8934,8 +8934,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -8965,7 +8964,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -9632,8 +9632,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -9663,7 +9662,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -10304,8 +10304,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -10335,7 +10334,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; diff --git a/test/wasm2js/left-to-right.2asm.js b/test/wasm2js/left-to-right.2asm.js index 5bb552f34..0ee715b2d 100644 --- a/test/wasm2js/left-to-right.2asm.js +++ b/test/wasm2js/left-to-right.2asm.js @@ -1621,8 +1621,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -1652,7 +1651,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; diff --git a/test/wasm2js/traps.2asm.js b/test/wasm2js/traps.2asm.js index ee38b6055..f7a469ebe 100644 --- a/test/wasm2js/traps.2asm.js +++ b/test/wasm2js/traps.2asm.js @@ -305,8 +305,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -336,7 +335,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; @@ -1015,8 +1015,7 @@ function asmFunc(imports) { if (!var$3) { break label$11 } - i64toi32_i32$1 = var$1$hi; - i64toi32_i32$0 = var$1; + i64toi32_i32$0 = var$3; i64toi32_i32$2 = 0; i64toi32_i32$3 = 32; i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; @@ -1046,7 +1045,8 @@ function asmFunc(imports) { } i64toi32_i32$1 = var$0$hi; var$2 = var$0; - i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$2; + i64toi32_i32$1 = i64toi32_i32$2; var$3 = var$1; var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; i64toi32_i32$1 = 0; diff --git a/test/wasm2js/unary-ops.2asm.js b/test/wasm2js/unary-ops.2asm.js index 90b030e45..9adfe581b 100644 --- a/test/wasm2js/unary-ops.2asm.js +++ b/test/wasm2js/unary-ops.2asm.js @@ -452,7 +452,7 @@ function asmFunc(imports) { function __wasm_popcnt_i64(var$0, var$0$hi) { var$0 = var$0 | 0; var$0$hi = var$0$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5_1 = 0, $5$hi = 0, $4_1 = 0, $9$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $4_1 = 0, $5_1 = 0, $5$hi = 0, $9$hi = 0; label$1 : { label$2 : while (1) { i64toi32_i32$0 = var$1$hi; @@ -464,7 +464,6 @@ function asmFunc(imports) { if ($4_1) { break label$1 } - i64toi32_i32$0 = $5$hi; i64toi32_i32$0 = var$0$hi; i64toi32_i32$2 = var$0; i64toi32_i32$1 = 0; |