[10] RFR(XS): 8169766: c1 + Xcomp reresolving call target every invocation

Nils Eliasson nils.eliasson at oracle.com
Tue Aug 15 14:18:42 UTC 2017


Thank you, Vladimir!

// Nils

On 2017-08-11 19:09, Vladimir Kozlov wrote:
> On 8/11/17 7:42 AM, Nils Eliasson wrote:
>> Hi Vladimir,
>>
>>
>> On 2017-08-07 18:42, Vladimir Kozlov wrote:
>>> Good.
>>>
>>> Question. Both, this and 8160543, bugs talk about C1 only. Does the 
>>> problem exist with C2 too? 
>>
>> The problem only exists with C1. The code is shared with C2, but C2 
>> won't be affected because it never tries to emit optimized calls to 
>> unloaded methods.
>>
>> (Static bound methods that are loaded have the is_optimized flag set 
>> - so they still become optimized calls)
>>
>>> Comments in compiledIC.cpp also talk about C1. Should we guard 
>>> 8160543 and this changes in compiledIC.cpp with
>>> if (method_code->is_compiled_by_c1()) ?
>>
>> No, I am removing the c1 specific parts, what's left is used by both.
>>
>> The static_bound argument isn't used anymore and can be removed from 
>> the function call:
>>
>> http://cr.openjdk.java.net/~neliasso/8169766/webrev.02/
>
> Good.
>
> Thanks,
> Vladimir
>
>>
>> If I put a diff of the two changes in this function together it 
>> becomes more clear why the first one was insufficient.
>>
>>
>> - if (static_bound || is_optimized) {
>> + if (is_optimized) {
>> entry = method_code->verified_entry_point();
>> } else {
>> entry = method_code->entry_point(); }
>> .... - info.set_compiled_entry(entry, (static_bound || is_optimized) 
>> ? NULL : receiver_klass, is_optimized);
>> + info.set_compiled_entry(entry, is_optimized ? NULL : 
>> receiver_klass, is_optimized);
>>
>>
>> Thanks for having a look,
>> Nils
>>
>>> Thanks, Vladimir On 8/7/17 7:16 AM, Nils Eliasson wrote:
>>>> Hi, Please review this patch. In bug 
>>>> https://bugs.openjdk.java.net/browse/JDK-8160543 I changed the 
>>>> behaviour for some calls in c1 generated code to make it comply 
>>>> with the VM-spec - LinkageError must be thrown before NPE. One 
>>>> detail was missed in that fix: Some calls, that was static bound 
>>>> and became optimized virtual calls, now became vanilla virtual 
>>>> calls. The virtual calls use the unverified entry, but for the 
>>>> static_bound calls the reciever_klass was not set making the 
>>>> receiver check fail on every invocation. This scenario is only 
>>>> common with Xcomp when methods are compiled that have call targets 
>>>> that have not been run earlier. Also a c1 thing, c2 uses 
>>>> uncommontraps for this case. Bug: 
>>>> https://bugs.openjdk.java.net/browse/JDK-8160543 Webrev: 
>>>> http://cr.openjdk.java.net/~neliasso/8169766/webrev.01/ Regards, 
>>>> Nils Eliasson 



More information about the hotspot-compiler-dev mailing list