< prev index next >

src/hotspot/share/opto/cfgnode.hpp

Print this page




  79     const Node* r = _in[Region];
  80     if (r == NULL)
  81       return nonnull_req();
  82     return NULL;  // not a copy!
  83   }
  84   PhiNode* has_phi() const;        // returns an arbitrary phi user, or NULL
  85   PhiNode* has_unique_phi() const; // returns the unique phi user, or NULL
  86   // Is this region node unreachable from root?
  87   bool is_unreachable_region(PhaseGVN *phase) const;
  88   virtual int Opcode() const;
  89   virtual bool pinned() const { return (const Node *)in(0) == this; }
  90   virtual bool  is_CFG   () const { return true; }
  91   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
  92   virtual bool depends_only_on_test() const { return false; }
  93   virtual const Type *bottom_type() const { return Type::CONTROL; }
  94   virtual const Type* Value(PhaseGVN* phase) const;
  95   virtual Node* Identity(PhaseGVN* phase);
  96   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
  97   virtual const RegMask &out_RegMask() const;
  98   bool try_clean_mem_phi(PhaseGVN *phase);

  99 };
 100 
 101 //------------------------------JProjNode--------------------------------------
 102 // jump projection for node that produces multiple control-flow paths
 103 class JProjNode : public ProjNode {
 104  public:
 105   JProjNode( Node* ctrl, uint idx ) : ProjNode(ctrl,idx) {}
 106   virtual int Opcode() const;
 107   virtual bool  is_CFG() const { return true; }
 108   virtual uint  hash() const { return NO_HASH; }  // CFG nodes do not hash
 109   virtual const Node* is_block_proj() const { return in(0); }
 110   virtual const RegMask& out_RegMask() const;
 111   virtual uint  ideal_reg() const { return 0; }
 112 };
 113 
 114 //------------------------------PhiNode----------------------------------------
 115 // PhiNodes merge values from different Control paths.  Slot 0 points to the
 116 // controlling RegionNode.  Other slots map 1-for-1 with incoming control flow
 117 // paths to the RegionNode.  For speed reasons (to avoid another pass) we
 118 // can turn PhiNodes into copys in-place by NULL'ing out their RegionNode




  79     const Node* r = _in[Region];
  80     if (r == NULL)
  81       return nonnull_req();
  82     return NULL;  // not a copy!
  83   }
  84   PhiNode* has_phi() const;        // returns an arbitrary phi user, or NULL
  85   PhiNode* has_unique_phi() const; // returns the unique phi user, or NULL
  86   // Is this region node unreachable from root?
  87   bool is_unreachable_region(PhaseGVN *phase) const;
  88   virtual int Opcode() const;
  89   virtual bool pinned() const { return (const Node *)in(0) == this; }
  90   virtual bool  is_CFG   () const { return true; }
  91   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
  92   virtual bool depends_only_on_test() const { return false; }
  93   virtual const Type *bottom_type() const { return Type::CONTROL; }
  94   virtual const Type* Value(PhaseGVN* phase) const;
  95   virtual Node* Identity(PhaseGVN* phase);
  96   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
  97   virtual const RegMask &out_RegMask() const;
  98   bool try_clean_mem_phi(PhaseGVN *phase);
  99   bool optimize_trichotomy(PhaseIterGVN* igvn);
 100 };
 101 
 102 //------------------------------JProjNode--------------------------------------
 103 // jump projection for node that produces multiple control-flow paths
 104 class JProjNode : public ProjNode {
 105  public:
 106   JProjNode( Node* ctrl, uint idx ) : ProjNode(ctrl,idx) {}
 107   virtual int Opcode() const;
 108   virtual bool  is_CFG() const { return true; }
 109   virtual uint  hash() const { return NO_HASH; }  // CFG nodes do not hash
 110   virtual const Node* is_block_proj() const { return in(0); }
 111   virtual const RegMask& out_RegMask() const;
 112   virtual uint  ideal_reg() const { return 0; }
 113 };
 114 
 115 //------------------------------PhiNode----------------------------------------
 116 // PhiNodes merge values from different Control paths.  Slot 0 points to the
 117 // controlling RegionNode.  Other slots map 1-for-1 with incoming control flow
 118 // paths to the RegionNode.  For speed reasons (to avoid another pass) we
 119 // can turn PhiNodes into copys in-place by NULL'ing out their RegionNode


< prev index next >