Mercurial > hg > truffle
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 |