1.1 --- a/src/share/vm/opto/phaseX.hpp Wed Dec 09 10:26:00 2015 -0800 1.2 +++ b/src/share/vm/opto/phaseX.hpp Tue Dec 15 09:46:51 2015 +0100 1.3 @@ -148,11 +148,21 @@ 1.4 Unique_Node_List _useful; // Nodes reachable from root 1.5 // list is allocated from current resource area 1.6 public: 1.7 - PhaseRemoveUseless( PhaseGVN *gvn, Unique_Node_List *worklist ); 1.8 + PhaseRemoveUseless(PhaseGVN *gvn, Unique_Node_List *worklist, PhaseNumber phase_num = Remove_Useless); 1.9 1.10 Unique_Node_List *get_useful() { return &_useful; } 1.11 }; 1.12 1.13 +//------------------------------PhaseRenumber---------------------------------- 1.14 +// Phase that first performs a PhaseRemoveUseless, then it renumbers compiler 1.15 +// structures accordingly. 1.16 +class PhaseRenumberLive : public PhaseRemoveUseless { 1.17 +public: 1.18 + PhaseRenumberLive(PhaseGVN* gvn, 1.19 + Unique_Node_List* worklist, Unique_Node_List* new_worklist, 1.20 + PhaseNumber phase_num = Remove_Useless_And_Renumber_Live); 1.21 +}; 1.22 + 1.23 1.24 //------------------------------PhaseTransform--------------------------------- 1.25 // Phases that analyze, then transform. Constructing the Phase object does any 1.26 @@ -162,7 +172,7 @@ 1.27 class PhaseTransform : public Phase { 1.28 protected: 1.29 Arena* _arena; 1.30 - Node_Array _nodes; // Map old node indices to new nodes. 1.31 + Node_List _nodes; // Map old node indices to new nodes. 1.32 Type_Array _types; // Map old node indices to Types. 1.33 1.34 // ConNode caches: 1.35 @@ -187,7 +197,13 @@ 1.36 1.37 Arena* arena() { return _arena; } 1.38 Type_Array& types() { return _types; } 1.39 + void replace_types(Type_Array new_types) { 1.40 + _types = new_types; 1.41 + } 1.42 // _nodes is used in varying ways by subclasses, which define local accessors 1.43 + uint nodes_size() { 1.44 + return _nodes.size(); 1.45 + } 1.46 1.47 public: 1.48 // Get a previously recorded type for the node n.