--- a/hotspot/src/share/vm/opto/loopUnswitch.cpp Mon Nov 09 22:43:30 2015 +0000
+++ b/hotspot/src/share/vm/opto/loopUnswitch.cpp Mon Nov 09 11:28:31 2015 +0100
@@ -132,7 +132,7 @@
head->as_CountedLoop()->set_normal_loop();
}
- ProjNode* proj_true = create_slow_version_of_loop(loop, old_new);
+ ProjNode* proj_true = create_slow_version_of_loop(loop, old_new, unswitch_iff->Opcode());
#ifdef ASSERT
Node* uniqc = proj_true->unique_ctrl_out();
@@ -222,7 +222,8 @@
// and inserting an if to select fast-slow versions.
// Return control projection of the entry to the fast version.
ProjNode* PhaseIdealLoop::create_slow_version_of_loop(IdealLoopTree *loop,
- Node_List &old_new) {
+ Node_List &old_new,
+ int opcode) {
LoopNode* head = loop->_head->as_Loop();
bool counted_loop = head->is_CountedLoop();
Node* entry = head->in(LoopNode::EntryControl);
@@ -235,7 +236,8 @@
register_node(opq, outer_loop, entry, dom_depth(entry));
Node *bol = new Conv2BNode(opq);
register_node(bol, outer_loop, entry, dom_depth(entry));
- IfNode* iff = new IfNode(entry, bol, PROB_MAX, COUNT_UNKNOWN);
+ IfNode* iff = (opcode == Op_RangeCheck) ? new RangeCheckNode(entry, bol, PROB_MAX, COUNT_UNKNOWN) :
+ new IfNode(entry, bol, PROB_MAX, COUNT_UNKNOWN);
register_node(iff, outer_loop, entry, dom_depth(entry));
ProjNode* iffast = new IfTrueNode(iff);
register_node(iffast, outer_loop, iff, dom_depth(iff));