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 |