src/share/vm/opto/chaitin.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/chaitin.hpp

Print this page




 664     return yank_if_dead(old, current_block, &value, &regnd);
 665   }
 666 
 667   int yank_if_dead( Node *old, Block *current_block, Node_List *value, Node_List *regnd ) {
 668     return yank_if_dead_recurse(old, old, current_block, value, regnd);
 669   }
 670   int yank_if_dead_recurse(Node *old, Node *orig_old, Block *current_block,
 671       Node_List *value, Node_List *regnd);
 672   int yank( Node *old, Block *current_block, Node_List *value, Node_List *regnd );
 673   int elide_copy( Node *n, int k, Block *current_block, Node_List &value, Node_List &regnd, bool can_change_regs );
 674   int use_prior_register( Node *copy, uint idx, Node *def, Block *current_block, Node_List &value, Node_List &regnd );
 675   bool may_be_copy_of_callee( Node *def ) const;
 676 
 677   // If nreg already contains the same constant as val then eliminate it
 678   bool eliminate_copy_of_constant(Node* val, Node* n,
 679       Block *current_block, Node_List& value, Node_List &regnd,
 680       OptoReg::Name nreg, OptoReg::Name nreg2);
 681   // Extend the node to LRG mapping
 682   void add_reference( const Node *node, const Node *old_node);
 683 


























 684 private:
 685 
 686   static int _final_loads, _final_stores, _final_copies, _final_memoves;
 687   static double _final_load_cost, _final_store_cost, _final_copy_cost, _final_memove_cost;
 688   static int _conserv_coalesce, _conserv_coalesce_pair;
 689   static int _conserv_coalesce_trie, _conserv_coalesce_quad;
 690   static int _post_alloc;
 691   static int _lost_opp_pp_coalesce, _lost_opp_cflow_coalesce;
 692   static int _used_cisc_instructions, _unused_cisc_instructions;
 693   static int _allocator_attempts, _allocator_successes;
 694 
 695 #ifndef PRODUCT
 696   static uint _high_pressure, _low_pressure;
 697 
 698   void dump() const;
 699   void dump( const Node *n ) const;
 700   void dump( const Block * b ) const;
 701   void dump_degree_lists() const;
 702   void dump_simplified() const;
 703   void dump_lrg( uint lidx, bool defs_only) const;




 664     return yank_if_dead(old, current_block, &value, &regnd);
 665   }
 666 
 667   int yank_if_dead( Node *old, Block *current_block, Node_List *value, Node_List *regnd ) {
 668     return yank_if_dead_recurse(old, old, current_block, value, regnd);
 669   }
 670   int yank_if_dead_recurse(Node *old, Node *orig_old, Block *current_block,
 671       Node_List *value, Node_List *regnd);
 672   int yank( Node *old, Block *current_block, Node_List *value, Node_List *regnd );
 673   int elide_copy( Node *n, int k, Block *current_block, Node_List &value, Node_List &regnd, bool can_change_regs );
 674   int use_prior_register( Node *copy, uint idx, Node *def, Block *current_block, Node_List &value, Node_List &regnd );
 675   bool may_be_copy_of_callee( Node *def ) const;
 676 
 677   // If nreg already contains the same constant as val then eliminate it
 678   bool eliminate_copy_of_constant(Node* val, Node* n,
 679       Block *current_block, Node_List& value, Node_List &regnd,
 680       OptoReg::Name nreg, OptoReg::Name nreg2);
 681   // Extend the node to LRG mapping
 682   void add_reference( const Node *node, const Node *old_node);
 683 
 684   // Record the first use of a def in the block for a register.
 685   class RegDefUse {
 686     Node* _def;
 687     Node* _first_use;
 688   public:
 689     RegDefUse() : _def(NULL), _first_use(NULL) { }
 690     Node* def() const       { return _def;       }
 691     Node* first_use() const { return _first_use; }
 692 
 693     void update(Node* def, Node* use) {
 694       if (_def != def) {
 695         _def = def;
 696         _first_use = use;
 697       }
 698     }
 699     void clear() {
 700       _def = NULL;
 701       _first_use = NULL;
 702     }
 703   };
 704   typedef GrowableArray<RegDefUse> RegToDefUseMap;
 705   int possibly_merge_multidef(Node *n, uint k, Block *block, RegToDefUseMap& reg2defuse);
 706 
 707   // Merge nodes that are a part of a multidef lrg and produce the same value within a block.
 708   void merge_multidefs();
 709 
 710 private:
 711 
 712   static int _final_loads, _final_stores, _final_copies, _final_memoves;
 713   static double _final_load_cost, _final_store_cost, _final_copy_cost, _final_memove_cost;
 714   static int _conserv_coalesce, _conserv_coalesce_pair;
 715   static int _conserv_coalesce_trie, _conserv_coalesce_quad;
 716   static int _post_alloc;
 717   static int _lost_opp_pp_coalesce, _lost_opp_cflow_coalesce;
 718   static int _used_cisc_instructions, _unused_cisc_instructions;
 719   static int _allocator_attempts, _allocator_successes;
 720 
 721 #ifndef PRODUCT
 722   static uint _high_pressure, _low_pressure;
 723 
 724   void dump() const;
 725   void dump( const Node *n ) const;
 726   void dump( const Block * b ) const;
 727   void dump_degree_lists() const;
 728   void dump_simplified() const;
 729   void dump_lrg( uint lidx, bool defs_only) const;


src/share/vm/opto/chaitin.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File