7039586: test/java/util/Collections/Rotate.java failing with hs21-b09
Summary: A predicate should not be moved in partial peel optimization since it will invalidate jvm state of its uncommon trap.
Reviewed-by: never
--- a/hotspot/src/share/vm/opto/loopopts.cpp Mon Apr 25 16:25:58 2011 -0700
+++ b/hotspot/src/share/vm/opto/loopopts.cpp Tue Apr 26 12:14:22 2011 -0700
@@ -2262,6 +2262,9 @@
// stmt1
// |
// v
+// loop predicate
+// |
+// v
// stmt2 clone
// |
// v
@@ -2272,9 +2275,6 @@
// : false true
// : | |
// : | v
-// : | loop predicate
-// : | |
-// : | v
// : | newloop<-----+
// : | | |
// : | stmt3 clone |
@@ -2330,7 +2330,6 @@
}
}
- Node* entry = head->in(LoopNode::EntryControl);
int dd = dom_depth(head);
// Step 1: find cut point
@@ -2627,8 +2626,6 @@
// Backedge of the surviving new_head (the clone) is original last_peel
_igvn.hash_delete(new_head_clone);
- Node* new_entry = move_loop_predicates(entry, new_head_clone->in(LoopNode::EntryControl));
- new_head_clone->set_req(LoopNode::EntryControl, new_entry);
new_head_clone->set_req(LoopNode::LoopBackControl, last_peel);
_igvn._worklist.push(new_head_clone);