Tiered compilation C2 compiler crash.

Vladimir Kozlov vladimir.kozlov at oracle.com
Sat Sep 20 01:10:49 UTC 2014


So the receiver is NULL pointer. It is strange.

What is call stack at that time? Is for_method_handle_inline() called 
from do_call() or from do_late_inline()?

Can you also show outputs of jvms->dump(), caller->print(), 
callee->print() ?

Thanks,
Vladimir


On 9/19/14 11:45 AM, MacGregor, Duncan (GE Energy Management) wrote:
> Sorry for the delay, lots of other stuff in progress right now. The
> fastdebug build with asserts was too slow to start the application with,
> so I made a debug build with asserts disabled.and got the following.
>
> --Node dump--
>   162    ConP    ===  0  [[ 163  171  218  265  272  286  311  359  399
> 408  474
>    481  525  570  577  591  615  663  703  711  468  739  754  770  769
> 801  857
>    865  865  1457  1467  1475  1892  1902  1910  2278  2360  2368  2404
> 2411  24
> 33  2470  2478  2485  2511  2517  2396  2653  2732  2740  2775  2782  2804
>   2841
>    2849  2856  2882  2888  2767  3079  3087  3518  3525  3568  3613  3620
> 3634
> 3658  3706  3745  3753  3817  3824  3867  3912  3919  3933  3957  4005
> 4044  40
> 52  3811  4080  4093  4107  4106  4137  4297  4305  4701  4788  4796  4831
>   4838
>    4860  4899  4907  4914  4942  4948  4823  5176  5186  5194  5653  5660
> 5703
> 5748  5755  5769  5793  5841  5880  5888  5952  5959  6002  6047  6054
> 6068  60
> 92  6140  6179  6187  5946  6215  6228  6242  6241  6272  6434  6444  6452
>   6911
>    6921  6929  7226  7224  7239  7239  7246  7317  7395  7403  7439  7446
> 7468
> 7505  7513  7520  7546  7552  7431  7750  7760  7768  8187  8194  8237
> 8282  82
> 89  8303  8327  8375  8414  8422  8486  8493  8536  8581  8588  8602  8626
>   8674
>    8713  8721  8480  8749  8762  8776  8775  8806  8954  8964  8972  9429
> 9439
> 9447  9744  9742  9756  9756  9763  9834  9912  9920  9956  9963  9985
> 10022  1
> 0030  10037  10063  10069  9948  10255  10265  10273  10731  10741  10749
> 11094
>    11138  11145  11066  11042  11173  11037  11180  11188  11190  11190
> 11192  1
> 1192  11187  11182  11200  11201  11209  11211  11215  11233  11235  11238
> ]]  #
> NULL
> --Type dump--
> NULL
> --Targer print--
> <ciMethod name=getWrappedSlotProvider
> holder=com/gesmallworld/magik/runtime/obje
> cts/SlottedProxy
> signature=(Ljava/lang/Integer;)Lcom/gesmallworld/magik/runtime/
> objects/SlotProvider; loaded=true arg_size=2 flags=public ident=1407
> address=0x0
> 00000005d7c3f70>
>
>  From grepping through type.cpp I¹m guessing the type is a TypePtr of some
> form, but dump() doesn¹t output much in the null case.
>
>
> One of my colleagues has also reported this issue with
> -XX:-TieredCompilation, and the error log shows the same offsets in
> jvm.dll so I¹m guessing tiered comp just lets me provoke the issue more
> quickly. I¹ve now found a faster route through the application to trigger
> this, so it¹s going to be much less painful to run any further tests you
> suggest.
>
> Cheers,
> Duncan.
>
> On 17/09/2014 17:53, "Vladimir Kozlov" <vladimir.kozlov at oracle.com> wrote:
>
>> Hi Duncan
>>
>> In debug version of VM there is Node::dump(n) method which prints ideal
>> nodes.
>> Can you show output of call receiver_node->dump(1)?
>> And also output of gvn.type(receiver_node)->dump() to see type in IGVN.
>> And target->print() which prints method descriptor.
>>
>> Thanks,
>> Vladimir
>>
>> On 9/17/14 2:30 AM, MacGregor, Duncan (GE Energy Management) wrote:
>>> We¹ve been seeing many cases of a C2 compiler crash which is happening
>>> on 8u20 with tiered compilation and heavy use of invokeDynamic. It is
>>> somewhat intermittent but the same method is always at the end of the
>>> compilation replay log, and it is always happening at the same spot on
>>> jvm.dll.
>>>
>>> I¹ve done some work on narrowing down the problem and it appears that
>>> it¹s occurring in CallGenerator.for_method_handle_inline() line 856
>>> where it retrieves the receiver type from the PhaseGVN. It assumes that
>>> the receiver is an ooopptr, but the type I¹m getting back is actually an
>>> anyptr so the isa_oopptr() method returns null, and I then get an access
>>> violation at line 865 when the code attempts to call speculate_type().
>>>
>>> Is it ever valid for a non-oop ptr to be the receiver type, and if not
>>> does anybody have a good suggestion for where to try and catch this type
>>> being put into the PhaseGVN?
>>>
>>> Thanks, Duncan.
>>>
>


More information about the hotspot-compiler-dev mailing list