Skip to content

Commit 29e02bf

Browse files
authored
Merge pull request #5176 from sjrd/range-unsigned-ints-instead-of-longs
Opt: Use unsigned arithmetics in Range, instead of Longs.
2 parents 25d9a5f + d972218 commit 29e02bf

File tree

4 files changed

+324
-187
lines changed

4 files changed

+324
-187
lines changed

linker/shared/src/main/scala/org/scalajs/linker/frontend/optimizer/OptimizerCore.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4167,6 +4167,10 @@ private[optimizer] abstract class OptimizerCore(
41674167
PreTransLit(IntLiteral(y)), z)) =>
41684168
foldBinaryOp(innerOp, PreTransLit(IntLiteral(x + y)), z)
41694169

4170+
// 1 + (-1 ^ x) == 1 + ~x == -x == 0 - x (this appears when optimizing a Range with step == -1)
4171+
case (PreTransLit(IntLiteral(1)), PreTransBinaryOp(Int_^, PreTransLit(IntLiteral(-1)), x)) =>
4172+
foldBinaryOp(Int_-, PreTransLit(IntLiteral(0)), x)
4173+
41704174
case _ => default
41714175
}
41724176

@@ -4435,6 +4439,9 @@ private[optimizer] abstract class OptimizerCore(
44354439
PreTransLit(IntLiteral(z))) =>
44364440
foldBinaryOp(op, y, PreTransLit(IntLiteral(x ^ z)))
44374441

4442+
case (PreTransLocalDef(l), PreTransLocalDef(r)) if l eq r =>
4443+
booleanLit(op == Int_==)
4444+
44384445
case (PreTransLit(_), _) => foldBinaryOp(op, rhs, lhs)
44394446

44404447
case _ => default
@@ -4486,6 +4493,9 @@ private[optimizer] abstract class OptimizerCore(
44864493
case _ => default
44874494
}
44884495

4496+
case (PreTransLocalDef(l), PreTransLocalDef(r)) if l eq r =>
4497+
booleanLit(op == Int_<= || op == Int_>=)
4498+
44894499
case (PreTransLit(IntLiteral(_)), _) =>
44904500
foldBinaryOp(flippedOp, rhs, lhs)
44914501

@@ -4729,6 +4739,9 @@ private[optimizer] abstract class OptimizerCore(
47294739
PreTransLit(LongLiteral(z))) =>
47304740
foldBinaryOp(op, y, PreTransLit(LongLiteral(x ^ z)))
47314741

4742+
case (PreTransLocalDef(l), PreTransLocalDef(r)) if l eq r =>
4743+
booleanLit(positive)
4744+
47324745
case (PreTransLit(LongLiteral(_)), _) => foldBinaryOp(op, rhs, lhs)
47334746

47344747
case _ => default
@@ -4852,6 +4865,9 @@ private[optimizer] abstract class OptimizerCore(
48524865
} (finishTransform(isStat = false))(emptyScope)
48534866
}.toPreTransform
48544867

4868+
case (PreTransLocalDef(l), PreTransLocalDef(r)) if l eq r =>
4869+
booleanLit(op == Long_<= || op == Long_>=)
4870+
48554871
case (PreTransLit(LongLiteral(_)), _) =>
48564872
foldBinaryOp(flippedOp, rhs, lhs)
48574873

project/Build.scala

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2053,32 +2053,32 @@ object Build {
20532053
case `default212Version` =>
20542054
if (!useMinifySizes) {
20552055
Some(ExpectedSizes(
2056-
fastLink = 626000 to 627000,
2057-
fullLink = 96000 to 97000,
2056+
fastLink = 624000 to 625000,
2057+
fullLink = 94000 to 95000,
20582058
fastLinkGz = 75000 to 79000,
2059-
fullLinkGz = 25000 to 26000,
2059+
fullLinkGz = 24000 to 25000,
20602060
))
20612061
} else {
20622062
Some(ExpectedSizes(
2063-
fastLink = 425000 to 426000,
2064-
fullLink = 283000 to 284000,
2065-
fastLinkGz = 61000 to 62000,
2063+
fastLink = 424000 to 425000,
2064+
fullLink = 281000 to 282000,
2065+
fastLinkGz = 60000 to 61000,
20662066
fullLinkGz = 43000 to 44000,
20672067
))
20682068
}
20692069

20702070
case `default213Version` =>
20712071
if (!useMinifySizes) {
20722072
Some(ExpectedSizes(
2073-
fastLink = 443000 to 444000,
2074-
fullLink = 92000 to 93000,
2073+
fastLink = 442000 to 443000,
2074+
fullLink = 90000 to 91000,
20752075
fastLinkGz = 57000 to 58000,
2076-
fullLinkGz = 25000 to 26000,
2076+
fullLinkGz = 24000 to 25000,
20772077
))
20782078
} else {
20792079
Some(ExpectedSizes(
2080-
fastLink = 301000 to 302000,
2081-
fullLink = 258000 to 259000,
2080+
fastLink = 299000 to 300000,
2081+
fullLink = 257000 to 258000,
20822082
fastLinkGz = 47000 to 48000,
20832083
fullLinkGz = 42000 to 43000,
20842084
))

0 commit comments

Comments
 (0)