< prev index next >

src/hotspot/share/opto/callnode.cpp

Print this page




1660     assert(projs->nb_resproj <= 1, "unexpected number of results");
1661     if (projs->fallthrough_catchproj != NULL) {
1662       igvn->replace_node(projs->fallthrough_catchproj, in(TypeFunc::Control));
1663     }
1664     if (projs->fallthrough_memproj != NULL) {
1665       igvn->replace_node(projs->fallthrough_memproj, in(TypeFunc::Memory));
1666     }
1667     if (projs->catchall_memproj != NULL) {
1668       igvn->replace_node(projs->catchall_memproj, phase->C->top());
1669     }
1670     if (projs->fallthrough_ioproj != NULL) {
1671       igvn->replace_node(projs->fallthrough_ioproj, in(TypeFunc::I_O));
1672     }
1673     if (projs->catchall_ioproj != NULL) {
1674       igvn->replace_node(projs->catchall_ioproj, phase->C->top());
1675     }
1676     if (projs->catchall_catchproj != NULL) {
1677       igvn->replace_node(projs->catchall_catchproj, phase->C->top());
1678     }
1679     if (projs->resproj[0] != NULL) {








1680       igvn->replace_node(projs->resproj[0], phase->C->top());
1681     }
1682     igvn->replace_node(this, phase->C->top());
1683     if (init != NULL) {
1684       Node* ctrl_proj = init->proj_out_or_null(TypeFunc::Control);
1685       Node* mem_proj = init->proj_out_or_null(TypeFunc::Memory);
1686       if (ctrl_proj != NULL) {
1687         igvn->replace_node(ctrl_proj, init->in(TypeFunc::Control));
1688       }
1689       if (mem_proj != NULL) {
1690         igvn->replace_node(mem_proj, init->in(TypeFunc::Memory));
1691       }
1692     }
1693     return NULL;
1694   }
1695 
1696   return CallNode::Ideal(phase, can_reshape);
1697 }
1698 
1699 Node *AllocateNode::make_ideal_mark(PhaseGVN *phase, Node* obj, Node* control, Node* mem) {
1700   Node* mark_node = NULL;
1701   // For now only enable fast locking for non-array types
1702   if ((EnableValhalla || UseBiasedLocking) && Opcode() == Op_Allocate) {
1703     Node* klass_node = in(AllocateNode::KlassNode);
1704     Node* proto_adr = phase->transform(new AddPNode(klass_node, klass_node, phase->MakeConX(in_bytes(Klass::prototype_header_offset()))));
1705     mark_node = LoadNode::make(*phase, control, mem, proto_adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered);
1706   } else {
1707     mark_node = phase->MakeConX(markWord::prototype().value());
1708   }
1709   mark_node = phase->transform(mark_node);
1710   // Avoid returning a constant (old node) here because this method is used by LoadNode::Ideal
1711   return new OrXNode(mark_node, phase->MakeConX(_larval ? markWord::larval_state_pattern : 0));
1712 }
1713 
1714 
1715 //=============================================================================
1716 Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) {
1717   Node* res = SafePointNode::Ideal(phase, can_reshape);
1718   if (res != NULL) {
1719     return res;




1660     assert(projs->nb_resproj <= 1, "unexpected number of results");
1661     if (projs->fallthrough_catchproj != NULL) {
1662       igvn->replace_node(projs->fallthrough_catchproj, in(TypeFunc::Control));
1663     }
1664     if (projs->fallthrough_memproj != NULL) {
1665       igvn->replace_node(projs->fallthrough_memproj, in(TypeFunc::Memory));
1666     }
1667     if (projs->catchall_memproj != NULL) {
1668       igvn->replace_node(projs->catchall_memproj, phase->C->top());
1669     }
1670     if (projs->fallthrough_ioproj != NULL) {
1671       igvn->replace_node(projs->fallthrough_ioproj, in(TypeFunc::I_O));
1672     }
1673     if (projs->catchall_ioproj != NULL) {
1674       igvn->replace_node(projs->catchall_ioproj, phase->C->top());
1675     }
1676     if (projs->catchall_catchproj != NULL) {
1677       igvn->replace_node(projs->catchall_catchproj, phase->C->top());
1678     }
1679     if (projs->resproj[0] != NULL) {
1680       // Remove MemBarStoreStore user as well
1681       for (DUIterator_Fast imax, i = projs->resproj[0]->fast_outs(imax); i < imax; i++) {
1682         MemBarStoreStoreNode* mb = projs->resproj[0]->fast_out(i)->isa_MemBarStoreStore();
1683         if (mb != NULL && mb->outcnt() == 2) {
1684           mb->remove(igvn);
1685           --i; --imax;
1686         }
1687       }
1688       igvn->replace_node(projs->resproj[0], phase->C->top());
1689     }
1690     igvn->replace_node(this, phase->C->top());
1691     if (init != NULL) {
1692       Node* ctrl_proj = init->proj_out_or_null(TypeFunc::Control);
1693       Node* mem_proj = init->proj_out_or_null(TypeFunc::Memory);
1694       if (ctrl_proj != NULL) {
1695         igvn->replace_node(ctrl_proj, init->in(TypeFunc::Control));
1696       }
1697       if (mem_proj != NULL) {
1698         igvn->replace_node(mem_proj, init->in(TypeFunc::Memory));
1699       }
1700     }
1701     return NULL;
1702   }
1703 
1704   return CallNode::Ideal(phase, can_reshape);
1705 }
1706 
1707 Node* AllocateNode::make_ideal_mark(PhaseGVN* phase, Node* control, Node* mem) {
1708   Node* mark_node = NULL;
1709   // For now only enable fast locking for non-array types
1710   if ((EnableValhalla || UseBiasedLocking) && Opcode() == Op_Allocate) {
1711     Node* klass_node = in(AllocateNode::KlassNode);
1712     Node* proto_adr = phase->transform(new AddPNode(klass_node, klass_node, phase->MakeConX(in_bytes(Klass::prototype_header_offset()))));
1713     mark_node = LoadNode::make(*phase, control, mem, proto_adr, TypeRawPtr::BOTTOM, TypeX_X, TypeX_X->basic_type(), MemNode::unordered);
1714   } else {
1715     mark_node = phase->MakeConX(markWord::prototype().value());
1716   }
1717   mark_node = phase->transform(mark_node);
1718   // Avoid returning a constant (old node) here because this method is used by LoadNode::Ideal
1719   return new OrXNode(mark_node, phase->MakeConX(_larval ? markWord::larval_state_pattern : 0));
1720 }
1721 
1722 
1723 //=============================================================================
1724 Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) {
1725   Node* res = SafePointNode::Ideal(phase, can_reshape);
1726   if (res != NULL) {
1727     return res;


< prev index next >