< prev index next >

src/share/vm/opto/loopnode.cpp

Print this page




3477     case Op_ModF:
3478     case Op_ModD:
3479     case Op_LoadB:              // Same with Loads; they can sink
3480     case Op_LoadUB:             // during loop optimizations.
3481     case Op_LoadUS:
3482     case Op_LoadD:
3483     case Op_LoadF:
3484     case Op_LoadI:
3485     case Op_LoadKlass:
3486     case Op_LoadNKlass:
3487     case Op_LoadL:
3488     case Op_LoadS:
3489     case Op_LoadP:
3490     case Op_LoadN:
3491     case Op_LoadRange:
3492     case Op_LoadD_unaligned:
3493     case Op_LoadL_unaligned:
3494     case Op_StrComp:            // Does a bunch of load-like effects
3495     case Op_StrEquals:
3496     case Op_StrIndexOf:

3497     case Op_AryEq:

3498       pinned = false;
3499     }
3500     if( pinned ) {
3501       IdealLoopTree *chosen_loop = get_loop(n->is_CFG() ? n : get_ctrl(n));
3502       if( !chosen_loop->_child )       // Inner loop?
3503         chosen_loop->_body.push(n); // Collect inner loops
3504       return;
3505     }
3506   } else {                      // No slot zero
3507     if( n->is_CFG() ) {         // CFG with no slot 0 is dead
3508       _nodes.map(n->_idx,0);    // No block setting, it's globally dead
3509       return;
3510     }
3511     assert(!n->is_CFG() || n->outcnt() == 0, "");
3512   }
3513 
3514   // Do I have a "safe range" I can select over?
3515   Node *early = get_ctrl(n);// Early location already computed
3516 
3517   // Compute latest point this Node can go




3477     case Op_ModF:
3478     case Op_ModD:
3479     case Op_LoadB:              // Same with Loads; they can sink
3480     case Op_LoadUB:             // during loop optimizations.
3481     case Op_LoadUS:
3482     case Op_LoadD:
3483     case Op_LoadF:
3484     case Op_LoadI:
3485     case Op_LoadKlass:
3486     case Op_LoadNKlass:
3487     case Op_LoadL:
3488     case Op_LoadS:
3489     case Op_LoadP:
3490     case Op_LoadN:
3491     case Op_LoadRange:
3492     case Op_LoadD_unaligned:
3493     case Op_LoadL_unaligned:
3494     case Op_StrComp:            // Does a bunch of load-like effects
3495     case Op_StrEquals:
3496     case Op_StrIndexOf:
3497     case Op_StrIndexOfChar:
3498     case Op_AryEq:
3499     case Op_HasNegatives:
3500       pinned = false;
3501     }
3502     if( pinned ) {
3503       IdealLoopTree *chosen_loop = get_loop(n->is_CFG() ? n : get_ctrl(n));
3504       if( !chosen_loop->_child )       // Inner loop?
3505         chosen_loop->_body.push(n); // Collect inner loops
3506       return;
3507     }
3508   } else {                      // No slot zero
3509     if( n->is_CFG() ) {         // CFG with no slot 0 is dead
3510       _nodes.map(n->_idx,0);    // No block setting, it's globally dead
3511       return;
3512     }
3513     assert(!n->is_CFG() || n->outcnt() == 0, "");
3514   }
3515 
3516   // Do I have a "safe range" I can select over?
3517   Node *early = get_ctrl(n);// Early location already computed
3518 
3519   // Compute latest point this Node can go


< prev index next >