summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ir/linear-execution.h17
-rw-r--r--test/lit/passes/O4_disable-bulk-memory.wast29
-rw-r--r--test/lit/passes/flatten_simplify-locals-nonesting_souperify-single-use_enable-threads.wast6
-rw-r--r--test/lit/passes/flatten_simplify-locals-nonesting_souperify_enable-threads.wast6
-rw-r--r--test/lit/passes/simplify-locals-gc.wast63
-rw-r--r--test/wasm2js/i64-ctz.2asm.js3
-rw-r--r--test/wasm2js/int_exprs.2asm.js84
-rw-r--r--test/wasm2js/left-to-right.2asm.js6
-rw-r--r--test/wasm2js/traps.2asm.js12
-rw-r--r--test/wasm2js/unary-ops.2asm.js3
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;