< prev index next >

src/share/vm/opto/cfgnode.hpp

Print this page




 260 // This class defines a MultiBranchNode, a MultiNode which yields multiple
 261 // control values. These are distinguished from other types of MultiNodes
 262 // which yield multiple values, but control is always and only projection #0.
 263 class MultiBranchNode : public MultiNode {
 264 public:
 265   MultiBranchNode( uint required ) : MultiNode(required) {
 266     init_class_id(Class_MultiBranch);
 267   }
 268   // returns required number of users to be well formed.
 269   virtual int required_outcnt() const = 0;
 270 };
 271 
 272 //------------------------------IfNode-----------------------------------------
 273 // Output selected Control, based on a boolean test
 274 class IfNode : public MultiBranchNode {
 275   // Size is bigger to hold the probability field.  However, _prob does not
 276   // change the semantics so it does not appear in the hash & cmp functions.
 277   virtual uint size_of() const { return sizeof(*this); }
 278 
 279 private:
 280   ProjNode* range_check_trap_proj() {
 281     int flip_test = 0;
 282     Node* l = NULL;
 283     Node* r = NULL;
 284     return range_check_trap_proj(flip_test, l, r);
 285   }
 286 
 287   // Helper methods for fold_compares
 288   bool cmpi_folds(PhaseIterGVN* igvn);
 289   bool is_ctrl_folds(Node* ctrl, PhaseIterGVN* igvn);
 290   bool has_shared_region(ProjNode* proj, ProjNode*& success, ProjNode*& fail);
 291   bool has_only_uncommon_traps(ProjNode* proj, ProjNode*& success, ProjNode*& fail, PhaseIterGVN* igvn);
 292   Node* merge_uncommon_traps(ProjNode* proj, ProjNode* success, ProjNode* fail, PhaseIterGVN* igvn);
 293   static void improve_address_types(Node* l, Node* r, ProjNode* fail, PhaseIterGVN* igvn);
 294   bool is_cmp_with_loadrange(ProjNode* proj);
 295   bool is_null_check(ProjNode* proj, PhaseIterGVN* igvn);
 296   bool is_side_effect_free_test(ProjNode* proj, PhaseIterGVN* igvn);
 297   void reroute_side_effect_free_unc(ProjNode* proj, ProjNode* dom_proj, PhaseIterGVN* igvn);
 298   ProjNode* uncommon_trap_proj(CallStaticJavaNode*& call) const;
 299   bool fold_compares_helper(ProjNode* proj, ProjNode* success, ProjNode* fail, PhaseIterGVN* igvn);
 300 
 301 protected:
 302   ProjNode* range_check_trap_proj(int& flip, Node*& l, Node*& r);
 303   Node* Ideal_common(PhaseGVN *phase, bool can_reshape);
 304   Node* dominated_by(Node* prev_dom, PhaseIterGVN* igvn);
 305   Node* search_identical(int dist);
 306 




 260 // This class defines a MultiBranchNode, a MultiNode which yields multiple
 261 // control values. These are distinguished from other types of MultiNodes
 262 // which yield multiple values, but control is always and only projection #0.
 263 class MultiBranchNode : public MultiNode {
 264 public:
 265   MultiBranchNode( uint required ) : MultiNode(required) {
 266     init_class_id(Class_MultiBranch);
 267   }
 268   // returns required number of users to be well formed.
 269   virtual int required_outcnt() const = 0;
 270 };
 271 
 272 //------------------------------IfNode-----------------------------------------
 273 // Output selected Control, based on a boolean test
 274 class IfNode : public MultiBranchNode {
 275   // Size is bigger to hold the probability field.  However, _prob does not
 276   // change the semantics so it does not appear in the hash & cmp functions.
 277   virtual uint size_of() const { return sizeof(*this); }
 278 
 279 private:







 280   // Helper methods for fold_compares
 281   bool cmpi_folds(PhaseIterGVN* igvn);
 282   bool is_ctrl_folds(Node* ctrl, PhaseIterGVN* igvn);
 283   bool has_shared_region(ProjNode* proj, ProjNode*& success, ProjNode*& fail);
 284   bool has_only_uncommon_traps(ProjNode* proj, ProjNode*& success, ProjNode*& fail, PhaseIterGVN* igvn);
 285   Node* merge_uncommon_traps(ProjNode* proj, ProjNode* success, ProjNode* fail, PhaseIterGVN* igvn);
 286   static void improve_address_types(Node* l, Node* r, ProjNode* fail, PhaseIterGVN* igvn);
 287   bool is_cmp_with_loadrange(ProjNode* proj);
 288   bool is_null_check(ProjNode* proj, PhaseIterGVN* igvn);
 289   bool is_side_effect_free_test(ProjNode* proj, PhaseIterGVN* igvn);
 290   void reroute_side_effect_free_unc(ProjNode* proj, ProjNode* dom_proj, PhaseIterGVN* igvn);
 291   ProjNode* uncommon_trap_proj(CallStaticJavaNode*& call) const;
 292   bool fold_compares_helper(ProjNode* proj, ProjNode* success, ProjNode* fail, PhaseIterGVN* igvn);
 293 
 294 protected:
 295   ProjNode* range_check_trap_proj(int& flip, Node*& l, Node*& r);
 296   Node* Ideal_common(PhaseGVN *phase, bool can_reshape);
 297   Node* dominated_by(Node* prev_dom, PhaseIterGVN* igvn);
 298   Node* search_identical(int dist);
 299 


< prev index next >