141 virtual int is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal 142 virtual int is_ideal_copy() const; // node matches ideal 'Copy*' 143 virtual bool is_ideal_unlock() const; // node matches ideal 'Unlock' 144 virtual bool is_ideal_call_leaf() const; // node matches ideal 'CallLeaf' 145 virtual bool is_ideal_if() const; // node matches ideal 'If' 146 virtual bool is_ideal_fastlock() const; // node matches 'FastLock' 147 virtual bool is_ideal_membar() const; // node matches ideal 'MemBarXXX' 148 virtual bool is_ideal_loadPC() const; // node matches ideal 'LoadPC' 149 virtual bool is_ideal_box() const; // node matches ideal 'Box' 150 virtual bool is_ideal_goto() const; // node matches ideal 'Goto' 151 virtual bool is_ideal_branch() const; // "" 'If' | 'Goto' | 'LoopEnd' | 'Jump' 152 virtual bool is_ideal_jump() const; // node matches ideal 'Jump' 153 virtual bool is_ideal_return() const; // node matches ideal 'Return' 154 virtual bool is_ideal_halt() const; // node matches ideal 'Halt' 155 virtual bool is_ideal_safepoint() const; // node matches 'SafePoint' 156 virtual bool is_ideal_nop() const; // node matches 'Nop' 157 virtual bool is_ideal_control() const; // control node 158 159 virtual Form::CallType is_ideal_call() const; // matches ideal 'Call' 160 virtual Form::DataType is_ideal_load() const; // node matches ideal 'LoadXNode' 161 virtual Form::DataType is_ideal_store() const;// node matches ideal 'StoreXNode' 162 bool is_ideal_mem() const { return is_ideal_load() != Form::none || is_ideal_store() != Form::none; } 163 virtual uint two_address(FormDict &globals); // output reg must match input reg 164 // when chaining a constant to an instruction, return 'true' and set opType 165 virtual Form::DataType is_chain_of_constant(FormDict &globals); 166 virtual Form::DataType is_chain_of_constant(FormDict &globals, const char * &opType); 167 virtual Form::DataType is_chain_of_constant(FormDict &globals, const char * &opType, const char * &result_type); 168 169 // Check if a simple chain rule 170 virtual bool is_simple_chain_rule(FormDict &globals) const; 171 172 // check for structural rematerialization 173 virtual bool rematerialize(FormDict &globals, RegisterForm *registers); 174 175 // loads from memory, so must check for anti-dependence 176 virtual bool needs_anti_dependence_check(FormDict &globals) const; 177 virtual int memory_operand(FormDict &globals) const; 178 bool is_wide_memory_kill(FormDict &globals) const; 179 180 enum memory_operand_type { 986 const char * &opType) const; 987 988 989 bool is_base_register(FormDict &globals) const; 990 Form::DataType is_base_constant(FormDict &globals) const; 991 bool is_chain_rule(FormDict &globals) const; 992 int is_ideal_copy() const; 993 int is_expensive() const; // node matches ideal 'CosD' 994 bool is_ideal_unlock() const; 995 bool is_ideal_call_leaf() const; 996 bool is_ideal_if() const; // node matches ideal 'If' 997 bool is_ideal_fastlock() const; // node matches ideal 'FastLock' 998 bool is_ideal_jump() const; // node matches ideal 'Jump' 999 bool is_ideal_membar() const; // node matches ideal 'MemBarXXX' 1000 bool is_ideal_loadPC() const; // node matches ideal 'LoadPC' 1001 bool is_ideal_box() const; // node matches ideal 'Box' 1002 bool is_ideal_goto() const; // node matches ideal 'Goto' 1003 bool is_ideal_loopEnd() const; // node matches ideal 'LoopEnd' 1004 bool is_ideal_bool() const; // node matches ideal 'Bool' 1005 Form::DataType is_ideal_load() const;// node matches ideal 'LoadXNode' 1006 Form::DataType is_ideal_store() const;// node matches ideal 'StoreXNode' 1007 1008 // Check if 'mRule2' is a cisc-spill variant of this MatchRule 1009 int matchrule_cisc_spill_match(FormDict &globals, RegisterForm* registers, 1010 MatchRule* mRule2, const char* &operand, 1011 const char* ®_type); 1012 1013 // Check if 'mRule2' is equivalent to this MatchRule 1014 virtual bool equivalent(FormDict& globals, MatchNode* mRule2); 1015 1016 void matchrule_swap_commutative_op(const char* instr_ident, int count, int& match_rules_cnt); 1017 1018 void dump(); 1019 void output(FILE *fp); 1020 }; 1021 1022 //------------------------------Attribute-------------------------------------- 1023 class Attribute : public Form { 1024 private: 1025 | 141 virtual int is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal 142 virtual int is_ideal_copy() const; // node matches ideal 'Copy*' 143 virtual bool is_ideal_unlock() const; // node matches ideal 'Unlock' 144 virtual bool is_ideal_call_leaf() const; // node matches ideal 'CallLeaf' 145 virtual bool is_ideal_if() const; // node matches ideal 'If' 146 virtual bool is_ideal_fastlock() const; // node matches 'FastLock' 147 virtual bool is_ideal_membar() const; // node matches ideal 'MemBarXXX' 148 virtual bool is_ideal_loadPC() const; // node matches ideal 'LoadPC' 149 virtual bool is_ideal_box() const; // node matches ideal 'Box' 150 virtual bool is_ideal_goto() const; // node matches ideal 'Goto' 151 virtual bool is_ideal_branch() const; // "" 'If' | 'Goto' | 'LoopEnd' | 'Jump' 152 virtual bool is_ideal_jump() const; // node matches ideal 'Jump' 153 virtual bool is_ideal_return() const; // node matches ideal 'Return' 154 virtual bool is_ideal_halt() const; // node matches ideal 'Halt' 155 virtual bool is_ideal_safepoint() const; // node matches 'SafePoint' 156 virtual bool is_ideal_nop() const; // node matches 'Nop' 157 virtual bool is_ideal_control() const; // control node 158 159 virtual Form::CallType is_ideal_call() const; // matches ideal 'Call' 160 virtual Form::DataType is_ideal_load() const; // node matches ideal 'LoadXNode' 161 // Should antidep checks be disabled for this Instruct 162 // See definition of MatchRule::skip_antidep_check 163 bool skip_antidep_check() const; 164 virtual Form::DataType is_ideal_store() const;// node matches ideal 'StoreXNode' 165 bool is_ideal_mem() const { return is_ideal_load() != Form::none || is_ideal_store() != Form::none; } 166 virtual uint two_address(FormDict &globals); // output reg must match input reg 167 // when chaining a constant to an instruction, return 'true' and set opType 168 virtual Form::DataType is_chain_of_constant(FormDict &globals); 169 virtual Form::DataType is_chain_of_constant(FormDict &globals, const char * &opType); 170 virtual Form::DataType is_chain_of_constant(FormDict &globals, const char * &opType, const char * &result_type); 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 { 989 const char * &opType) const; 990 991 992 bool is_base_register(FormDict &globals) const; 993 Form::DataType is_base_constant(FormDict &globals) const; 994 bool is_chain_rule(FormDict &globals) const; 995 int is_ideal_copy() const; 996 int is_expensive() const; // node matches ideal 'CosD' 997 bool is_ideal_unlock() const; 998 bool is_ideal_call_leaf() const; 999 bool is_ideal_if() const; // node matches ideal 'If' 1000 bool is_ideal_fastlock() const; // node matches ideal 'FastLock' 1001 bool is_ideal_jump() const; // node matches ideal 'Jump' 1002 bool is_ideal_membar() const; // node matches ideal 'MemBarXXX' 1003 bool is_ideal_loadPC() const; // node matches ideal 'LoadPC' 1004 bool is_ideal_box() const; // node matches ideal 'Box' 1005 bool is_ideal_goto() const; // node matches ideal 'Goto' 1006 bool is_ideal_loopEnd() const; // node matches ideal 'LoopEnd' 1007 bool is_ideal_bool() const; // node matches ideal 'Bool' 1008 Form::DataType is_ideal_load() const;// node matches ideal 'LoadXNode' 1009 // Should antidep checks be disabled for this rule 1010 // See definition of MatchRule::skip_antidep_check 1011 bool skip_antidep_check() const; 1012 Form::DataType is_ideal_store() const;// node matches ideal 'StoreXNode' 1013 1014 // Check if 'mRule2' is a cisc-spill variant of this MatchRule 1015 int matchrule_cisc_spill_match(FormDict &globals, RegisterForm* registers, 1016 MatchRule* mRule2, const char* &operand, 1017 const char* ®_type); 1018 1019 // Check if 'mRule2' is equivalent to this MatchRule 1020 virtual bool equivalent(FormDict& globals, MatchNode* mRule2); 1021 1022 void matchrule_swap_commutative_op(const char* instr_ident, int count, int& match_rules_cnt); 1023 1024 void dump(); 1025 void output(FILE *fp); 1026 }; 1027 1028 //------------------------------Attribute-------------------------------------- 1029 class Attribute : public Form { 1030 private: 1031 |