< prev index next >

src/hotspot/share/opto/cfgnode.hpp

Print this page

126   friend class PhaseRenumberLive;
127 
128   const TypePtr* const _adr_type; // non-null only for Type::MEMORY nodes.
129   // The following fields are only used for data PhiNodes to indicate
130   // that the PhiNode represents the value of a known instance field.
131         int _inst_mem_id; // Instance memory id (node index of the memory Phi)
132         int _inst_id;     // Instance id of the memory slice.
133   const int _inst_index;  // Alias index of the instance memory slice.
134   // Array elements references have the same alias_idx but different offset.
135   const int _inst_offset; // Offset of the instance memory slice.
136   // Size is bigger to hold the _adr_type field.
137   virtual uint hash() const;    // Check the type
138   virtual bool cmp( const Node &n ) const;
139   virtual uint size_of() const { return sizeof(*this); }
140 
141   // Determine if CMoveNode::is_cmove_id can be used at this join point.
142   Node* is_cmove_id(PhaseTransform* phase, int true_path);
143   bool wait_for_region_igvn(PhaseGVN* phase);
144   bool is_data_loop(RegionNode* r, Node* uin, const PhaseGVN* phase);
145 



146 public:
147   // Node layout (parallels RegionNode):
148   enum { Region,                // Control input is the Phi's region.
149          Input                  // Input values are [1..len)
150   };
151 
152   PhiNode( Node *r, const Type *t, const TypePtr* at = NULL,
153            const int imid = -1,
154            const int iid = TypeOopPtr::InstanceTop,
155            const int iidx = Compile::AliasIdxTop,
156            const int ioffs = Type::OffsetTop )
157     : TypeNode(t,r->req()),
158       _adr_type(at),
159       _inst_mem_id(imid),
160       _inst_id(iid),
161       _inst_index(iidx),
162       _inst_offset(ioffs)
163   {
164     init_class_id(Class_Phi);
165     init_req(0, r);

126   friend class PhaseRenumberLive;
127 
128   const TypePtr* const _adr_type; // non-null only for Type::MEMORY nodes.
129   // The following fields are only used for data PhiNodes to indicate
130   // that the PhiNode represents the value of a known instance field.
131         int _inst_mem_id; // Instance memory id (node index of the memory Phi)
132         int _inst_id;     // Instance id of the memory slice.
133   const int _inst_index;  // Alias index of the instance memory slice.
134   // Array elements references have the same alias_idx but different offset.
135   const int _inst_offset; // Offset of the instance memory slice.
136   // Size is bigger to hold the _adr_type field.
137   virtual uint hash() const;    // Check the type
138   virtual bool cmp( const Node &n ) const;
139   virtual uint size_of() const { return sizeof(*this); }
140 
141   // Determine if CMoveNode::is_cmove_id can be used at this join point.
142   Node* is_cmove_id(PhaseTransform* phase, int true_path);
143   bool wait_for_region_igvn(PhaseGVN* phase);
144   bool is_data_loop(RegionNode* r, Node* uin, const PhaseGVN* phase);
145 
146   static Node* clone_through_phi(Node* root_phi, const Type* t, uint c, PhaseIterGVN* igvn);
147   static Node* merge_through_phi(Node* root_phi, PhaseIterGVN* igvn);
148 
149 public:
150   // Node layout (parallels RegionNode):
151   enum { Region,                // Control input is the Phi's region.
152          Input                  // Input values are [1..len)
153   };
154 
155   PhiNode( Node *r, const Type *t, const TypePtr* at = NULL,
156            const int imid = -1,
157            const int iid = TypeOopPtr::InstanceTop,
158            const int iidx = Compile::AliasIdxTop,
159            const int ioffs = Type::OffsetTop )
160     : TypeNode(t,r->req()),
161       _adr_type(at),
162       _inst_mem_id(imid),
163       _inst_id(iid),
164       _inst_index(iidx),
165       _inst_offset(ioffs)
166   {
167     init_class_id(Class_Phi);
168     init_req(0, r);
< prev index next >