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

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Aug 11 17:09:15 UTC 2017


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