src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8148754 Cdiff src/share/vm/opto/superword.cpp

src/share/vm/opto/superword.cpp

Print this page

        

*** 3072,3096 **** } //----------------------------get_pre_loop_end--------------------------- // Find pre loop end from main loop. Returns null if none. CountedLoopEndNode* SuperWord::get_pre_loop_end(CountedLoopNode* cl) { ! Node* ctrl = cl->in(LoopNode::EntryControl); ! if (!ctrl->is_IfTrue() && !ctrl->is_IfFalse()) return NULL; ! Node* iffm = ctrl->in(0); ! if (!iffm->is_If()) return NULL; ! Node* bolzm = iffm->in(1); ! if (!bolzm->is_Bool()) return NULL; ! Node* cmpzm = bolzm->in(1); ! if (!cmpzm->is_Cmp()) return NULL; ! Node* opqzm = cmpzm->in(2); ! // Can not optimize a loop if zero-trip Opaque1 node is optimized ! // away and then another round of loop opts attempted. ! if (opqzm->Opcode() != Op_Opaque1) { return NULL; } ! Node* p_f = iffm->in(0); if (!p_f->is_IfFalse()) return NULL; if (!p_f->in(0)->is_CountedLoopEnd()) return NULL; CountedLoopEndNode* pre_end = p_f->in(0)->as_CountedLoopEnd(); CountedLoopNode* loop_node = pre_end->loopnode(); if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL; --- 3072,3088 ---- } //----------------------------get_pre_loop_end--------------------------- // Find pre loop end from main loop. Returns null if none. CountedLoopEndNode* SuperWord::get_pre_loop_end(CountedLoopNode* cl) { ! // The loop cannot be optimized if the graph shape at ! // the loop entry is inappropriate. ! if (!_phase->is_canonical_main_loop_entry(cl)) { return NULL; } ! ! Node* p_f = cl->in(LoopNode::EntryControl)->in(0)->in(0); if (!p_f->is_IfFalse()) return NULL; if (!p_f->in(0)->is_CountedLoopEnd()) return NULL; CountedLoopEndNode* pre_end = p_f->in(0)->as_CountedLoopEnd(); CountedLoopNode* loop_node = pre_end->loopnode(); if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL;
src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File