< prev index next >

src/share/vm/opto/matcher.hpp

Print this page




 237   // Push a projection node onto the projection list
 238   void push_projection(Node* node) {
 239     _projection_list.push(node);
 240   }
 241 
 242   Node* pop_projection() {
 243     return _projection_list.pop();
 244   }
 245 
 246   // Number of nodes in the projection list
 247   uint number_of_projections() const {
 248     return _projection_list.size();
 249   }
 250 
 251   // Select instructions for entire method
 252   void match();
 253 
 254   // Helper for match
 255   OptoReg::Name warp_incoming_stk_arg( VMReg reg );
 256 


 257   // Transform, then walk.  Does implicit DCE while walking.
 258   // Name changed from "transform" to avoid it being virtual.
 259   Node *xform( Node *old_space_node, int Nodes );
 260 
 261   // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
 262   MachNode *match_tree( const Node *n );
 263   MachNode *match_sfpt( SafePointNode *sfpt );
 264   // Helper for match_sfpt
 265   OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
 266 
 267   // Initialize first stack mask and related masks.
 268   void init_first_stack_mask();
 269 
 270   // If we should save-on-entry this register
 271   bool is_save_on_entry( int reg );
 272 
 273   // Fixup the save-on-entry registers
 274   void Fixup_Save_On_Entry( );
 275 
 276   // --- Frame handling ---


 362   // Alignment of stack, measured in stack slots.
 363   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
 364   static uint stack_alignment_in_slots() {
 365     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
 366   }
 367 
 368   // Array mapping arguments to registers.  Argument 0 is usually the 'this'
 369   // pointer.  Registers can include stack-slots and regular registers.
 370   static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
 371 
 372   // Convert a sig into a calling convention register layout
 373   // and find interesting things about it.
 374   static OptoReg::Name  find_receiver( bool is_outgoing );
 375   // Return address register.  On Intel it is a stack-slot.  On PowerPC
 376   // it is the Link register.  On Sparc it is r31?
 377   virtual OptoReg::Name return_addr() const;
 378   RegMask              _return_addr_mask;
 379   // Return value register.  On Intel it is EAX.  On Sparc i0/o0.
 380   static OptoRegPair   return_value(uint ideal_reg, bool is_outgoing);
 381   static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
 382   RegMask                     _return_value_mask;
 383   // Inline Cache Register
 384   static OptoReg::Name  inline_cache_reg();
 385   static int            inline_cache_reg_encode();
 386 
 387   // Register for DIVI projection of divmodI
 388   static RegMask divI_proj_mask();
 389   // Register for MODI projection of divmodI
 390   static RegMask modI_proj_mask();
 391 
 392   // Register for DIVL projection of divmodL
 393   static RegMask divL_proj_mask();
 394   // Register for MODL projection of divmodL
 395   static RegMask modL_proj_mask();
 396 
 397   // Use hardware DIV instruction when it is faster than
 398   // a code which use multiply for division by constant.
 399   static bool use_asm_for_ldiv_by_con( jlong divisor );
 400 
 401   static const RegMask method_handle_invoke_SP_save_mask();
 402 




 237   // Push a projection node onto the projection list
 238   void push_projection(Node* node) {
 239     _projection_list.push(node);
 240   }
 241 
 242   Node* pop_projection() {
 243     return _projection_list.pop();
 244   }
 245 
 246   // Number of nodes in the projection list
 247   uint number_of_projections() const {
 248     return _projection_list.size();
 249   }
 250 
 251   // Select instructions for entire method
 252   void match();
 253 
 254   // Helper for match
 255   OptoReg::Name warp_incoming_stk_arg( VMReg reg );
 256 
 257   RegMask* return_values_mask(const TypeTuple *range);
 258 
 259   // Transform, then walk.  Does implicit DCE while walking.
 260   // Name changed from "transform" to avoid it being virtual.
 261   Node *xform( Node *old_space_node, int Nodes );
 262 
 263   // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
 264   MachNode *match_tree( const Node *n );
 265   MachNode *match_sfpt( SafePointNode *sfpt );
 266   // Helper for match_sfpt
 267   OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
 268 
 269   // Initialize first stack mask and related masks.
 270   void init_first_stack_mask();
 271 
 272   // If we should save-on-entry this register
 273   bool is_save_on_entry( int reg );
 274 
 275   // Fixup the save-on-entry registers
 276   void Fixup_Save_On_Entry( );
 277 
 278   // --- Frame handling ---


 364   // Alignment of stack, measured in stack slots.
 365   // The size of stack slots is defined by VMRegImpl::stack_slot_size.
 366   static uint stack_alignment_in_slots() {
 367     return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
 368   }
 369 
 370   // Array mapping arguments to registers.  Argument 0 is usually the 'this'
 371   // pointer.  Registers can include stack-slots and regular registers.
 372   static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
 373 
 374   // Convert a sig into a calling convention register layout
 375   // and find interesting things about it.
 376   static OptoReg::Name  find_receiver( bool is_outgoing );
 377   // Return address register.  On Intel it is a stack-slot.  On PowerPC
 378   // it is the Link register.  On Sparc it is r31?
 379   virtual OptoReg::Name return_addr() const;
 380   RegMask              _return_addr_mask;
 381   // Return value register.  On Intel it is EAX.  On Sparc i0/o0.
 382   static OptoRegPair   return_value(uint ideal_reg, bool is_outgoing);
 383   static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
 384   RegMask*             _return_values_mask;
 385   // Inline Cache Register
 386   static OptoReg::Name  inline_cache_reg();
 387   static int            inline_cache_reg_encode();
 388 
 389   // Register for DIVI projection of divmodI
 390   static RegMask divI_proj_mask();
 391   // Register for MODI projection of divmodI
 392   static RegMask modI_proj_mask();
 393 
 394   // Register for DIVL projection of divmodL
 395   static RegMask divL_proj_mask();
 396   // Register for MODL projection of divmodL
 397   static RegMask modL_proj_mask();
 398 
 399   // Use hardware DIV instruction when it is faster than
 400   // a code which use multiply for division by constant.
 401   static bool use_asm_for_ldiv_by_con( jlong divisor );
 402 
 403   static const RegMask method_handle_invoke_SP_save_mask();
 404 


< prev index next >