comparison src/share/vm/opto/phaseX.hpp @ 1621:6027dddc26c6

6677629: PhaseIterGVN::subsume_node() should call hash_delete() and add_users_to_worklist() Summary: Use replace_node() method instead of subsume_node(). Reviewed-by: jrose, never
author kvn
date Mon, 28 Jun 2010 14:54:39 -0700
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1620:d678e3277048 1621:6027dddc26c6
391 bool _delay_transform; // When true simply register the node when calling transform 391 bool _delay_transform; // When true simply register the node when calling transform
392 // instead of actually optimizing it 392 // instead of actually optimizing it
393 393
394 // Idealize old Node 'n' with respect to its inputs and its value 394 // Idealize old Node 'n' with respect to its inputs and its value
395 virtual Node *transform_old( Node *a_node ); 395 virtual Node *transform_old( Node *a_node );
396
397 // Subsume users of node 'old' into node 'nn'
398 void subsume_node( Node *old, Node *nn );
399
396 protected: 400 protected:
397 401
398 // Idealize new Node 'n' with respect to its inputs and its value 402 // Idealize new Node 'n' with respect to its inputs and its value
399 virtual Node *transform( Node *a_node ); 403 virtual Node *transform( Node *a_node );
400 404
437 void remove_dead_node( Node *dead ) { 441 void remove_dead_node( Node *dead ) {
438 assert(dead->outcnt() == 0 && !dead->is_top(), "node must be dead"); 442 assert(dead->outcnt() == 0 && !dead->is_top(), "node must be dead");
439 remove_globally_dead_node(dead); 443 remove_globally_dead_node(dead);
440 } 444 }
441 445
442 // Subsume users of node 'old' into node 'nn'
443 // If no Def-Use info existed for 'nn' it will after call.
444 void subsume_node( Node *old, Node *nn );
445
446 // Add users of 'n' to worklist 446 // Add users of 'n' to worklist
447 void add_users_to_worklist0( Node *n ); 447 void add_users_to_worklist0( Node *n );
448 void add_users_to_worklist ( Node *n ); 448 void add_users_to_worklist ( Node *n );
449 449
450 // Replace old node with new one. 450 // Replace old node with new one.
451 void replace_node( Node *old, Node *nn ) { 451 void replace_node( Node *old, Node *nn ) {
452 add_users_to_worklist(old); 452 add_users_to_worklist(old);
453 hash_delete(old); 453 hash_delete(old); // Yank from hash before hacking edges
454 subsume_node(old, nn); 454 subsume_node(old, nn);
455 } 455 }
456 456
457 bool delay_transform() const { return _delay_transform; } 457 bool delay_transform() const { return _delay_transform; }
458 458