1689 // Plug slow-path into result merge point
1690 result_region ->init_req( slow_result_path, ctrl );
1691 result_phi_rawoop->init_req( slow_result_path, slow_result);
1692 result_phi_rawmem->init_req( slow_result_path, _memproj_fallthrough );
1693 transform_later(result_region);
1694 transform_later(result_phi_rawoop);
1695 transform_later(result_phi_rawmem);
1696 transform_later(result_phi_i_o);
1697 // This completes all paths into the result merge point
1698 }
1699
1700
1701 // Helper for PhaseMacroExpand::expand_allocate_common.
1702 // Initializes the newly-allocated storage.
1703 Node* PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1704 Node* control, Node* rawmem, Node* object,
1705 Node* klass_node, Node* length,
1706 Node* size_in_bytes) {
1707 InitializeNode* init = alloc->initialization();
1708 // Store the klass & mark bits
1709 Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem);
1710 if (!mark_node->is_Con()) {
1711 transform_later(mark_node);
1712 }
1713 rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1714
1715 BasicType bt = T_METADATA;
1716 Node* metadata = klass_node;
1717 Node* properties = alloc->in(AllocateNode::StorageProperties);
1718 if (properties != NULL) {
1719 // Encode array storage properties into klass pointer
1720 assert(EnableValhalla, "array storage properties not supported");
1721 if (UseCompressedClassPointers) {
1722 // Compress the klass pointer before inserting the storage properties value
1723 metadata = transform_later(new EncodePKlassNode(metadata, metadata->bottom_type()->make_narrowklass()));
1724 metadata = transform_later(new CastN2INode(metadata));
1725 metadata = transform_later(new OrINode(metadata, transform_later(new ConvL2INode(properties))));
1726 bt = T_INT;
1727 } else {
1728 metadata = transform_later(new CastP2XNode(NULL, metadata));
1729 metadata = transform_later(new OrXNode(metadata, properties));
|
1689 // Plug slow-path into result merge point
1690 result_region ->init_req( slow_result_path, ctrl );
1691 result_phi_rawoop->init_req( slow_result_path, slow_result);
1692 result_phi_rawmem->init_req( slow_result_path, _memproj_fallthrough );
1693 transform_later(result_region);
1694 transform_later(result_phi_rawoop);
1695 transform_later(result_phi_rawmem);
1696 transform_later(result_phi_i_o);
1697 // This completes all paths into the result merge point
1698 }
1699
1700
1701 // Helper for PhaseMacroExpand::expand_allocate_common.
1702 // Initializes the newly-allocated storage.
1703 Node* PhaseMacroExpand::initialize_object(AllocateNode* alloc,
1704 Node* control, Node* rawmem, Node* object,
1705 Node* klass_node, Node* length,
1706 Node* size_in_bytes) {
1707 InitializeNode* init = alloc->initialization();
1708 // Store the klass & mark bits
1709 Node* mark_node = alloc->make_ideal_mark(&_igvn, control, rawmem);
1710 if (!mark_node->is_Con()) {
1711 transform_later(mark_node);
1712 }
1713 rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type());
1714
1715 BasicType bt = T_METADATA;
1716 Node* metadata = klass_node;
1717 Node* properties = alloc->in(AllocateNode::StorageProperties);
1718 if (properties != NULL) {
1719 // Encode array storage properties into klass pointer
1720 assert(EnableValhalla, "array storage properties not supported");
1721 if (UseCompressedClassPointers) {
1722 // Compress the klass pointer before inserting the storage properties value
1723 metadata = transform_later(new EncodePKlassNode(metadata, metadata->bottom_type()->make_narrowklass()));
1724 metadata = transform_later(new CastN2INode(metadata));
1725 metadata = transform_later(new OrINode(metadata, transform_later(new ConvL2INode(properties))));
1726 bt = T_INT;
1727 } else {
1728 metadata = transform_later(new CastP2XNode(NULL, metadata));
1729 metadata = transform_later(new OrXNode(metadata, properties));
|