RFR 8209626: [JVMCI] Use implicit exception table for dispatch and printing

Tom Rodriguez tom.rodriguez at oracle.com
Fri May 31 21:19:45 UTC 2019


>> By the way the new PrintNMethods default output seems awful.  No 
>> comments at all by default and the labels marking the Entry Point seem 
>> to be totally disconnected.  The alignment is kind of screwy too.
>>
>>    0x00000001230c3a12:   jle    0x00000001230c3a5a
>> ;*if_icmplt {reexecute=0 rethrow=0 return_oop=0}
>> ; - java.lang.StringLatin1::charAt at 7 (line 47)
>> ; - java.lang.String::charAt at 12 (line 708)
>>    0x00000001230c3a18:   cmp    r10d,edx
> 
> Strange, Lutz fixed output recently for 8213084. Can you try 
> PrintAssembly instead? May his changes affect PrintNMethods in wrong way.

I don't see any differences between those.  From digging into the code a 
bit more it looks like I have to add 
-XX:PrintAssemblyOptions=show-comments,show-block-comments to get 
something that looks like the old output.  Why aren't these on by 
default?  I think I need to adjust my move_to calls to match the 
existing code, but the show-comments output still seems awfully far to 
the left.  Oddly it's further to left than a block comment.  Maybe it's 
a problem with the _post_decode_alignment alignment?  It seems like 
that's only recalculated in one place that I think is kind of 
unreachable or not commonly reached.

tom

> 
> Thanks,
> Vladimir
> 
>>
>> tom
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 5/30/19 11:27 AM, Tom Rodriguez wrote:
>>>> I have updated this webrev to include fixes to AOT to properly 
>>>> capture the implicit exception table and record the offset for it in 
>>>> the AOT binary.  It required minor Graal changes which I will push 
>>>> upstream separately.  Please rereview.
>>>>
>>>> tom
>>>>
>>>> Tom Rodriguez wrote on 12/12/18 11:22 PM:
>>>>>
>>>>>
>>>>> Vladimir Kozlov wrote on 12/12/18 2:29 PM:
>>>>>> On 12/12/18 1:06 PM, Tom Rodriguez wrote:
>>>>>>> They all look like preexisting failures to me.  The 
>>>>>>> CheckGraalIntrinsics one you mentioned in chat and 
>>>>>>
>>>>>> yes
>>>>>>
>>>>>>> compiler/aot/DeoptimizationTest.java which seems to have been 
>>>>>>> failing at least intermittently for a while.  What do you think?
>>>>>>
>>>>>> SIGFPE is new. And I think your changes in sharedRuntime.cpp may 
>>>>>> affected execution of AOT methods because they are marked as 
>>>>>> compiled by Graal (compiler_jvmci):
>>>>>>
>>>>>> http://hg.openjdk.java.net/jdk/jdk/file/9e28eff3d40f/src/hotspot/share/aot/aotCompiledMethod.hpp#l131 
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Yes I think I need to move some code around to properly support 
>>>>> AOT. I'll send out an updated webrev soon but I think we can defer 
>>>>> this one until jdk 13.
>>>>>
>>>>> tom
>>>>>
>>>>>>
>>>>>>
>>>>>> Vladimir
>>>>>>
>>>>>>>
>>>>>>> It does make me wonder if AOT needs any extra support to use the 
>>>>>>> implicit exception table.  I would assume we'd be seeing problems 
>>>>>>> if that was the case but don't really know.
>>>>>>>
>>>>>>> tom
>>>>>>>
>>>>>>> Vladimir Kozlov wrote on 12/12/18 11:12 AM:
>>>>>>>> Tom,
>>>>>>>>
>>>>>>>> Some tests failed.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Vladimir
>>>>>>>>
>>>>>>>> On 12/12/18 10:42 AM, Tom Rodriguez wrote:
>>>>>>>>> http://cr.openjdk.java.net/~never/8209626/webrev
>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8209626
>>>>>>>>>
>>>>>>>>> Graal handles implicit exceptions by deoptimizing and that's 
>>>>>>>>> currently done in a way that's hard to understand from the 
>>>>>>>>> PrintNMethods output. Basically there's just an extra PcDesc at 
>>>>>>>>> the implicit check location and the runtime assumes that a 
>>>>>>>>> fault with a PcDesc underneath it an implicit check.  This 
>>>>>>>>> changes JVMCI to use the implicit exception table to mark these 
>>>>>>>>> locations specially which simplifies the dispatching and 
>>>>>>>>> printing.  The new print output looks like this:
>>>>>>>>>
>>>>>>>>>    0x0000000120f053a0: mov    DWORD PTR [rsp-0x14000],eax
>>>>>>>>>    0x0000000120f053a7: sub    rsp,0x18
>>>>>>>>>    0x0000000120f053ab: mov    QWORD PTR [rsp+0x10],rbp 
>>>>>>>>> ;*aload_0 {reexecute=1 rethrow=0 return_oop=0}
>>>>>>>>>                                                              ; 
>>>>>>>>> - java.lang.StringLatin1::equals at 0 (line 94)
>>>>>>>>>
>>>>>>>>>    0x0000000120f053b0: mov    eax,DWORD PTR [rsi+0xc]        ; 
>>>>>>>>> implicit exception: deoptimizes
>>>>>>>>>                                                              ; 
>>>>>>>>> ImmutableOopMap{rdx=Oop rsi=Oop }
>>>>>>>>> ;*aload_0 {reexecute=1 rethrow=0 return_oop=0}
>>>>>>>>>                                                              ; 
>>>>>>>>> - java.lang.StringLatin1::equals at 0 (line 94)
>>>>>>>>>
>>>>>>>>>    0x0000000120f053b3: mov    r10d,DWORD PTR [rdx+0xc]       ; 
>>>>>>>>> implicit exception: deoptimizes
>>>>>>>>>                                                              ; 
>>>>>>>>> ImmutableOopMap{rdx=Oop rsi=Oop }
>>>>>>>>>
>>>>>>>>> The scope information is still printed in the normal original 
>>>>>>>>> location. This has been in use with JVMCI 8 for several months.
>>>>>>>>>
>>>>>>>>> tom


More information about the hotspot-compiler-dev mailing list