130 st->print("[%d]", o->_idx);
131 }
132 }
133 st->print("#%d", _con);
134 }
135 #endif
136
137 //----------------------------check_con----------------------------------------
138 void ProjNode::check_con() const {
139 Node* n = in(0);
140 if (n == NULL) return; // should be assert, but NodeHash makes bogons
141 if (n->is_Mach()) return; // mach. projs. are not type-safe
142 if (n->is_Start()) return; // alas, starts can have mach. projs. also
143 if (_con == SCMemProjNode::SCMEMPROJCON ) return;
144 const Type* t = n->bottom_type();
145 if (t == Type::TOP) return; // multi is dead
146 assert(_con < t->is_tuple()->cnt(), "ProjNode::_con must be in range");
147 }
148
149 //------------------------------Value------------------------------------------
150 const Type *ProjNode::Value( PhaseTransform *phase ) const {
151 if (in(0) == NULL) return Type::TOP;
152 return proj_type(phase->type(in(0)));
153 }
154
155 //------------------------------out_RegMask------------------------------------
156 // Pass the buck uphill
157 const RegMask &ProjNode::out_RegMask() const {
158 return RegMask::Empty;
159 }
160
161 //------------------------------ideal_reg--------------------------------------
162 uint ProjNode::ideal_reg() const {
163 return bottom_type()->ideal_reg();
164 }
165
166 //-------------------------------is_uncommon_trap_proj----------------------------
167 // Return uncommon trap call node if proj is for "proj->[region->..]call_uct"
168 // NULL otherwise
169 CallStaticJavaNode* ProjNode::is_uncommon_trap_proj(Deoptimization::DeoptReason reason) {
170 int path_limit = 10;
|
130 st->print("[%d]", o->_idx);
131 }
132 }
133 st->print("#%d", _con);
134 }
135 #endif
136
137 //----------------------------check_con----------------------------------------
138 void ProjNode::check_con() const {
139 Node* n = in(0);
140 if (n == NULL) return; // should be assert, but NodeHash makes bogons
141 if (n->is_Mach()) return; // mach. projs. are not type-safe
142 if (n->is_Start()) return; // alas, starts can have mach. projs. also
143 if (_con == SCMemProjNode::SCMEMPROJCON ) return;
144 const Type* t = n->bottom_type();
145 if (t == Type::TOP) return; // multi is dead
146 assert(_con < t->is_tuple()->cnt(), "ProjNode::_con must be in range");
147 }
148
149 //------------------------------Value------------------------------------------
150 const Type* ProjNode::Value(PhaseGVN* phase) const {
151 if (in(0) == NULL) return Type::TOP;
152 return proj_type(phase->type(in(0)));
153 }
154
155 //------------------------------out_RegMask------------------------------------
156 // Pass the buck uphill
157 const RegMask &ProjNode::out_RegMask() const {
158 return RegMask::Empty;
159 }
160
161 //------------------------------ideal_reg--------------------------------------
162 uint ProjNode::ideal_reg() const {
163 return bottom_type()->ideal_reg();
164 }
165
166 //-------------------------------is_uncommon_trap_proj----------------------------
167 // Return uncommon trap call node if proj is for "proj->[region->..]call_uct"
168 // NULL otherwise
169 CallStaticJavaNode* ProjNode::is_uncommon_trap_proj(Deoptimization::DeoptReason reason) {
170 int path_limit = 10;
|