src/share/vm/adlc/formssel.hpp

Print this page
rev 5661 : 8003854: PPC64 (part 115): Introduce lateExpand that expands nodes after register allocation.


  79   int            _cisc_spill_operand;// Which operand may cisc-spill
  80   void           set_cisc_spill_operand(uint op_index) { _cisc_spill_operand = op_index; }
  81   bool           _is_cisc_alternate;
  82   InstructForm  *_cisc_spill_alternate;// cisc possible replacement
  83   const char    *_cisc_reg_mask_name;
  84   InstructForm  *_short_branch_form;
  85   bool           _is_short_branch;
  86   bool           _is_mach_constant;   // true if Node is a MachConstantNode
  87   uint           _alignment;
  88 
  89 public:
  90   // Public Data
  91   const char    *_ident;           // Name of this instruction
  92   NameList       _parameters;      // Locally defined names
  93   FormDict       _localNames;      // Table of operands & their types
  94   MatchRule     *_matrule;         // Matching rule for this instruction
  95   Opcode        *_opcode;          // Encoding of the opcode for instruction
  96   char          *_size;            // Size of instruction
  97   InsEncode     *_insencode;       // Encoding class instruction belongs to
  98   InsEncode     *_constant;        // Encoding class constant value belongs to

  99   Attribute     *_attribs;         // List of Attribute rules
 100   Predicate     *_predicate;       // Predicate test for this instruction
 101   FormDict       _effects;         // Dictionary of effect rules
 102   ExpandRule    *_exprule;         // Expand rule for this instruction
 103   RewriteRule   *_rewrule;         // Rewrite rule for this instruction
 104   FormatRule    *_format;          // Format for assembly generation
 105   Peephole      *_peephole;        // List of peephole rules for instruction
 106   const char    *_ins_pipe;        // Instruction Scheduling description class
 107 
 108   uint          *_uniq_idx;        // Indexes of unique operands
 109   uint           _uniq_idx_length; // Length of _uniq_idx array
 110   uint           _num_uniq;        // Number  of unique operands
 111   ComponentList  _components;      // List of Components matches MachNode's
 112                                    // operand structure
 113 
 114   bool           _has_call;        // contain a call and caller save registers should be saved?
 115 
 116   // Public Methods
 117   InstructForm(const char *id, bool ideal_only = false);
 118   InstructForm(const char *id, InstructForm *instr, MatchRule *rule);
 119   ~InstructForm();
 120 
 121   // Dynamic type check
 122   virtual InstructForm *is_instruction() const;
 123 
 124   virtual bool        ideal_only() const;
 125 
 126   // This instruction sets a result
 127   virtual bool        sets_result() const;
 128   // This instruction needs projections for additional DEFs or KILLs
 129   virtual bool        needs_projections();
 130   // This instruction needs extra nodes for temporary inputs
 131   virtual bool        has_temps();
 132   // This instruction defines or kills more than one object
 133   virtual uint        num_defs_or_kills();
 134   // This instruction has an expand rule?
 135   virtual bool        expands() const ;


 136   // Return this instruction's first peephole rule, or NULL
 137   virtual Peephole   *peepholes() const;
 138   // Add a peephole rule to this instruction
 139   virtual void        append_peephole(Peephole *peep);
 140 
 141   virtual bool        is_pinned(FormDict &globals); // should be pinned inside block
 142   virtual bool        is_projection(FormDict &globals); // node requires projection
 143   virtual bool        is_parm(FormDict &globals); // node matches ideal 'Parm'
 144   // ideal opcode enumeration
 145   virtual const char *ideal_Opcode(FormDict &globals)  const;
 146   virtual int         is_expensive() const;     // node matches ideal 'CosD'
 147   virtual int         is_empty_encoding() const; // _size=0 and/or _insencode empty
 148   virtual int         is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal
 149   virtual int         is_ideal_copy() const;    // node matches ideal 'Copy*'
 150   virtual bool        is_ideal_negD() const;    // node matches ideal 'NegD'
 151   virtual bool        is_ideal_if()   const;    // node matches ideal 'If'
 152   virtual bool        is_ideal_fastlock() const; // node matches 'FastLock'
 153   virtual bool        is_ideal_membar() const;  // node matches ideal 'MemBarXXX'
 154   virtual bool        is_ideal_loadPC() const;  // node matches ideal 'LoadPC'
 155   virtual bool        is_ideal_box() const;     // node matches ideal 'Box'




  79   int            _cisc_spill_operand;// Which operand may cisc-spill
  80   void           set_cisc_spill_operand(uint op_index) { _cisc_spill_operand = op_index; }
  81   bool           _is_cisc_alternate;
  82   InstructForm  *_cisc_spill_alternate;// cisc possible replacement
  83   const char    *_cisc_reg_mask_name;
  84   InstructForm  *_short_branch_form;
  85   bool           _is_short_branch;
  86   bool           _is_mach_constant;   // true if Node is a MachConstantNode
  87   uint           _alignment;
  88 
  89 public:
  90   // Public Data
  91   const char    *_ident;           // Name of this instruction
  92   NameList       _parameters;      // Locally defined names
  93   FormDict       _localNames;      // Table of operands & their types
  94   MatchRule     *_matrule;         // Matching rule for this instruction
  95   Opcode        *_opcode;          // Encoding of the opcode for instruction
  96   char          *_size;            // Size of instruction
  97   InsEncode     *_insencode;       // Encoding class instruction belongs to
  98   InsEncode     *_constant;        // Encoding class constant value belongs to
  99   bool           _is_lateExpand;   // Indicates that encoding just does a lateExpand.
 100   Attribute     *_attribs;         // List of Attribute rules
 101   Predicate     *_predicate;       // Predicate test for this instruction
 102   FormDict       _effects;         // Dictionary of effect rules
 103   ExpandRule    *_exprule;         // Expand rule for this instruction
 104   RewriteRule   *_rewrule;         // Rewrite rule for this instruction
 105   FormatRule    *_format;          // Format for assembly generation
 106   Peephole      *_peephole;        // List of peephole rules for instruction
 107   const char    *_ins_pipe;        // Instruction Scheduling description class
 108 
 109   uint          *_uniq_idx;        // Indexes of unique operands
 110   uint           _uniq_idx_length; // Length of _uniq_idx array
 111   uint           _num_uniq;        // Number  of unique operands
 112   ComponentList  _components;      // List of Components matches MachNode's
 113                                    // operand structure
 114 
 115   bool           _has_call;        // contain a call and caller save registers should be saved?
 116 
 117   // Public Methods
 118   InstructForm(const char *id, bool ideal_only = false);
 119   InstructForm(const char *id, InstructForm *instr, MatchRule *rule);
 120   ~InstructForm();
 121 
 122   // Dynamic type check
 123   virtual InstructForm *is_instruction() const;
 124 
 125   virtual bool        ideal_only() const;
 126 
 127   // This instruction sets a result
 128   virtual bool        sets_result() const;
 129   // This instruction needs projections for additional DEFs or KILLs
 130   virtual bool        needs_projections();
 131   // This instruction needs extra nodes for temporary inputs
 132   virtual bool        has_temps();
 133   // This instruction defines or kills more than one object
 134   virtual uint        num_defs_or_kills();
 135   // This instruction has an expand rule?
 136   virtual bool        expands() const ;
 137   // This instruction has a late expand rule?
 138   virtual bool        lateExpands() const;
 139   // Return this instruction's first peephole rule, or NULL
 140   virtual Peephole   *peepholes() const;
 141   // Add a peephole rule to this instruction
 142   virtual void        append_peephole(Peephole *peep);
 143 
 144   virtual bool        is_pinned(FormDict &globals); // should be pinned inside block
 145   virtual bool        is_projection(FormDict &globals); // node requires projection
 146   virtual bool        is_parm(FormDict &globals); // node matches ideal 'Parm'
 147   // ideal opcode enumeration
 148   virtual const char *ideal_Opcode(FormDict &globals)  const;
 149   virtual int         is_expensive() const;     // node matches ideal 'CosD'
 150   virtual int         is_empty_encoding() const; // _size=0 and/or _insencode empty
 151   virtual int         is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal
 152   virtual int         is_ideal_copy() const;    // node matches ideal 'Copy*'
 153   virtual bool        is_ideal_negD() const;    // node matches ideal 'NegD'
 154   virtual bool        is_ideal_if()   const;    // node matches ideal 'If'
 155   virtual bool        is_ideal_fastlock() const; // node matches 'FastLock'
 156   virtual bool        is_ideal_membar() const;  // node matches ideal 'MemBarXXX'
 157   virtual bool        is_ideal_loadPC() const;  // node matches ideal 'LoadPC'
 158   virtual bool        is_ideal_box() const;     // node matches ideal 'Box'