[14] RFR(S): 8233656: assert(d->is_CFG() && n->is_CFG()) failed: must have CFG nodes

Tobias Hartmann tobias.hartmann at oracle.com
Tue Nov 12 09:14:05 UTC 2019


Hi Vladimir,

On 11.11.19 13:06, Vladimir Ivanov wrote:
> Yes, I'm curious whether it's enough to check that in(0) is NULL, TOP, or Proj(_, TOP). Are there
> any other important cases left?

I don't think in(0) == NULL can/should happen and I don't think there are any other cases left.

> My concerns is that other usages of PhaseGVN::is_dominator() may be affected the same way as well.

The method currently has two implementations:
- PhaseIdealLoop::is_dominator
- PhaseGVN/PhaseIterGVN:is_dominator -> PhaseGVN::is_dominator_helper

Both assert is_CFG() for the arguments so it's the callers responsibility to ensure that.

> It looks like PhaseGVN::is_dominator_helper() would benefit from additional checks:
> 
> bool PhaseGVN::is_dominator_helper(Node *d, Node *n, bool linear_only) {
>   if (d->is_top() || n->is_top()) {
>     return false;
>   }
>   assert(d->is_CFG() && n->is_CFG(), "must have CFG nodes");
>   ...

Do you mean simply converting the assert to a check or adding additional asserts?

> As an example, InitializeNode::detect_init_independence() does some control normalization first:

Yes but that method processes data and control edges.

Thanks,
Tobias


More information about the hotspot-compiler-dev mailing list