RFR 8224631 [lworld] C1 asserts - Could not resolve circular dependency

Tobias Hartmann tobias.hartmann at oracle.com
Mon May 27 09:36:20 UTC 2019


Hi Ioi,

this looks good to me.

Thanks,
Tobias

On 23.05.19 07:13, Ioi Lam wrote:
> https://bugs.openjdk.java.net/browse/JDK-8224631
> http://cr.openjdk.java.net/~iklam/valhalla/8224631-c1-assert-shuffle-value-args.v01/
> 
> The verified entry point of a C1-compiled method packs scalarized fields into buffered value
> objects. The assert happens when the fields of a value argument (rp4 in the following example) span
> across a reserved entry in the stack:
> 
>  test63(RefPoint_Access rpa, RefPoint rp1, RefPoint rp2, Number n1, RefPoint rp3, RefPoint rp4,
> Number n2) {}
> 
> (The only "Q" type is RefPoint)
> 
> [Verified Entry Point]
>   rsi:rsi   = (this)
>   rdx:rdx   = L RefPoint_Access rpa
>   rcx:rcx   = Q RefPoint rp1.x
>   r8:r8     = Q RefPoint rp1.y
>   r9:r9     = Q RefPoint rp2.x
>   rdi:rdi   = Q RefPoint rp2.x
>   [sp+0x50] = L Number n1
>   [sp+0x58] = [RESERVED]
>   [sp+0x60] = Q RefPoint rp3.x
>   [sp+0x68] = Q RefPoint rp3.y
>   [sp+0x70] = Q RefPoint rp4.x <<
>   [sp+0x78] = [RESERVED] <<<<<<<<<<<<<
>   [sp+0x80] = Q RefPoint rp4.y <<
>   [sp+0x88] = L Number n1
> 
> C1 does not use the RESREVED entries. The fix is to properly mark [sp+0x78] as writable, before we
> start shuffling. This is done in the new mark_reserved_entries_writable() method.
> 
> I also refactored the initialization of reg_state[] into a separate method, to make the code more
> manageable.
> 
> Thanks
> - Ioi
> 


More information about the valhalla-dev mailing list