Mercurial > hg > graal-jvmci-8
diff src/share/vm/c1/c1_Optimizer.cpp @ 4764:e5ac210043cd
7123108: C1: assert(if_state != NULL) failed: states do not match up
Summary: In CEE, ensure if and common successor state are at the same inline level
Reviewed-by: never
author | roland |
---|---|
date | Thu, 22 Dec 2011 10:55:53 +0100 |
parents | 7bca37d28f32 |
children | 701a83c86f28 |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_Optimizer.cpp Tue Dec 20 16:56:50 2011 +0100 +++ b/src/share/vm/c1/c1_Optimizer.cpp Thu Dec 22 10:55:53 2011 +0100 @@ -125,9 +125,16 @@ // inlining depths must match ValueStack* if_state = if_->state(); ValueStack* sux_state = sux->state(); - while (sux_state->scope() != if_state->scope()) { - if_state = if_state->caller_state(); - assert(if_state != NULL, "states do not match up"); + if (if_state->scope()->level() > sux_state->scope()->level()) { + while (sux_state->scope() != if_state->scope()) { + if_state = if_state->caller_state(); + assert(if_state != NULL, "states do not match up"); + } + } else if (if_state->scope()->level() < sux_state->scope()->level()) { + while (sux_state->scope() != if_state->scope()) { + sux_state = sux_state->caller_state(); + assert(sux_state != NULL, "states do not match up"); + } } if (sux_state->stack_size() <= if_state->stack_size()) return;