-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Better logging #33
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
Better logging #33
Conversation
1) max constraint is now printed via typr printer, does not clog the output unless typr is set. 2) running a frontend phase informs what is run on which unit under -verbose.
Reason is we want to find out in what order files were compiled when a failure occurs.
I meant review by @DarkDimius @samuelgruetter |
Not really related to the changes of this PR, but to the topic "better logging" (I found this when inspecting this PR): In |
@odersky I'm not sure if we should keep this verbose mode enabled in master. It will be just polluting log after being fixed. I've restarted travis build once again and it failed. See log https://travis-ci.org/lampepfl/dotty/builds/19964435 |
Agree we can retract the tests commit. I minimized the problem now. See |
Detect NotNull Annotations for Java Methods
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.
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.
Review by DarkDimius.
It would be good to get the order of files compiled next time dotc-config fails.