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 |