455 } 456 457 // Add users of 'n' to worklist 458 void add_users_to_worklist0( Node *n ); 459 void add_users_to_worklist ( Node *n ); 460 461 // Replace old node with new one. 462 void replace_node( Node *old, Node *nn ) { 463 add_users_to_worklist(old); 464 hash_delete(old); // Yank from hash before hacking edges 465 subsume_node(old, nn); 466 } 467 468 bool delay_transform() const { return _delay_transform; } 469 470 void set_delay_transform(bool delay) { 471 _delay_transform = delay; 472 } 473 474 // Clone loop predicates. Defined in loopTransform.cpp. 475 Node* clone_loop_predicates(Node* old_entry, Node* new_entry); 476 Node* move_loop_predicates(Node* old_entry, Node* new_entry); 477 // Create a new if below new_entry for the predicate to be cloned 478 ProjNode* create_new_if_for_predicate(ProjNode* cont_proj, Node* new_entry, 479 Deoptimization::DeoptReason reason); 480 481 #ifndef PRODUCT 482 protected: 483 // Sub-quadratic implementation of VerifyIterativeGVN. 484 unsigned long _verify_counter; 485 unsigned long _verify_full_passes; 486 enum { _verify_window_size = 30 }; 487 Node* _verify_window[_verify_window_size]; 488 void verify_step(Node* n); 489 #endif 490 }; 491 492 //------------------------------PhaseCCP--------------------------------------- 493 // Phase for performing global Conditional Constant Propagation. 494 // Should be replaced with combined CCP & GVN someday. 495 class PhaseCCP : public PhaseIterGVN { 496 // Non-recursive. Use analysis to transform single Node. | 455 } 456 457 // Add users of 'n' to worklist 458 void add_users_to_worklist0( Node *n ); 459 void add_users_to_worklist ( Node *n ); 460 461 // Replace old node with new one. 462 void replace_node( Node *old, Node *nn ) { 463 add_users_to_worklist(old); 464 hash_delete(old); // Yank from hash before hacking edges 465 subsume_node(old, nn); 466 } 467 468 bool delay_transform() const { return _delay_transform; } 469 470 void set_delay_transform(bool delay) { 471 _delay_transform = delay; 472 } 473 474 // Clone loop predicates. Defined in loopTransform.cpp. 475 Node* clone_loop_predicates(Node* old_entry, Node* new_entry, bool clone_limit_check); 476 Node* move_loop_predicates(Node* old_entry, Node* new_entry, bool clone_limit_check); 477 // Create a new if below new_entry for the predicate to be cloned 478 ProjNode* create_new_if_for_predicate(ProjNode* cont_proj, Node* new_entry, 479 Deoptimization::DeoptReason reason); 480 481 #ifndef PRODUCT 482 protected: 483 // Sub-quadratic implementation of VerifyIterativeGVN. 484 unsigned long _verify_counter; 485 unsigned long _verify_full_passes; 486 enum { _verify_window_size = 30 }; 487 Node* _verify_window[_verify_window_size]; 488 void verify_step(Node* n); 489 #endif 490 }; 491 492 //------------------------------PhaseCCP--------------------------------------- 493 // Phase for performing global Conditional Constant Propagation. 494 // Should be replaced with combined CCP & GVN someday. 495 class PhaseCCP : public PhaseIterGVN { 496 // Non-recursive. Use analysis to transform single Node. |