RFR(XS) 8029446: assert(_cfg.get_block_for_node(proj) == borig) failed: incorrect block for kill projections
Vladimir Kozlov
vladimir.kozlov at oracle.com
Sat Dec 21 12:30:26 PST 2013
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