From 1830051f20fe731fe1fa7fc23432be26c0286989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Sat, 31 May 2025 17:18:45 +0200 Subject: [PATCH 1/2] Add missing cases in `Printers` for `{Int,Long}_clz`. This was forgotten in f414dae55c11e1aa41209076e4cccb467d6d7576. --- ir/shared/src/main/scala/org/scalajs/ir/Printers.scala | 3 +++ ir/shared/src/test/scala/org/scalajs/ir/PrintersTest.scala | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ir/shared/src/main/scala/org/scalajs/ir/Printers.scala b/ir/shared/src/main/scala/org/scalajs/ir/Printers.scala index facd69b122..f2035fd7f8 100644 --- a/ir/shared/src/main/scala/org/scalajs/ir/Printers.scala +++ b/ir/shared/src/main/scala/org/scalajs/ir/Printers.scala @@ -450,6 +450,9 @@ object Printers { case Float_fromBits => p("(", ")") case Double_toBits => p("(", ")") case Double_fromBits => p("(", ")") + + case Int_clz => p("(", ")") + case Long_clz => p("(", ")") } case BinaryOp(BinaryOp.Int_-, IntLiteral(0), rhs) => diff --git a/ir/shared/src/test/scala/org/scalajs/ir/PrintersTest.scala b/ir/shared/src/test/scala/org/scalajs/ir/PrintersTest.scala index d570445fc8..997e396530 100644 --- a/ir/shared/src/test/scala/org/scalajs/ir/PrintersTest.scala +++ b/ir/shared/src/test/scala/org/scalajs/ir/PrintersTest.scala @@ -519,6 +519,9 @@ class PrintersTest { assertPrintEquals("(x)", UnaryOp(Float_fromBits, ref("x", IntType))) assertPrintEquals("(x)", UnaryOp(Double_toBits, ref("x", DoubleType))) assertPrintEquals("(x)", UnaryOp(Double_fromBits, ref("x", LongType))) + + assertPrintEquals("(x)", UnaryOp(Int_clz, ref("x", IntType))) + assertPrintEquals("(x)", UnaryOp(Long_clz, ref("x", LongType))) } @Test def printPseudoUnaryOp(): Unit = { From 0c68950bd5367b6e74326bd59379676ba2f07422 Mon Sep 17 00:00:00 2001 From: Tobias Schlatter Date: Sun, 1 Jun 2025 13:48:22 +0200 Subject: [PATCH 2/2] Opt: Recognize non-nullabe RT long as subtype of LongType Discovered while working on #5077. This allows to remove unnecessary unboxes and unlocks more inlining. --- .../org/scalajs/linker/frontend/optimizer/OptimizerCore.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/linker/shared/src/main/scala/org/scalajs/linker/frontend/optimizer/OptimizerCore.scala b/linker/shared/src/main/scala/org/scalajs/linker/frontend/optimizer/OptimizerCore.scala index f30a174597..68a5452531 100644 --- a/linker/shared/src/main/scala/org/scalajs/linker/frontend/optimizer/OptimizerCore.scala +++ b/linker/shared/src/main/scala/org/scalajs/linker/frontend/optimizer/OptimizerCore.scala @@ -271,6 +271,8 @@ private[optimizer] abstract class OptimizerCore( (lhs, rhs) match { case (LongType, ClassType(LongImpl.RuntimeLongClass, _)) => true + case (ClassType(LongImpl.RuntimeLongClass, false), LongType) => + true case (ClassType(BoxedLongClass, lhsNullable), ClassType(LongImpl.RuntimeLongClass, rhsNullable)) => rhsNullable || !lhsNullable