RFR(XS) 8029446: assert(_cfg.get_block_for_node(proj) == borig) failed: incorrect block for kill projections

Niclas Adlertz niclas.adlertz at oracle.com
Tue Jan 7 03:20:39 PST 2014


Hi Vladimir,

Thank you for looking at this.

http://cr.openjdk.java.net/~adlertz/JDK-8029446/webrev01/

Kind Regards,
Niclas Adlertz

On 2013-12-21 21:30, Vladimir Kozlov wrote:
> Niclas,
>
> The code should not be platform specific (ppc64 may have the same 
> problem). The code should be conditional on if base has (one or 
> several when node kills flags and regs) projection nodes and to be 
> similar to code in PhaseChaitin::clone_projs() except cloning. You 
> also forgot to add new live range for projection node.
>
> Regards,
> Vladimir
>
> On 12/18/13 6:31 AM, Niclas Adlertz wrote:
>> Hi Chris, thank you for taking a look at this.
>>
>>> Why is it AMD64 only?
>>
>>  From what I can tell by the ad-files;
>>
>> src/cpu/sparc/vm/sparc.ad
>> src/cpu/x86/vm/x86_64.ad
>> src/cpu/x86/vm/x86_32.ad
>> src/cpu/x86/vm/x86.ad
>>
>> Only x86_64.ad contains something related to kill projections (the 
>> RFLAGS register) for the loadConP0:
>> instruct loadConP0(rRegP dst, immP0 src, rFlagsReg cr)
>>
>> Whereas sparc.ad looks like:
>> instruct loadConP0(iRegP dst, immP0 src) %{
>>
>> and x64.ad and x86_32.ad don't contain any definition of loadConP0.
>>
>> When running a method generating a loadConP0, on x64 I see:
>>
>> 9 loadConP0 === 1 [[ 10 2 ]] NULL
>>
>> 10 MachProj === 9 [[]] #1
>>
>>
>> But on SPARC I only see:
>>
>> 9 loadConP0 === 1 [[ 2 ]] NULL
>>
>>
>>
>> Do you have another opinion on this?
>>
>>> Can you please add the investigation to the bug report as well?
>>>
>>>
>> Sure!
>>
>> Kind Regards,
>> Niclas Adlertz
>>
>>
>> On 2013-12-17 19:06, Christian Thalinger wrote:
>>> Why is it AMD64 only?  Can you please add the investigation to the 
>>> bug report as well?
>>>
>>> On Dec 17, 2013, at 6:50 AM, Niclas Adlertz 
>>> <niclas.adlertz at oracle.com> wrote:
>>>
>>>> Hi all,
>>>>
>>>> Problem:
>>>> In this crash we are trying to re-materialize a loadConP0 node. 
>>>> When cloning it, we also want to clone its kill
>>>> projection node (if any) and we check that the kill projection node 
>>>> is in the same block as the loadConP0 node. The
>>>> problem is that the kill projection node is never added to the 
>>>> loadConP0 node's block when it is created so we end up
>>>> failing the assert.
>>>>
>>>> Solution:
>>>> Add the kill projection node to the same block as the loadConP0 
>>>> node during creation.
>>>>
>>>> Kind Regards,
>>>> Niclas Adlertz
>>>>
>>>> BUG: https://bugs.openjdk.java.net/browse/JDK-8029446
>>>> WEBREV: http://cr.openjdk.java.net/~adlertz/JDK-8029446/webrev00/
>>>>
>>



More information about the hotspot-compiler-dev mailing list