< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page




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));


< prev index next >