Request for review(XS): 7005241: C1: SEGV in java.util.concurrent.LinkedTransferQueue.xfer() with compressed oops
igor.veresov at oracle.com
Tue Dec 7 18:36:54 PST 2010
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.
>> Webrev: http://cr.openjdk.java.net/~iveresov/7005241/webrev.00
>> Tested with the failed nightly test.
More information about the hotspot-compiler-dev