RFR (S): 8164954: split_if creates empty phi and region nodes
vladimir.kozlov at oracle.com
Mon Mar 6 17:52:44 UTC 2017
On 3/6/17 6:15 AM, Nils Eliasson wrote:
> 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.
> Abort split_if when all in-edges are the same constant - this is already
> the desired state. It will be folded later.
> A big thank you to Richard Bäckman that helped me track this bug down.
More information about the hotspot-compiler-dev