< prev index next >

src/hotspot/share/opto/valuetypenode.cpp

Print this page




 214       } else {
 215         // Add non-flattened value type field to the worklist to process later
 216         worklist.push(value);
 217       }
 218     }
 219     sfpt->add_req(value);
 220   }
 221   jvms->set_endoff(sfpt->req());
 222   if (gvn != NULL) {
 223     sobj = gvn->transform(sobj)->as_SafePointScalarObject();
 224     gvn->igvn_rehash_node_delayed(sfpt);
 225   }
 226   return sfpt->replace_edges_in_range(this, sobj, start, end);
 227 }
 228 
 229 void ValueTypeBaseNode::make_scalar_in_safepoints(Node* root, PhaseGVN* gvn) {
 230   // Process all safepoint uses and scalarize value type
 231   Unique_Node_List worklist;
 232   for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
 233     Node* u = fast_out(i);
 234     if (u->is_SafePoint() && (!u->is_Call() || u->as_Call()->has_debug_use(this))) {
 235       SafePointNode* sfpt = u->as_SafePoint();
 236       Node* in_oop = get_oop();
 237       const Type* oop_type = in_oop->bottom_type();
 238       assert(Opcode() == Op_ValueTypePtr || !isa_ValueType()->is_allocated(gvn), "already heap allocated value types should be linked directly");
 239       int nb = make_scalar_in_safepoint(worklist, sfpt, root, gvn);
 240       --i; imax -= nb;
 241     }
 242   }
 243   // Now scalarize non-flattened fields
 244   for (uint i = 0; i < worklist.size(); ++i) {
 245     Node* vt = worklist.at(i);
 246     vt->as_ValueType()->make_scalar_in_safepoints(root, gvn);
 247   }
 248 }
 249 
 250 void ValueTypeBaseNode::initialize(GraphKit* kit, MultiNode* multi, ciValueKlass* vk, int base_offset, int base_input, bool in) {
 251   assert(base_offset >= 0, "offset in value type must be positive");
 252   PhaseGVN& gvn = kit->gvn();
 253   for (uint i = 0; i < field_count(); i++) {
 254     ciType* ft = field_type(i);




 214       } else {
 215         // Add non-flattened value type field to the worklist to process later
 216         worklist.push(value);
 217       }
 218     }
 219     sfpt->add_req(value);
 220   }
 221   jvms->set_endoff(sfpt->req());
 222   if (gvn != NULL) {
 223     sobj = gvn->transform(sobj)->as_SafePointScalarObject();
 224     gvn->igvn_rehash_node_delayed(sfpt);
 225   }
 226   return sfpt->replace_edges_in_range(this, sobj, start, end);
 227 }
 228 
 229 void ValueTypeBaseNode::make_scalar_in_safepoints(Node* root, PhaseGVN* gvn) {
 230   // Process all safepoint uses and scalarize value type
 231   Unique_Node_List worklist;
 232   for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
 233     Node* u = fast_out(i);
 234     if (u->is_SafePoint() && !u->is_CallLeaf() && (!u->is_Call() || u->as_Call()->has_debug_use(this))) {
 235       SafePointNode* sfpt = u->as_SafePoint();
 236       Node* in_oop = get_oop();
 237       const Type* oop_type = in_oop->bottom_type();
 238       assert(Opcode() == Op_ValueTypePtr || !isa_ValueType()->is_allocated(gvn), "already heap allocated value types should be linked directly");
 239       int nb = make_scalar_in_safepoint(worklist, sfpt, root, gvn);
 240       --i; imax -= nb;
 241     }
 242   }
 243   // Now scalarize non-flattened fields
 244   for (uint i = 0; i < worklist.size(); ++i) {
 245     Node* vt = worklist.at(i);
 246     vt->as_ValueType()->make_scalar_in_safepoints(root, gvn);
 247   }
 248 }
 249 
 250 void ValueTypeBaseNode::initialize(GraphKit* kit, MultiNode* multi, ciValueKlass* vk, int base_offset, int base_input, bool in) {
 251   assert(base_offset >= 0, "offset in value type must be positive");
 252   PhaseGVN& gvn = kit->gvn();
 253   for (uint i = 0; i < field_count(); i++) {
 254     ciType* ft = field_type(i);


< prev index next >