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

Claes Redestad claes.redestad at oracle.com
Sun Aug 21 13:09:11 UTC 2016


Hi Rémi,

On 2016-08-21 13:35, Remi Forax wrote:
> Hi Claes,
> it seems you have not generated the webrev from the right patch set,
>
> what the purpose of debugCompilation in LambdaForm ?

oops, a leftover from debugging the issue I'm sure. Removed and updated 
in place.

The rest should be as intended.

Thanks!

/Claes

>
> 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