< prev index next >

src/hotspot/share/opto/matcher.hpp

Print this page




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


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


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




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


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


< prev index next >