RFR(XS) 8029446: assert(_cfg.get_block_for_node(proj) == borig) failed: incorrect block for kill projections
Niclas Adlertz
niclas.adlertz at oracle.com
Wed Dec 18 06:31:22 PST 2013
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