RFR 8209626: [JVMCI] Use implicit exception table for dispatch and printing
Tom Rodriguez
tom.rodriguez at oracle.com
Thu May 30 18:27:49 UTC 2019
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