Skip to content

Commit f755250

Browse files
committed
optimize shifts of 0
1 parent b85e8b5 commit f755250

3 files changed

Lines changed: 44 additions & 15 deletions

File tree

src/passes/OptimizeInstructions.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,12 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions,
517517
}
518518
}
519519
}
520+
// some operations have no effect TODO: many more
521+
if (right->value == Literal(int32_t(0))) {
522+
if (binary->op == ShlInt32 || binary->op == ShrUInt32 || binary->op == ShrSInt32) {
523+
return binary->left;
524+
}
525+
}
520526
// the square of some operations can be merged
521527
if (auto* left = binary->left->dynCast<Binary>()) {
522528
if (left->op == binary->op) {

test/passes/optimize-instructions.txt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,31 +1965,32 @@
19651965
(func $zero-shifts-is-not-sign-ext (type $1)
19661966
(drop
19671967
(i32.eq
1968-
(i32.shr_s
1969-
(i32.shl
1970-
(i32.load16_s align=1
1971-
(i32.const 790656516)
1972-
)
1973-
(i32.const 0)
1974-
)
1975-
(i32.const 0)
1968+
(i32.load16_s align=1
1969+
(i32.const 790656516)
19761970
)
19771971
(i32.const -5431187)
19781972
)
19791973
)
19801974
(drop
19811975
(i32.eq
1982-
(i32.shr_s
1983-
(i32.shl
1984-
(i32.load16_s align=1
1985-
(i32.const 790656516)
1986-
)
1987-
(i32.const 1)
1976+
(i32.shl
1977+
(i32.load16_s align=1
1978+
(i32.const 790656516)
19881979
)
1989-
(i32.const 0)
1980+
(i32.const 1)
19901981
)
19911982
(i32.const -5431187)
19921983
)
19931984
)
19941985
)
1986+
(func $zero-ops (type $2) (result i32)
1987+
(return
1988+
(i32.eq
1989+
(i32.load16_s align=1
1990+
(i32.const 790656516)
1991+
)
1992+
(i32.const -1337)
1993+
)
1994+
)
1995+
)
19951996
)

test/passes/optimize-instructions.wast

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2395,4 +2395,26 @@
23952395
)
23962396
)
23972397
)
2398+
(func $zero-ops (result i32)
2399+
(return
2400+
(i32.eq
2401+
(i32.const -1337)
2402+
(i32.shr_u
2403+
(i32.add
2404+
(i32.const 0)
2405+
(i32.shr_s
2406+
(i32.shl
2407+
(i32.load16_s align=1
2408+
(i32.const 790656516)
2409+
)
2410+
(i32.const 0)
2411+
)
2412+
(i32.const 0)
2413+
)
2414+
)
2415+
(i32.const 0)
2416+
)
2417+
)
2418+
)
2419+
)
23982420
)

0 commit comments

Comments
 (0)