src/share/vm/opto/loopUnswitch.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/loopUnswitch.cpp Fri Sep 25 16:46:45 2015
--- new/src/share/vm/opto/loopUnswitch.cpp Fri Sep 25 16:46:44 2015
*** 130,140 ****
--- 130,140 ----
// Need to revert back to normal loop
if (head->is_CountedLoop() && !head->as_CountedLoop()->is_normal_loop()) {
head->as_CountedLoop()->set_normal_loop();
}
! ProjNode* proj_true = create_slow_version_of_loop(loop, old_new, unswitch_iff->Opcode());
#ifdef ASSERT
Node* uniqc = proj_true->unique_ctrl_out();
Node* entry = head->in(LoopNode::EntryControl);
Node* predicate = find_predicate(entry);
*** 220,230 ****
--- 220,231 ----
//-------------------------create_slow_version_of_loop------------------------
// Create a slow version of the loop by cloning the loop
// 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);
_igvn.rehash_node_delayed(entry);
IdealLoopTree* outer_loop = loop->_parent;
*** 233,243 ****
--- 234,245 ----
set_ctrl(cont, C->root());
Node* opq = new Opaque1Node(C, cont);
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));
ProjNode* ifslow = new IfFalseNode(iff);
register_node(ifslow, outer_loop, iff, dom_depth(iff));
src/share/vm/opto/loopUnswitch.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File