7107042: assert(no_dead_loop) failed: dead loop detected

Use dead nodes elimination code in PhaseIdealLoop before executing EA.

Reviewed-by: never, twisti
This commit is contained in:
Vladimir Kozlov 2011-11-09 07:25:51 -08:00
parent dc1f4fe50e
commit 09b7902e14
9 changed files with 57 additions and 23 deletions

View file

@ -1883,7 +1883,7 @@ void PhaseIdealLoop::eliminate_useless_predicates() {
//----------------------------build_and_optimize-------------------------------
// Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to
// its corresponding LoopNode. If 'optimize' is true, do some loop cleanups.
void PhaseIdealLoop::build_and_optimize(bool do_split_ifs) {
void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts) {
ResourceMark rm;
int old_progress = C->major_progress();
@ -2072,6 +2072,16 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs) {
}
#endif
if (skip_loop_opts) {
// Cleanup any modified bits
_igvn.optimize();
if (C->log() != NULL) {
log_loop_tree(_ltree_root, _ltree_root, C->log());
}
return;
}
if (ReassociateInvariants) {
// Reassociate invariants and prep for split_thru_phi
for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {