[9] RFR (S): 8164954: split_if creates empty phi and region nodes

Nils Eliasson nils.eliasson at oracle.com
Mon Mar 6 14:15:14 UTC 2017


Hi,

Please review.

The test runtime/Metaspace/FragmentMetaspace.java triggered an assert 
(assert(i < _max) failed: oob: i=1, _max=1) when Node::dominates reads 
in[] out of bounds on a empty region node.

The empty region node is created by split_if. Split_if tries to simplify 
compares on a constant and a phi, where the phi has at least one 
constant on an in edge. In this case the opportunity for optimization is 
identified, and a phi and accompanying region node is created for all 
remaining in-edges that aren't matching the constant. But here all the 
in-edges to the phi matches the constant, and no edge will be split out, 
leaving the new nodes without in-edges. Much later in the optimization 
phase the empty region node will trigger the assert.

Solution:
Abort split_if when all in-edges are the same constant - this is already 
the desired state. It will be folded later.

https://bugs.openjdk.java.net/browse/JDK-8164954
http://cr.openjdk.java.net/~neliasso/8164954/webrev/

A big thank you to Richard Bäckman that helped me track this bug down.

Regards,
Nils
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20170306/6835f895/attachment.html>


More information about the hotspot-compiler-dev mailing list