Skip to content

Commit 8d85f4e

Browse files
OptimizeInstructions: Optimize unsigned(x) < 0 => i32(0) even with side effects (#7428)
Fixes #7418
1 parent aa08927 commit 8d85f4e

File tree

3 files changed

+35
-10
lines changed

3 files changed

+35
-10
lines changed

src/passes/OptimizeInstructions.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -562,11 +562,11 @@ struct OptimizeInstructions
562562
return replaceCurrent(getDroppedChildrenAndAppend(curr, c));
563563
}
564564
// unsigned(x) < 0 => i32(0)
565-
if (matches(curr, binary(LtU, pure(&x), ival(&c))) &&
565+
if (matches(curr, binary(LtU, any(&x), ival(&c))) &&
566566
c->value.isZero()) {
567567
c->value = Literal::makeZero(Type::i32);
568568
c->type = Type::i32;
569-
return replaceCurrent(c);
569+
return replaceCurrent(getDroppedChildrenAndAppend(curr, c));
570570
}
571571
}
572572
}

test/lit/passes/optimize-instructions-mvp.wast

+32
Original file line numberDiff line numberDiff line change
@@ -11476,9 +11476,29 @@
1147611476
;; CHECK-NEXT: (i32.const 0)
1147711477
;; CHECK-NEXT: )
1147811478
;; CHECK-NEXT: (drop
11479+
;; CHECK-NEXT: (block (result i32)
11480+
;; CHECK-NEXT: (drop
11481+
;; CHECK-NEXT: (i32.load
11482+
;; CHECK-NEXT: (i32.const 0)
11483+
;; CHECK-NEXT: )
11484+
;; CHECK-NEXT: )
11485+
;; CHECK-NEXT: (i32.const 0)
11486+
;; CHECK-NEXT: )
11487+
;; CHECK-NEXT: )
11488+
;; CHECK-NEXT: (drop
1147911489
;; CHECK-NEXT: (i32.const 0)
1148011490
;; CHECK-NEXT: )
1148111491
;; CHECK-NEXT: (drop
11492+
;; CHECK-NEXT: (block (result i32)
11493+
;; CHECK-NEXT: (drop
11494+
;; CHECK-NEXT: (i64.load
11495+
;; CHECK-NEXT: (i32.const 0)
11496+
;; CHECK-NEXT: )
11497+
;; CHECK-NEXT: )
11498+
;; CHECK-NEXT: (i32.const 0)
11499+
;; CHECK-NEXT: )
11500+
;; CHECK-NEXT: )
11501+
;; CHECK-NEXT: (drop
1148211502
;; CHECK-NEXT: (i32.ne
1148311503
;; CHECK-NEXT: (local.get $x)
1148411504
;; CHECK-NEXT: (i32.const 0)
@@ -11701,10 +11721,22 @@
1170111721
(local.get $x)
1170211722
(i32.const 0)
1170311723
))
11724+
(drop (i32.lt_u
11725+
(i32.load
11726+
(i32.const 0)
11727+
)
11728+
(i32.const 0)
11729+
))
1170411730
(drop (i64.lt_u
1170511731
(local.get $y)
1170611732
(i64.const 0)
1170711733
))
11734+
(drop (i64.lt_u
11735+
(i64.load
11736+
(i32.const 0)
11737+
)
11738+
(i64.const 0)
11739+
))
1170811740

1170911741
;; (unsigned)x > 0 => x != 0
1171011742
(drop (i32.gt_u

test/wasm2js/bulk-memory.2asm.js.opt

+1-8
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,6 @@ var retasmFunc = asmFunc({
275275
export var init = retasmFunc.init;
276276
export var load8_u = retasmFunc.load8_u;
277277

278-
var bufferView;
279-
function wasm2js_trap() { throw new Error('abort'); }
280-
281278
function asmFunc(imports) {
282279
var buffer = new ArrayBuffer(65536);
283280
var HEAP8 = new Int8Array(buffer);
@@ -303,12 +300,9 @@ function asmFunc(imports) {
303300
}
304301

305302
function $1() {
306-
if (__wasm_memory_size() << 16 >>> 0 < 0) {
307-
wasm2js_trap()
308-
}
303+
__wasm_memory_size();
309304
}
310305

311-
bufferView = HEAPU8;
312306
function __wasm_memory_size() {
313307
return buffer.byteLength / 65536 | 0;
314308
}
@@ -330,7 +324,6 @@ function asmFunc(imports) {
330324
HEAPF32 = new Float32Array(newBuffer);
331325
HEAPF64 = new Float64Array(newBuffer);
332326
buffer = newBuffer;
333-
bufferView = HEAPU8;
334327
}
335328
return oldPages;
336329
}

0 commit comments

Comments
 (0)