Skip to content

Commit 16dbac1

Browse files
OptimizeInstructions: Optimize x | -1 ==> -1 even with side effects (#7439)
Fixes: #7438
1 parent 8e4d3c1 commit 16dbac1

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

src/passes/OptimizeInstructions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3993,8 +3993,8 @@ struct OptimizeInstructions
39933993
return left;
39943994
}
39953995
// x | -1 ==> -1
3996-
if (matches(curr, binary(Or, pure(&left), ival(-1)))) {
3997-
return right;
3996+
if (matches(curr, binary(Or, any(&left), ival(-1)))) {
3997+
return getDroppedChildrenAndAppend(curr, right);
39983998
}
39993999
// (signed)x % -1 ==> 0
40004000
if (matches(curr, binary(RemS, pure(&left), ival(-1)))) {

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

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9438,9 +9438,11 @@
94389438
;; CHECK-NEXT: (i32.const -1)
94399439
;; CHECK-NEXT: )
94409440
;; CHECK-NEXT: (drop
9441-
;; CHECK-NEXT: (i32.or
9442-
;; CHECK-NEXT: (local.tee $x
9443-
;; CHECK-NEXT: (i32.const 1337)
9441+
;; CHECK-NEXT: (block (result i32)
9442+
;; CHECK-NEXT: (drop
9443+
;; CHECK-NEXT: (local.tee $x
9444+
;; CHECK-NEXT: (i32.const 1337)
9445+
;; CHECK-NEXT: )
94449446
;; CHECK-NEXT: )
94459447
;; CHECK-NEXT: (i32.const -1)
94469448
;; CHECK-NEXT: )
@@ -9451,6 +9453,16 @@
94519453
;; CHECK-NEXT: (drop
94529454
;; CHECK-NEXT: (i64.const -1)
94539455
;; CHECK-NEXT: )
9456+
;; CHECK-NEXT: (drop
9457+
;; CHECK-NEXT: (block (result i64)
9458+
;; CHECK-NEXT: (drop
9459+
;; CHECK-NEXT: (local.tee $y
9460+
;; CHECK-NEXT: (i64.const 1337)
9461+
;; CHECK-NEXT: )
9462+
;; CHECK-NEXT: )
9463+
;; CHECK-NEXT: (i64.const -1)
9464+
;; CHECK-NEXT: )
9465+
;; CHECK-NEXT: )
94549466
;; CHECK-NEXT: )
94559467
(func $all_ones (param $x i32) (param $y i64)
94569468
(drop
@@ -9485,6 +9497,14 @@
94859497
(i64.const -1)
94869498
)
94879499
)
9500+
(drop
9501+
(i64.or
9502+
(local.tee $y
9503+
(i64.const 1337)
9504+
)
9505+
(i64.const -1)
9506+
)
9507+
)
94889508
)
94899509
;; CHECK: (func $xor (param $x i32) (param $y i64)
94909510
;; CHECK-NEXT: (drop

0 commit comments

Comments
 (0)