< prev index next >

src/hotspot/share/opto/machnode.hpp

Print this page




 284   // instruction to properly align it.
 285   virtual int   compute_padding(int current_offset) const { return 0; }
 286 
 287   // Return number of relocatable values contained in this instruction
 288   virtual int   reloc() const { return 0; }
 289 
 290   // Return number of words used for double constants in this instruction
 291   virtual int   ins_num_consts() const { return 0; }
 292 
 293   // Hash and compare over operands.  Used to do GVN on machine Nodes.
 294   virtual uint  hash() const;
 295   virtual bool  cmp( const Node &n ) const;
 296 
 297   // Expand method for MachNode, replaces nodes representing pseudo
 298   // instructions with a set of nodes which represent real machine
 299   // instructions and compute the same value.
 300   virtual MachNode *Expand( State *, Node_List &proj_list, Node* mem ) { return this; }
 301 
 302   // Bottom_type call; value comes from operand0
 303   virtual const class Type *bottom_type() const { return _opnds[0]->type(); }
 304   virtual uint ideal_reg() const { const Type *t = _opnds[0]->type(); return t == TypeInt::CC ? Op_RegFlags : t->ideal_reg(); }







 305 
 306   // If this is a memory op, return the base pointer and fixed offset.
 307   // If there are no such, return NULL.  If there are multiple addresses
 308   // or the address is indeterminate (rare cases) then return (Node*)-1,
 309   // which serves as node bottom.
 310   // If the offset is not statically determined, set it to Type::OffsetBot.
 311   // This method is free to ignore stack slots if that helps.
 312   #define TYPE_PTR_SENTINAL  ((const TypePtr*)-1)
 313   // Passing TYPE_PTR_SENTINAL as adr_type asks for computation of the adr_type if possible
 314   const Node* get_base_and_disp(intptr_t &offset, const TypePtr* &adr_type) const;
 315 
 316   // Helper for get_base_and_disp: find the base and index input nodes.
 317   // Returns the MachOper as determined by memory_operand(), for use, if
 318   // needed by the caller. If (MachOper *)-1 is returned, base and index
 319   // are set to NodeSentinel. If (MachOper *) NULL is returned, base and
 320   // index are set to NULL.
 321   const MachOper* memory_inputs(Node* &base, Node* &index) const;
 322 
 323   // Helper for memory_inputs:  Which operand carries the necessary info?
 324   // By default, returns NULL, which means there is no such operand.




 284   // instruction to properly align it.
 285   virtual int   compute_padding(int current_offset) const { return 0; }
 286 
 287   // Return number of relocatable values contained in this instruction
 288   virtual int   reloc() const { return 0; }
 289 
 290   // Return number of words used for double constants in this instruction
 291   virtual int   ins_num_consts() const { return 0; }
 292 
 293   // Hash and compare over operands.  Used to do GVN on machine Nodes.
 294   virtual uint  hash() const;
 295   virtual bool  cmp( const Node &n ) const;
 296 
 297   // Expand method for MachNode, replaces nodes representing pseudo
 298   // instructions with a set of nodes which represent real machine
 299   // instructions and compute the same value.
 300   virtual MachNode *Expand( State *, Node_List &proj_list, Node* mem ) { return this; }
 301 
 302   // Bottom_type call; value comes from operand0
 303   virtual const class Type *bottom_type() const { return _opnds[0]->type(); }
 304   virtual uint ideal_reg() const {
 305     const Type *t = _opnds[0]->type();
 306     if (t == TypeInt::CC) {
 307       return Op_RegFlags;
 308     } else {
 309       return t->ideal_reg();
 310     }
 311   }
 312 
 313   // If this is a memory op, return the base pointer and fixed offset.
 314   // If there are no such, return NULL.  If there are multiple addresses
 315   // or the address is indeterminate (rare cases) then return (Node*)-1,
 316   // which serves as node bottom.
 317   // If the offset is not statically determined, set it to Type::OffsetBot.
 318   // This method is free to ignore stack slots if that helps.
 319   #define TYPE_PTR_SENTINAL  ((const TypePtr*)-1)
 320   // Passing TYPE_PTR_SENTINAL as adr_type asks for computation of the adr_type if possible
 321   const Node* get_base_and_disp(intptr_t &offset, const TypePtr* &adr_type) const;
 322 
 323   // Helper for get_base_and_disp: find the base and index input nodes.
 324   // Returns the MachOper as determined by memory_operand(), for use, if
 325   // needed by the caller. If (MachOper *)-1 is returned, base and index
 326   // are set to NodeSentinel. If (MachOper *) NULL is returned, base and
 327   // index are set to NULL.
 328   const MachOper* memory_inputs(Node* &base, Node* &index) const;
 329 
 330   // Helper for memory_inputs:  Which operand carries the necessary info?
 331   // By default, returns NULL, which means there is no such operand.


< prev index next >