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