1376 } 1377 } 1378 1379 uint use_op = use->Opcode(); 1380 // If changed Cast input, check Phi users for simple cycles 1381 if( use->is_ConstraintCast() || use->is_CheckCastPP() ) { 1382 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1383 Node* u = use->fast_out(i2); 1384 if (u->is_Phi()) 1385 _worklist.push(u); 1386 } 1387 } 1388 // If changed LShift inputs, check RShift users for useless sign-ext 1389 if( use_op == Op_LShiftI ) { 1390 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1391 Node* u = use->fast_out(i2); 1392 if (u->Opcode() == Op_RShiftI) 1393 _worklist.push(u); 1394 } 1395 } 1396 // If changed AddP inputs, check Stores for loop invariant 1397 if( use_op == Op_AddP ) { 1398 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1399 Node* u = use->fast_out(i2); 1400 if (u->is_Mem()) 1401 _worklist.push(u); 1402 } 1403 } 1404 // If changed initialization activity, check dependent Stores 1405 if (use_op == Op_Allocate || use_op == Op_AllocateArray) { 1406 InitializeNode* init = use->as_Allocate()->initialization(); 1407 if (init != NULL) { 1408 Node* imem = init->proj_out(TypeFunc::Memory); 1409 if (imem != NULL) add_users_to_worklist0(imem); 1410 } 1411 } 1412 if (use_op == Op_Initialize) { 1413 Node* imem = use->as_Initialize()->proj_out(TypeFunc::Memory); 1414 if (imem != NULL) add_users_to_worklist0(imem); 1415 } | 1376 } 1377 } 1378 1379 uint use_op = use->Opcode(); 1380 // If changed Cast input, check Phi users for simple cycles 1381 if( use->is_ConstraintCast() || use->is_CheckCastPP() ) { 1382 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1383 Node* u = use->fast_out(i2); 1384 if (u->is_Phi()) 1385 _worklist.push(u); 1386 } 1387 } 1388 // If changed LShift inputs, check RShift users for useless sign-ext 1389 if( use_op == Op_LShiftI ) { 1390 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1391 Node* u = use->fast_out(i2); 1392 if (u->Opcode() == Op_RShiftI) 1393 _worklist.push(u); 1394 } 1395 } 1396 // If changed AddI/SubI inputs, check CmpU for range check optimization. 1397 if (use_op == Op_AddI || use_op == Op_SubI) { 1398 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1399 Node* u = use->fast_out(i2); 1400 if (u->is_Cmp() && (u->Opcode() == Op_CmpU)) { 1401 _worklist.push(u); 1402 } 1403 } 1404 } 1405 // If changed AddP inputs, check Stores for loop invariant 1406 if( use_op == Op_AddP ) { 1407 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1408 Node* u = use->fast_out(i2); 1409 if (u->is_Mem()) 1410 _worklist.push(u); 1411 } 1412 } 1413 // If changed initialization activity, check dependent Stores 1414 if (use_op == Op_Allocate || use_op == Op_AllocateArray) { 1415 InitializeNode* init = use->as_Allocate()->initialization(); 1416 if (init != NULL) { 1417 Node* imem = init->proj_out(TypeFunc::Memory); 1418 if (imem != NULL) add_users_to_worklist0(imem); 1419 } 1420 } 1421 if (use_op == Op_Initialize) { 1422 Node* imem = use->as_Initialize()->proj_out(TypeFunc::Memory); 1423 if (imem != NULL) add_users_to_worklist0(imem); 1424 } |