Skip to content

Backend wip #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 14, 2014
Merged

Backend wip #20

merged 2 commits into from
Feb 14, 2014

Conversation

lrytz
Copy link
Member

@lrytz lrytz commented Feb 14, 2014

review by @magarciaEPFL

magarciaEPFL added a commit that referenced this pull request Feb 14, 2014
@magarciaEPFL magarciaEPFL merged commit bd6dea9 into scala:backend Feb 14, 2014
OlivierBlanvillain pushed a commit to OlivierBlanvillain/dotty that referenced this pull request Dec 12, 2016
with a primitive CONCAT and several opcodes, I'm assuming nobody will
oppose this on principle. Given an expression of the exact form "" + x
(that is, the NPE-immune and much less ugly way to call .toString) we
used to get 4x the bytecode and create an unneeded StringBuilder. Now
this:

0:	aload_1
1:	invokestatic	scala#20; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
4:	areturn

Closes scala#4160, review by dragos.
odersky added a commit that referenced this pull request Jun 15, 2022
Some tests by Matt had cases where `.nn` figured prominently in the flamegraph.
I optimized it so that the fast path is streamlined and inlined.

In the following test code:
```

  def x: String | Null = "abc"
  val y = x.nn
```
the new implementation is
```
      10: getstatic     #20                 // Field MODULE$:LTest$;
      13: invokevirtual #24                 // Method x:()Ljava/lang/String;
      16: astore_0
      17: getstatic     #29                 // Field scala/runtime/Scala3RunTime$.MODULE$:Lscala/runtime/Scala3RunTime$;
      20: aload_0
      21: invokevirtual #33                 // Method scala/runtime/Scala3RunTime$.nn:(Ljava/lang/Object;)Ljava/lang/Object;
      24: checkcast     #35                 // class java/lang/String
      27: putstatic     #37                 // Field y:Ljava/lang/String;
```
The previous implementation was two bytes shorter, but contained in the critical path

 - A call to a ScalaRuntime method, which was not inlineable by the JIT compiler due to its size,
 - A conversion of a cmparison to a Boolean value (not sure this matters)
 - A cast from the return type `Object` to the actual type.
pikinier20 pushed a commit that referenced this pull request Aug 16, 2022
Make SocialLinks generic. Fix navigation. Add project name
szymon-rd pushed a commit that referenced this pull request Dec 9, 2022
WojciechMazur added a commit to WojciechMazur/dotty that referenced this pull request Mar 19, 2025
Backport "Fix and future-proof the CI release scripts" to LTS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants