RFR: 8314452: Explicitly indicate inlining success/failure in PrintInlining
Jorn Vernee
jvernee at openjdk.org
Thu Aug 17 17:15:36 UTC 2023
This patch proposes to add a `+` or `-` to messages produced by `PrintInlining`, to indicate whether inlining succeeded or failed. This makes it easier to find inlining failures in an inlining trace, without having to rely on the message to figure out whether inlining succeeded or failed. Looking at inlining failures is often useful for diagnosing the results of benchmarks, but it can be hard to find inlining failures in lengthy traces.
A sample of what this looks like:
+@ 0 java.lang.foreign.Arena::ofConfined (10 bytes) inline (hot)
+@ 0 java.lang.Thread::currentThread (0 bytes) (intrinsic)
+@ 3 jdk.internal.foreign.MemorySessionImpl::createConfined (9 bytes) inline (hot)
+@ 5 jdk.internal.foreign.ConfinedSession::<init> (18 bytes) inline (hot)
+@ 6 jdk.internal.foreign.ConfinedSession$ConfinedResourceList::<init> (5 bytes) inline (hot)
+@ 1 jdk.internal.foreign.MemorySessionImpl$ResourceList::<init> (5 bytes) inline (hot)
+@ 1 java.lang.Object::<init> (1 bytes) inline (hot)
+@ 9 jdk.internal.foreign.MemorySessionImpl::<init> (20 bytes) inline (hot)
+@ 1 java.lang.Object::<init> (1 bytes) inline (hot)
+@ 6 jdk.internal.foreign.MemorySessionImpl::asArena (9 bytes) inline (hot)
+@ 5 jdk.internal.foreign.MemorySessionImpl$1::<init> (10 bytes) inline (hot)
+@ 6 java.lang.Object::<init> (1 bytes) inline (hot)
-@ 8 java.lang.foreign.SegmentAllocator::allocate (24 bytes) already compiled into a big method
Using `grep`/`sls` to find inlining failures:
> Get-Content inlining_trace.txt | sls '-@'
-@ 8 java.lang.foreign.SegmentAllocator::allocate (24 bytes) already compiled into a big method
-@ 34 java.lang.foreign.SegmentAllocator::allocate (24 bytes) already compiled into a big method
-@ 19 java.lang.invoke.MethodHandle::linkToNative(JJJL)D (0 bytes) native call
-@ 95 java.lang.foreign.Arena::close (0 bytes) virtual call
-@ 107 jdk.internal.foreign.MemorySessionImpl::release0 (0 bytes) virtual call
-@ 14 jdk.internal.misc.Unsafe::freeMemory0 (0 bytes) native method
Note on the implementation: I opted for an enum to indicate inlining success/failure. I was using `bool` first, but ran into issues in some cases because the 'message' pointer was being implicitly converted to `bool`, and since the message itself is optional (`nullptr` by default) this didn't result in compilation errors, but silently omitted the inlining message instead. Using an enum avoids that issue. It also makes the call site a little easier to read, since there are no more `true` and `false` literals.
-------------
Commit messages:
- polish
- kind -> kind_of
- Explicitly track inlining success/failure
Changes: https://git.openjdk.org/jdk/pull/15315/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15315&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8314452
Stats: 51 lines in 10 files changed: 16 ins; 2 del; 33 mod
Patch: https://git.openjdk.org/jdk/pull/15315.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15315/head:pull/15315
PR: https://git.openjdk.org/jdk/pull/15315
More information about the hotspot-compiler-dev
mailing list