< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page

1676     rawmem = new ProjNode(call, TypeFunc::Memory);
1677     transform_later(rawmem);
1678   }
1679 }
1680 
1681 // Helper for PhaseMacroExpand::expand_allocate_common.
1682 // Initializes the newly-allocated storage.
1683 Node*
1684 PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1685                                     Node* control, Node* rawmem, Node* object,
1686                                     Node* klass_node, Node* length,
1687                                     Node* size_in_bytes) {
1688   InitializeNode* init = alloc->initialization();
1689   // Store the klass & mark bits
1690   Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem);
1691   if (!mark_node->is_Con()) {
1692     transform_later(mark_node);
1693   }
1694   rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1695 
1696   rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA);



1697   int header_size = alloc->minimum_header_size();  // conservatively small
1698 
1699   // Array length
1700   if (length != nullptr) {         // Arrays need length field
1701     rawmem = make_store(control, rawmem, object, arrayOopDesc::length_offset_in_bytes(), length, T_INT);
1702     // conservatively small header size:
1703     header_size = arrayOopDesc::base_offset_in_bytes(T_BYTE);
1704     if (_igvn.type(klass_node)->isa_aryklassptr()) {   // we know the exact header size in most cases:
1705       BasicType elem = _igvn.type(klass_node)->is_klassptr()->as_instance_type()->isa_aryptr()->elem()->array_element_basic_type();
1706       if (is_reference_type(elem, true)) {
1707         elem = T_OBJECT;
1708       }
1709       header_size = Klass::layout_helper_header_size(Klass::array_layout_helper(elem));
1710     }
1711   }
1712 
1713   // Clear the object body, if necessary.
1714   if (init == nullptr) {
1715     // The init has somehow disappeared; be cautious and clear everything.
1716     //

1676     rawmem = new ProjNode(call, TypeFunc::Memory);
1677     transform_later(rawmem);
1678   }
1679 }
1680 
1681 // Helper for PhaseMacroExpand::expand_allocate_common.
1682 // Initializes the newly-allocated storage.
1683 Node*
1684 PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1685                                     Node* control, Node* rawmem, Node* object,
1686                                     Node* klass_node, Node* length,
1687                                     Node* size_in_bytes) {
1688   InitializeNode* init = alloc->initialization();
1689   // Store the klass & mark bits
1690   Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem);
1691   if (!mark_node->is_Con()) {
1692     transform_later(mark_node);
1693   }
1694   rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1695 
1696   if (!UseCompactObjectHeaders) {
1697     rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA);
1698   }
1699 
1700   int header_size = alloc->minimum_header_size();  // conservatively small
1701 
1702   // Array length
1703   if (length != nullptr) {         // Arrays need length field
1704     rawmem = make_store(control, rawmem, object, arrayOopDesc::length_offset_in_bytes(), length, T_INT);
1705     // conservatively small header size:
1706     header_size = arrayOopDesc::base_offset_in_bytes(T_BYTE);
1707     if (_igvn.type(klass_node)->isa_aryklassptr()) {   // we know the exact header size in most cases:
1708       BasicType elem = _igvn.type(klass_node)->is_klassptr()->as_instance_type()->isa_aryptr()->elem()->array_element_basic_type();
1709       if (is_reference_type(elem, true)) {
1710         elem = T_OBJECT;
1711       }
1712       header_size = Klass::layout_helper_header_size(Klass::array_layout_helper(elem));
1713     }
1714   }
1715 
1716   // Clear the object body, if necessary.
1717   if (init == nullptr) {
1718     // The init has somehow disappeared; be cautious and clear everything.
1719     //
< prev index next >