src/share/vm/adlc/formssel.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6953576 Sdiff src/share/vm/adlc

src/share/vm/adlc/formssel.hpp

Print this page




 171 
 172   // Check if a simple chain rule
 173   virtual bool        is_simple_chain_rule(FormDict &globals) const;
 174 
 175   // check for structural rematerialization
 176   virtual bool        rematerialize(FormDict &globals, RegisterForm *registers);
 177 
 178   // loads from memory, so must check for anti-dependence
 179   virtual bool        needs_anti_dependence_check(FormDict &globals) const;
 180   virtual int         memory_operand(FormDict &globals) const;
 181           bool        is_wide_memory_kill(FormDict &globals) const;
 182 
 183   enum memory_operand_type {
 184     NO_MEMORY_OPERAND = -1,
 185     MANY_MEMORY_OPERANDS = 999999
 186   };
 187 
 188 
 189   // This instruction captures the machine-independent bottom_type
 190   // Expected use is for pointer vs oop determination for LoadP
 191   virtual bool        captures_bottom_type() const;
 192 
 193   virtual const char *cost();      // Access ins_cost attribute
 194   virtual uint        num_opnds(); // Count of num_opnds for MachNode class
 195   virtual uint        num_post_match_opnds();
 196   virtual uint        num_consts(FormDict &globals) const;// Constants in match rule
 197   // Constants in match rule with specified type
 198   virtual uint        num_consts(FormDict &globals, Form::DataType type) const;
 199 
 200   // Return the register class associated with 'leaf'.
 201   virtual const char *out_reg_class(FormDict &globals);
 202 
 203   // number of ideal node inputs to skip
 204   virtual uint        oper_input_base(FormDict &globals);
 205 
 206   // Does this instruction need a base-oop edge?
 207   int needs_base_oop_edge(FormDict &globals) const;
 208 
 209   // Build instruction predicates.  If the user uses the same operand name
 210   // twice, we need to check that the operands are pointer-eequivalent in
 211   // the DFA during the labeling process.
 212   Predicate *build_predicate();
 213 
 214   virtual void        build_components(); // top-level operands
 215   // Return zero-based position in component list; -1 if not in list.
 216   virtual int         operand_position(const char *name, int usedef);
 217   virtual int         operand_position_format(const char *name);
 218 
 219   // Return zero-based position in component list; -1 if not in list.
 220   virtual int         label_position();
 221   virtual int         method_position();
 222   // Return number of relocation entries needed for this instruction.
 223   virtual uint        reloc(FormDict &globals);
 224 
 225   const char         *reduce_result();
 226   // Return the name of the operand on the right hand side of the binary match
 227   // Return NULL if there is no right hand side
 228   const char         *reduce_right(FormDict &globals)  const;
 229   const char         *reduce_left(FormDict &globals)   const;
 230 
 231   // Base class for this instruction, MachNode except for calls
 232   virtual const char *mach_base_class()  const;
 233 
 234   // Check if this instruction can cisc-spill to 'alternate'
 235   bool                cisc_spills_to(ArchDesc &AD, InstructForm *alternate);
 236   InstructForm       *cisc_spill_alternate() { return _cisc_spill_alternate; }
 237   uint                cisc_spill_operand() const { return _cisc_spill_operand; }
 238   bool                is_cisc_alternate() const { return _is_cisc_alternate; }
 239   void                set_cisc_alternate(bool val) { _is_cisc_alternate = val; }
 240   const char         *cisc_reg_mask_name() const { return _cisc_reg_mask_name; }
 241   void                set_cisc_reg_mask_name(const char *rm_name) { _cisc_reg_mask_name = rm_name; }
 242   // Output cisc-method prototypes and method bodies
 243   void                declare_cisc_version(ArchDesc &AD, FILE *fp_cpp);
 244   bool                define_cisc_version (ArchDesc &AD, FILE *fp_cpp);
 245 
 246   bool                check_branch_variant(ArchDesc &AD, InstructForm *short_branch);
 247 
 248   bool                is_short_branch() { return _is_short_branch; }
 249   void                set_short_branch(bool val) { _is_short_branch = val; }
 250 
 251   InstructForm       *short_branch_form() { return _short_branch_form; }
 252   bool                has_short_branch_form() { return _short_branch_form != NULL; }
 253   // Output short branch prototypes and method bodies
 254   void                declare_short_branch_methods(FILE *fp_cpp);
 255   bool                define_short_branch_methods(FILE *fp_cpp);
 256 
 257   uint                alignment() { return _alignment; }
 258   void                set_alignment(uint val) { _alignment = val; }
 259 
 260   // Seach through operands to determine operands unique positions.
 261   void                set_unique_opnds();
 262   uint                num_unique_opnds() { return _num_uniq; }
 263   uint                unique_opnds_idx(int idx) {
 264                         if( _uniq_idx != NULL && idx > 0 ) {
 265                           assert(idx < _uniq_idx_length, "out of bounds");
 266                           return _uniq_idx[idx];
 267                         } else {
 268                           return idx;
 269                         }
 270   }
 271 
 272   // Operands which are only KILLs aren't part of the input array and
 273   // require special handling in some cases.  Their position in this
 274   // operand list is higher than the number of unique operands.
 275   bool is_noninput_operand(uint idx) {




 171 
 172   // Check if a simple chain rule
 173   virtual bool        is_simple_chain_rule(FormDict &globals) const;
 174 
 175   // check for structural rematerialization
 176   virtual bool        rematerialize(FormDict &globals, RegisterForm *registers);
 177 
 178   // loads from memory, so must check for anti-dependence
 179   virtual bool        needs_anti_dependence_check(FormDict &globals) const;
 180   virtual int         memory_operand(FormDict &globals) const;
 181           bool        is_wide_memory_kill(FormDict &globals) const;
 182 
 183   enum memory_operand_type {
 184     NO_MEMORY_OPERAND = -1,
 185     MANY_MEMORY_OPERANDS = 999999
 186   };
 187 
 188 
 189   // This instruction captures the machine-independent bottom_type
 190   // Expected use is for pointer vs oop determination for LoadP
 191   virtual bool        captures_bottom_type(FormDict& globals) const;
 192 
 193   virtual const char *cost();      // Access ins_cost attribute
 194   virtual uint        num_opnds(); // Count of num_opnds for MachNode class
 195   virtual uint        num_post_match_opnds();
 196   virtual uint        num_consts(FormDict &globals) const;// Constants in match rule
 197   // Constants in match rule with specified type
 198   virtual uint        num_consts(FormDict &globals, Form::DataType type) const;
 199 
 200   // Return the register class associated with 'leaf'.
 201   virtual const char *out_reg_class(FormDict &globals);
 202 
 203   // number of ideal node inputs to skip
 204   virtual uint        oper_input_base(FormDict &globals);
 205 
 206   // Does this instruction need a base-oop edge?
 207   int needs_base_oop_edge(FormDict &globals) const;
 208 
 209   // Build instruction predicates.  If the user uses the same operand name
 210   // twice, we need to check that the operands are pointer-eequivalent in
 211   // the DFA during the labeling process.
 212   Predicate *build_predicate();
 213 
 214   virtual void        build_components(); // top-level operands
 215   // Return zero-based position in component list; -1 if not in list.
 216   virtual int         operand_position(const char *name, int usedef);
 217   virtual int         operand_position_format(const char *name);
 218 
 219   // Return zero-based position in component list; -1 if not in list.
 220   virtual int         label_position();
 221   virtual int         method_position();
 222   // Return number of relocation entries needed for this instruction.
 223   virtual uint        reloc(FormDict &globals);
 224 
 225   const char         *reduce_result();
 226   // Return the name of the operand on the right hand side of the binary match
 227   // Return NULL if there is no right hand side
 228   const char         *reduce_right(FormDict &globals)  const;
 229   const char         *reduce_left(FormDict &globals)   const;
 230 
 231   // Base class for this instruction, MachNode except for calls
 232   virtual const char *mach_base_class(FormDict &globals)  const;
 233 
 234   // Check if this instruction can cisc-spill to 'alternate'
 235   bool                cisc_spills_to(ArchDesc &AD, InstructForm *alternate);
 236   InstructForm       *cisc_spill_alternate() { return _cisc_spill_alternate; }
 237   uint                cisc_spill_operand() const { return _cisc_spill_operand; }
 238   bool                is_cisc_alternate() const { return _is_cisc_alternate; }
 239   void                set_cisc_alternate(bool val) { _is_cisc_alternate = val; }
 240   const char         *cisc_reg_mask_name() const { return _cisc_reg_mask_name; }
 241   void                set_cisc_reg_mask_name(const char *rm_name) { _cisc_reg_mask_name = rm_name; }
 242   // Output cisc-method prototypes and method bodies
 243   void                declare_cisc_version(ArchDesc &AD, FILE *fp_cpp);
 244   bool                define_cisc_version (ArchDesc &AD, FILE *fp_cpp);
 245 
 246   bool                check_branch_variant(ArchDesc &AD, InstructForm *short_branch);
 247 
 248   bool                is_short_branch() { return _is_short_branch; }
 249   void                set_short_branch(bool val) { _is_short_branch = val; }
 250 
 251   InstructForm       *short_branch_form() { return _short_branch_form; }
 252   bool                has_short_branch_form() { return _short_branch_form != NULL; }
 253   // Output short branch prototypes and method bodies
 254   void                declare_short_branch_methods(FILE *fp_cpp);
 255   bool                define_short_branch_methods(ArchDesc &AD, FILE *fp_cpp);
 256 
 257   uint                alignment() { return _alignment; }
 258   void                set_alignment(uint val) { _alignment = val; }
 259 
 260   // Seach through operands to determine operands unique positions.
 261   void                set_unique_opnds();
 262   uint                num_unique_opnds() { return _num_uniq; }
 263   uint                unique_opnds_idx(int idx) {
 264                         if( _uniq_idx != NULL && idx > 0 ) {
 265                           assert(idx < _uniq_idx_length, "out of bounds");
 266                           return _uniq_idx[idx];
 267                         } else {
 268                           return idx;
 269                         }
 270   }
 271 
 272   // Operands which are only KILLs aren't part of the input array and
 273   // require special handling in some cases.  Their position in this
 274   // operand list is higher than the number of unique operands.
 275   bool is_noninput_operand(uint idx) {


src/share/vm/adlc/formssel.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File