Skip to content

Commit 8e4d3c1

Browse files
OptimizeInstructions: Optimize (unsigned)x > -1 ==> i32(0) even with side effects (#7437)
Fixes: #7435
1 parent 7e9e9dd commit 8e4d3c1

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/passes/OptimizeInstructions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4031,10 +4031,10 @@ struct OptimizeInstructions
40314031
return getDroppedChildrenAndAppend(curr, right);
40324032
}
40334033
// (unsigned)x > -1 ==> i32(0)
4034-
if (matches(curr, binary(GtU, pure(&left), ival(-1)))) {
4034+
if (matches(curr, binary(GtU, any(&left), ival(-1)))) {
40354035
right->value = Literal::makeZero(Type::i32);
40364036
right->type = Type::i32;
4037-
return right;
4037+
return getDroppedChildrenAndAppend(curr, right);
40384038
}
40394039
// (unsigned)x >= 0 ==> i32(1)
40404040
if (matches(curr, binary(GeU, pure(&left), ival(0)))) {

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11111,9 +11111,29 @@
1111111111
;; CHECK-NEXT: (i32.const 0)
1111211112
;; CHECK-NEXT: )
1111311113
;; CHECK-NEXT: (drop
11114+
;; CHECK-NEXT: (block (result i32)
11115+
;; CHECK-NEXT: (drop
11116+
;; CHECK-NEXT: (i32.load
11117+
;; CHECK-NEXT: (i32.const 0)
11118+
;; CHECK-NEXT: )
11119+
;; CHECK-NEXT: )
11120+
;; CHECK-NEXT: (i32.const 0)
11121+
;; CHECK-NEXT: )
11122+
;; CHECK-NEXT: )
11123+
;; CHECK-NEXT: (drop
1111411124
;; CHECK-NEXT: (i32.const 0)
1111511125
;; CHECK-NEXT: )
1111611126
;; CHECK-NEXT: (drop
11127+
;; CHECK-NEXT: (block (result i32)
11128+
;; CHECK-NEXT: (drop
11129+
;; CHECK-NEXT: (i64.load
11130+
;; CHECK-NEXT: (i32.const 0)
11131+
;; CHECK-NEXT: )
11132+
;; CHECK-NEXT: )
11133+
;; CHECK-NEXT: (i32.const 0)
11134+
;; CHECK-NEXT: )
11135+
;; CHECK-NEXT: )
11136+
;; CHECK-NEXT: (drop
1111711137
;; CHECK-NEXT: (i32.ge_s
1111811138
;; CHECK-NEXT: (local.get $x)
1111911139
;; CHECK-NEXT: (i32.const 0)
@@ -11243,10 +11263,22 @@
1124311263
(local.get $x)
1124411264
(i32.const -1)
1124511265
))
11266+
(drop (i32.gt_u
11267+
(i32.load
11268+
(i32.const 0)
11269+
)
11270+
(i32.const -1)
11271+
))
1124611272
(drop (i64.gt_u
1124711273
(local.get $y)
1124811274
(i64.const -1)
1124911275
))
11276+
(drop (i64.gt_u
11277+
(i64.load
11278+
(i32.const 0)
11279+
)
11280+
(i64.const -1)
11281+
))
1125011282
(drop (i32.gt_s
1125111283
(local.get $x)
1125211284
(i32.const -1)

0 commit comments

Comments
 (0)