Loop predication is only applied to predicates in the loop body that are always executed. Predicates are sometimes in a path in the loop body that's frequently but not always executed. In this case, applying loop predication would be beneficial.
JDK-8205888C2: consider all paths in loop body for loop predication
JDK-8235584UseProfiledLoopPredicate fails with assert(_phase->get_loop(c) == loop) failed: have to be in the same loop