< prev index next >

src/share/vm/opto/valuetypenode.cpp

Print this page




 403 #endif
 404                                                                       first_ind, nfields);
 405       sobj->init_req(0, C->root());
 406       // Iterate over the value type fields in order of increasing
 407       // offset and add the field values to the safepoint.
 408       for (uint j = 0; j < nfields; ++j) {
 409         int offset = vk->nonstatic_field_at(j)->offset();
 410         Node* value = field_value_by_offset(offset, true /* include flattened value type fields */);
 411         sfpt->add_req(value);
 412       }
 413       jvms->set_endoff(sfpt->req());
 414       int nb = sfpt->replace_edges_in_range(this, sobj, start, end);
 415       --i; imax -= nb;
 416     }
 417   }
 418 }
 419 
 420 void ValueTypeNode::pass_klass(Node* n, uint pos, const GraphKit& kit) {
 421   ciValueKlass* vk = value_klass();
 422   const TypeKlassPtr* tk = TypeKlassPtr::make(vk);
 423   Node* arg = kit.makecon(tk);
 424   n->init_req(pos, arg);


 425 }
 426 
 427 uint ValueTypeNode::pass_fields(Node* n, int base_input, const GraphKit& kit, ciValueKlass* base_vk, int base_offset) {
 428   ciValueKlass* vk = value_klass();
 429   if (base_vk == NULL) {
 430     base_vk = vk;
 431   }
 432   uint edges = 0;
 433   for (uint i = 0; i < field_count(); i++) {
 434     ciType* f_type = field_type(i);
 435     int offset = base_offset + field_offset(i) - (base_offset > 0 ? vk->first_field_offset() : 0);
 436     Node* arg = field_value(i);
 437     if (f_type->is_valuetype()) {
 438       ciValueKlass* embedded_vk = f_type->as_value_klass();
 439       edges += arg->as_ValueType()->pass_fields(n, base_input, kit, base_vk, offset);
 440     } else {
 441       int j = 0; int extra = 0;
 442       for (; j < base_vk->nof_nonstatic_fields(); j++) {
 443         ciField* f = base_vk->nonstatic_field_at(j);
 444         if (offset == f->offset()) {




 403 #endif
 404                                                                       first_ind, nfields);
 405       sobj->init_req(0, C->root());
 406       // Iterate over the value type fields in order of increasing
 407       // offset and add the field values to the safepoint.
 408       for (uint j = 0; j < nfields; ++j) {
 409         int offset = vk->nonstatic_field_at(j)->offset();
 410         Node* value = field_value_by_offset(offset, true /* include flattened value type fields */);
 411         sfpt->add_req(value);
 412       }
 413       jvms->set_endoff(sfpt->req());
 414       int nb = sfpt->replace_edges_in_range(this, sobj, start, end);
 415       --i; imax -= nb;
 416     }
 417   }
 418 }
 419 
 420 void ValueTypeNode::pass_klass(Node* n, uint pos, const GraphKit& kit) {
 421   ciValueKlass* vk = value_klass();
 422   const TypeKlassPtr* tk = TypeKlassPtr::make(vk);
 423   intptr_t bits = tk->get_con();
 424   bits |= 1;
 425   Node* klass_tagged = kit.MakeConX(bits);
 426   n->init_req(pos, klass_tagged);
 427 }
 428 
 429 uint ValueTypeNode::pass_fields(Node* n, int base_input, const GraphKit& kit, ciValueKlass* base_vk, int base_offset) {
 430   ciValueKlass* vk = value_klass();
 431   if (base_vk == NULL) {
 432     base_vk = vk;
 433   }
 434   uint edges = 0;
 435   for (uint i = 0; i < field_count(); i++) {
 436     ciType* f_type = field_type(i);
 437     int offset = base_offset + field_offset(i) - (base_offset > 0 ? vk->first_field_offset() : 0);
 438     Node* arg = field_value(i);
 439     if (f_type->is_valuetype()) {
 440       ciValueKlass* embedded_vk = f_type->as_value_klass();
 441       edges += arg->as_ValueType()->pass_fields(n, base_input, kit, base_vk, offset);
 442     } else {
 443       int j = 0; int extra = 0;
 444       for (; j < base_vk->nof_nonstatic_fields(); j++) {
 445         ciField* f = base_vk->nonstatic_field_at(j);
 446         if (offset == f->offset()) {


< prev index next >