Inlining

Christian Thalinger Christian.Thalinger at Sun.COM
Tue Aug 18 11:02:48 PDT 2009


Raffaello Giulietti wrote:
> * Is there a special -XX: flag to turn on inlining of methods invoked
> via method handles?
> * Or must something be enabled during the build of mlvm?

No, inlining is enabled by default.  Currently only DMH invokes are
inlined, but I'm working on inlining the rest.  Are you missing specific
calls?

I wanted to write a status update anyway...  Yesterday I could inline
for the first time a whole GuardWithTest calling sequence (with
adjusting some switches).  The inlined sequence looks like this (methods
take one int argument and return an int):

  1%  b   gwt::foo @ 6 (29 bytes)
      @ 14   java.dyn.MethodHandle::invoke  inline (hot)
      @ 14   sun.dyn.ToGeneric$A1::invoke  inline (hot)
        @ 4   sun.dyn.ToGeneric$A1::invoke_I  inline (hot)
          @ 3   sun.dyn.ToGeneric$A1::targetA1  inline (hot)
            @ 2   java.lang.Integer::valueOf  inline (hot)
              @ 50   java.lang.Integer::<init>  inline (hot)
                @ 1   java.lang.Number::<init>  inline (hot)
                  @ 1   java.lang.Object::<init>  inline (hot)
            @ 5   sun.dyn.ToGeneric$A1::target  inline (hot)
              @ 9   java.dyn.MethodHandle::invoke  inline (hot)
              @ 9   java.dyn.MethodHandle::invoke  inline (hot)
                @ 4   java.dyn.MethodHandle::invoke  inline (hot)
                @ 4   sun.dyn.MethodHandleImpl$GuardWithTest::invoke
inline (hot)
                  @ 4
sun.dyn.MethodHandleImpl$GuardWithTest::invoke_L1  inline (hot)
                    @ 5   java.dyn.MethodHandle::invoke  inline (hot)
                    @ 5   gwt::invoke  inline (hot)
                      @ 16   java.lang.Integer::intValue  inline (hot)
                      @ 23   gwt::test  inline (hot)
                    @ 16   java.dyn.MethodHandle::invoke  inline (hot)
                    @ 16   sun.dyn.FromGeneric$A1::invoke  call site not
reached
                    @ 25   java.dyn.MethodHandle::invoke  inline (hot)
                    @ 25   sun.dyn.FromGeneric$A1::invoke  inline (hot)
                      @ 4   sun.dyn.FromGeneric$A1::invoke_I1  inline (hot)
                        @ 10   java.dyn.MethodHandle::invoke  inline (hot)
                        @ 10   java.dyn.MethodHandle::invoke  inline (hot)
                          @ 16   java.lang.Integer::intValue  inline (hot)
                          @ 25   java.dyn.MethodHandle::invoke  inline (hot)
                          @ 25   gwt::invoke  inline (hot)
                            @ 2   gwt::fallback  inline (hot)
                        @ 13   sun.dyn.FromGeneric$Adapter::convert_I
inline (hot)
                          @ 5   java.dyn.MethodHandle::invoke  inline (hot)
                          @ 5   sun.dyn.util.ValueConversions::invoke
inline (hot)
                            @ 2
sun.dyn.util.ValueConversions::boxInteger  inline (hot)
                              @ 1   java.lang.Integer::valueOf  inline (hot)
                                @ 50   java.lang.Integer::<init>  inline
(hot)
                                  @ 1   java.lang.Number::<init>  inline
(hot)
                                    @ 1   java.lang.Object::<init>
inline (hot)
          @ 6   sun.dyn.ToGeneric$Adapter::return_I  inline (hot)
            @ 5   java.dyn.MethodHandle::invoke  inline (hot)
            @ 5   sun.dyn.util.ValueConversions::invoke  inline (hot)
              @ 2   sun.dyn.util.ValueConversions::unboxInteger  inline
(hot)
                @ 10   java.lang.Integer::intValue  inline (hot)

Currently hunting various bugs...

-- Christian


More information about the mlvm-dev mailing list