RFR: 8164525: Re-examine zero form link time pre-generation

Remi Forax forax at univ-mlv.fr
Sun Aug 21 11:35:26 UTC 2016


Hi Claes,
it seems you have not generated the webrev from the right patch set,

what the purpose of debugCompilation in LambdaForm ?

cheers,
Rémi

----- Mail original -----
> De: "Claes Redestad" <claes.redestad at oracle.com>
> À: "core-libs-dev Libs" <core-libs-dev at openjdk.java.net>
> Envoyé: Dimanche 21 Août 2016 11:59:43
> Objet: RFR: 8164525: Re-examine zero form link time pre-generation

> Hi,
> 
> the previous attempt to pre-generate zero LambdaForms[1] failed
> due to the current implementation surprisingly emitting placeholder
> constants to link to the associated identity function (which we can't
> properly handle when pre-generating forms) rather than simply emitting
> the corresponding bytecode directly (iconst_0, etc).
> 
> It turns out the setup of Zero and Identity functions aren't being made
> intrinsic, which appears to be an oversight. Fixing this allows for more
> optimal bytecode[1].
> 
> While this fix could have positive performance implications in general,
> it also makes the startup optimization from JDK-8164451 re-apply
> without issue (no test failures running RBT --test jdk/test/:tier1).
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8164525
> Webrev: http://cr.openjdk.java.net/~redestad/8164525/webrev.01/
> 
> Thanks!
> 
> /Claes
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8164451
> [2] Before:
> 
>   static java.lang.Object zero_000_L(java.lang.Object);
>     descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
>     flags: ACC_STATIC
>     Code:
>       stack=2, locals=1, args_size=1
>          0: ldc           #14                 // String
> CONSTANT_PLACEHOLDER_1 <<(Object)Object :
> identity_000_L=Lambda(a0:L,a1:L)=>{a1:L}\n& Class=SimpleMethodHandle>>
>          2: checkcast     #16                 // class
> java/lang/invoke/MethodHandle
>          5: aconst_null
>          6: invokevirtual #19                 // Method
> java/lang/invoke/MethodHandle.invokeBasic:(Ljava/lang/Object;)Ljava/lang/Object;
>          9: areturn
>     RuntimeVisibleAnnotations:
>       0: #8()
>       1: #9()
>       2: #10()
> 
> After:
> 
>   static java.lang.Object zero_L(java.lang.Object);
>     descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
>     flags: ACC_STATIC
>     Code:
>       stack=1, locals=1, args_size=1
>          0: aconst_null
>          1: areturn
>     RuntimeVisibleAnnotations:
>       0: #8()
>       1: #9()
>        2: #10()


More information about the core-libs-dev mailing list