2240 // : | v v |
2241 // : | false true |
2242 // : | | | |
2243 // : | v stmt2 |
2244 // : | exitB: | |
2245 // : | stmt4 v |
2246 // : | ifA orig |
2247 // : | / \ |
2248 // : | / \ |
2249 // : | v v |
2250 // : | false true |
2251 // : | / \ |
2252 // : v v -----+
2253 // RegionA
2254 // |
2255 // v
2256 // exitA
2257 //
2258 bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
2259
2260 LoopNode *head = loop->_head->as_Loop();
2261
2262 if (head->is_partial_peel_loop() || head->partial_peel_has_failed()) {
2263 return false;
2264 }
2265
2266 // Check for complex exit control
2267 for(uint ii = 0; ii < loop->_body.size(); ii++ ) {
2268 Node *n = loop->_body.at(ii);
2269 int opc = n->Opcode();
2270 if (n->is_Call() ||
2271 opc == Op_Catch ||
2272 opc == Op_CatchProj ||
2273 opc == Op_Jump ||
2274 opc == Op_JumpProj) {
2275 #if !defined(PRODUCT)
2276 if (TracePartialPeeling) {
2277 tty->print_cr("\nExit control too complex: lp: %d", head->_idx);
2278 }
2279 #endif
|
2240 // : | v v |
2241 // : | false true |
2242 // : | | | |
2243 // : | v stmt2 |
2244 // : | exitB: | |
2245 // : | stmt4 v |
2246 // : | ifA orig |
2247 // : | / \ |
2248 // : | / \ |
2249 // : | v v |
2250 // : | false true |
2251 // : | / \ |
2252 // : v v -----+
2253 // RegionA
2254 // |
2255 // v
2256 // exitA
2257 //
2258 bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
2259
2260 if (!loop->_head->is_Loop()) {
2261 return false;
2262 }
2263
2264 LoopNode *head = loop->_head->as_Loop();
2265
2266 if (head->is_partial_peel_loop() || head->partial_peel_has_failed()) {
2267 return false;
2268 }
2269
2270 // Check for complex exit control
2271 for(uint ii = 0; ii < loop->_body.size(); ii++ ) {
2272 Node *n = loop->_body.at(ii);
2273 int opc = n->Opcode();
2274 if (n->is_Call() ||
2275 opc == Op_Catch ||
2276 opc == Op_CatchProj ||
2277 opc == Op_Jump ||
2278 opc == Op_JumpProj) {
2279 #if !defined(PRODUCT)
2280 if (TracePartialPeeling) {
2281 tty->print_cr("\nExit control too complex: lp: %d", head->_idx);
2282 }
2283 #endif
|