src/share/vm/opto/superword.cpp

changeset 9776
ce42ae95d4d6
parent 9768
eaae2ae06faf
child 9806
758c07667682
child 9977
e649f2136368
equal deleted inserted replaced
9775:9b865b281711 9776:ce42ae95d4d6
2206 pre_opaq->set_req(1, constrained); 2206 pre_opaq->set_req(1, constrained);
2207 } 2207 }
2208 2208
2209 //----------------------------get_pre_loop_end--------------------------- 2209 //----------------------------get_pre_loop_end---------------------------
2210 // Find pre loop end from main loop. Returns null if none. 2210 // Find pre loop end from main loop. Returns null if none.
2211 CountedLoopEndNode* SuperWord::get_pre_loop_end(CountedLoopNode *cl) { 2211 CountedLoopEndNode* SuperWord::get_pre_loop_end(CountedLoopNode* cl) {
2212 Node *ctrl = cl->in(LoopNode::EntryControl); 2212 Node* ctrl = cl->in(LoopNode::EntryControl);
2213 if (!ctrl->is_IfTrue() && !ctrl->is_IfFalse()) return NULL; 2213 if (!ctrl->is_IfTrue() && !ctrl->is_IfFalse()) return NULL;
2214 Node *iffm = ctrl->in(0); 2214 Node* iffm = ctrl->in(0);
2215 if (!iffm->is_If()) return NULL; 2215 if (!iffm->is_If()) return NULL;
2216 Node *p_f = iffm->in(0); 2216 Node* bolzm = iffm->in(1);
2217 if (!bolzm->is_Bool()) return NULL;
2218 Node* cmpzm = bolzm->in(1);
2219 if (!cmpzm->is_Cmp()) return NULL;
2220 Node* opqzm = cmpzm->in(2);
2221 // Can not optimize a loop if zero-trip Opaque1 node is optimized
2222 // away and then another round of loop opts attempted.
2223 if (opqzm->Opcode() != Op_Opaque1) {
2224 return NULL;
2225 }
2226 Node* p_f = iffm->in(0);
2217 if (!p_f->is_IfFalse()) return NULL; 2227 if (!p_f->is_IfFalse()) return NULL;
2218 if (!p_f->in(0)->is_CountedLoopEnd()) return NULL; 2228 if (!p_f->in(0)->is_CountedLoopEnd()) return NULL;
2219 CountedLoopEndNode *pre_end = p_f->in(0)->as_CountedLoopEnd(); 2229 CountedLoopEndNode* pre_end = p_f->in(0)->as_CountedLoopEnd();
2220 CountedLoopNode* loop_node = pre_end->loopnode(); 2230 CountedLoopNode* loop_node = pre_end->loopnode();
2221 if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL; 2231 if (loop_node == NULL || !loop_node->is_pre_loop()) return NULL;
2222 return pre_end; 2232 return pre_end;
2223 } 2233 }
2224 2234

mercurial