Request for review(XS): 7005241: C1: SEGV in java.util.concurrent.LinkedTransferQueue.xfer() with compressed oops
Igor Veresov
igor.veresov at oracle.com
Tue Dec 7 21:37:10 PST 2010
Thanks, Tom and Vladimir!
igor
On 12/7/10 8:59 PM, Tom Rodriguez wrote:
>
> On Dec 7, 2010, at 6:36 PM, Igor Veresov wrote:
>
>> On 12/7/10 5:48 PM, Tom Rodriguez wrote:
>>>
>>> On Dec 7, 2010, at 5:11 PM, Igor Veresov wrote:
>>>
>>>> Implementation of the CAS primitive for x64 compressed oops was incorrect. It kills rscratch2 register (r11), which is allocatable in C1. Also, we don't need to restore cmpval as it's never used after that, so we need only one temporary register, which can be scratch1.
>>>
>>> You can't just kill cmpval without telling the allocator. I'm actually a little unclear why we don't get into trouble with the existing code about that since cmpxchg kills rax if compare fails. I don't see anything that indicates that cmpval is killed. Does the load_item_force somehow keep us from reusing cmpval afterwards?
>>>
>>
>> I guess when the allocator is visiting this instruction, cmpval would be marked as temp (c1_LIR.cpp:879)? And newval too, actually, but we need newval for the post-barrier.
>
> I looked at the code before I sent the mail but my mind did something weird with the indentation and I thought a bunch of that was guarded by the info test. Anyway, it looks good.
>
> tom
>
>>
>> igor
>>
>>> tom
>>>
>>>>
>>>> Webrev: http://cr.openjdk.java.net/~iveresov/7005241/webrev.00
>>>>
>>>> Tested with the failed nightly test.
>>>>
>>>> Thanks,
>>>> igor
>>>>
>>>
>>
>
More information about the hotspot-compiler-dev
mailing list