< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page

1644     rawmem = new ProjNode(call, TypeFunc::Memory);
1645     transform_later(rawmem);
1646   }
1647 }
1648 
1649 // Helper for PhaseMacroExpand::expand_allocate_common.
1650 // Initializes the newly-allocated storage.
1651 Node*
1652 PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1653                                     Node* control, Node* rawmem, Node* object,
1654                                     Node* klass_node, Node* length,
1655                                     Node* size_in_bytes) {
1656   InitializeNode* init = alloc->initialization();
1657   // Store the klass & mark bits
1658   Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem);
1659   if (!mark_node->is_Con()) {
1660     transform_later(mark_node);
1661   }
1662   rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1663 
1664   rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA);



1665   int header_size = alloc->minimum_header_size();  // conservatively small
1666 
1667   // Array length
1668   if (length != NULL) {         // Arrays need length field
1669     rawmem = make_store(control, rawmem, object, arrayOopDesc::length_offset_in_bytes(), length, T_INT);
1670     // conservatively small header size:
1671     header_size = arrayOopDesc::base_offset_in_bytes(T_BYTE);
1672     if (_igvn.type(klass_node)->isa_aryklassptr()) {   // we know the exact header size in most cases:
1673       BasicType elem = _igvn.type(klass_node)->is_klassptr()->as_instance_type()->isa_aryptr()->elem()->array_element_basic_type();
1674       if (is_reference_type(elem, true)) {
1675         elem = T_OBJECT;
1676       }
1677       header_size = Klass::layout_helper_header_size(Klass::array_layout_helper(elem));
1678     }
1679   }
1680 
1681   // Clear the object body, if necessary.
1682   if (init == NULL) {
1683     // The init has somehow disappeared; be cautious and clear everything.
1684     //

1644     rawmem = new ProjNode(call, TypeFunc::Memory);
1645     transform_later(rawmem);
1646   }
1647 }
1648 
1649 // Helper for PhaseMacroExpand::expand_allocate_common.
1650 // Initializes the newly-allocated storage.
1651 Node*
1652 PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1653                                     Node* control, Node* rawmem, Node* object,
1654                                     Node* klass_node, Node* length,
1655                                     Node* size_in_bytes) {
1656   InitializeNode* init = alloc->initialization();
1657   // Store the klass & mark bits
1658   Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem);
1659   if (!mark_node->is_Con()) {
1660     transform_later(mark_node);
1661   }
1662   rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1663 
1664   if (!UseCompactObjectHeaders) {
1665     rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA);
1666   }
1667 
1668   int header_size = alloc->minimum_header_size();  // conservatively small
1669 
1670   // Array length
1671   if (length != NULL) {         // Arrays need length field
1672     rawmem = make_store(control, rawmem, object, arrayOopDesc::length_offset_in_bytes(), length, T_INT);
1673     // conservatively small header size:
1674     header_size = arrayOopDesc::base_offset_in_bytes(T_BYTE);
1675     if (_igvn.type(klass_node)->isa_aryklassptr()) {   // we know the exact header size in most cases:
1676       BasicType elem = _igvn.type(klass_node)->is_klassptr()->as_instance_type()->isa_aryptr()->elem()->array_element_basic_type();
1677       if (is_reference_type(elem, true)) {
1678         elem = T_OBJECT;
1679       }
1680       header_size = Klass::layout_helper_header_size(Klass::array_layout_helper(elem));
1681     }
1682   }
1683 
1684   // Clear the object body, if necessary.
1685   if (init == NULL) {
1686     // The init has somehow disappeared; be cautious and clear everything.
1687     //
< prev index next >