1721 tmp_jvms->set_should_reexecute(true);
1722 map()->set_jvms(tmp_jvms);
1723 // Execution needs to restart a the next bytecode (entry of next
1724 // block)
1725 if (target->is_merged() ||
1726 pnum > PhiNode::Input ||
1727 target->is_handler() ||
1728 target->is_loop_head()) {
1729 set_parse_bci(target->start());
1730 for (uint j = TypeFunc::Parms; j < map()->req(); j++) {
1731 Node* n = map()->in(j); // Incoming change to target state.
1732 const Type* t = NULL;
1733 if (tmp_jvms->is_loc(j)) {
1734 t = target->local_type_at(j - tmp_jvms->locoff());
1735 } else if (tmp_jvms->is_stk(j) && j < (uint)sp() + tmp_jvms->stkoff()) {
1736 t = target->stack_type_at(j - tmp_jvms->stkoff());
1737 }
1738 if (t != NULL && t != Type::BOTTOM) {
1739 if (n->is_ValueType() && !t->isa_valuetype()) {
1740 // Allocate value type in src block to be able to merge it with oop in target block
1741 ValueTypeBaseNode* vt = n->as_ValueType()->allocate(this, true);
1742 map()->set_req(j, ValueTypePtrNode::make_from_value_type(_gvn, vt->as_ValueType()));
1743 }
1744 if (t->isa_valuetype() && !n->is_ValueType()) {
1745 // check for a null constant
1746 assert(n->bottom_type()->remove_speculative() == TypePtr::NULL_PTR, "Anything other than null?");
1747 uncommon_trap(Deoptimization::Reason_null_check, Deoptimization::Action_none);
1748 assert(stopped(), "should be a dead path now");
1749 set_parse_bci(old_bci);
1750 return;
1751 }
1752 }
1753 }
1754 }
1755 map()->set_jvms(old_jvms);
1756 set_parse_bci(old_bci);
1757
1758 if (!target->is_merged()) { // No prior mapping at this bci
1759 if (TraceOptoParse) { tty->print(" with empty state"); }
1760
1761 // If this path is dead, do not bother capturing it as a merge.
1762 // It is "as if" we had 1 fewer predecessors from the beginning.
|
1721 tmp_jvms->set_should_reexecute(true);
1722 map()->set_jvms(tmp_jvms);
1723 // Execution needs to restart a the next bytecode (entry of next
1724 // block)
1725 if (target->is_merged() ||
1726 pnum > PhiNode::Input ||
1727 target->is_handler() ||
1728 target->is_loop_head()) {
1729 set_parse_bci(target->start());
1730 for (uint j = TypeFunc::Parms; j < map()->req(); j++) {
1731 Node* n = map()->in(j); // Incoming change to target state.
1732 const Type* t = NULL;
1733 if (tmp_jvms->is_loc(j)) {
1734 t = target->local_type_at(j - tmp_jvms->locoff());
1735 } else if (tmp_jvms->is_stk(j) && j < (uint)sp() + tmp_jvms->stkoff()) {
1736 t = target->stack_type_at(j - tmp_jvms->stkoff());
1737 }
1738 if (t != NULL && t != Type::BOTTOM) {
1739 if (n->is_ValueType() && !t->isa_valuetype()) {
1740 // Allocate value type in src block to be able to merge it with oop in target block
1741 map()->set_req(j, ValueTypePtrNode::make_from_value_type(this, n->as_ValueType(), true));
1742 }
1743 if (t->isa_valuetype() && !n->is_ValueType()) {
1744 // check for a null constant
1745 assert(n->bottom_type()->remove_speculative() == TypePtr::NULL_PTR, "Anything other than null?");
1746 uncommon_trap(Deoptimization::Reason_null_check, Deoptimization::Action_none);
1747 assert(stopped(), "should be a dead path now");
1748 set_parse_bci(old_bci);
1749 return;
1750 }
1751 }
1752 }
1753 }
1754 map()->set_jvms(old_jvms);
1755 set_parse_bci(old_bci);
1756
1757 if (!target->is_merged()) { // No prior mapping at this bci
1758 if (TraceOptoParse) { tty->print(" with empty state"); }
1759
1760 // If this path is dead, do not bother capturing it as a merge.
1761 // It is "as if" we had 1 fewer predecessors from the beginning.
|