650 _igvn->type(n->in(TypeFunc::Parms))->isa_oopptr()) { 651 // Treat Return value as LocalVar with GlobalEscape escape state. 652 add_local_var_and_edge(n, PointsToNode::GlobalEscape, 653 n->in(TypeFunc::Parms), NULL); 654 break; 655 } 656 ELSE_FAIL("Op_Return"); 657 } 658 case Op_StoreP: 659 case Op_StoreN: 660 case Op_StoreNKlass: 661 case Op_StorePConditional: 662 case Op_CompareAndExchangeP: 663 case Op_CompareAndExchangeN: 664 case Op_CompareAndSwapP: 665 case Op_CompareAndSwapN: 666 case Op_WeakCompareAndSwapP: 667 case Op_WeakCompareAndSwapN: 668 case Op_GetAndSetP: 669 case Op_GetAndSetN: { 670 Node* adr = n->in(MemNode::Address); 671 if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN || 672 opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) { 673 add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL); 674 } 675 if (add_final_edges_unsafe_access(n, opcode)) { 676 break; 677 } 678 ELSE_FAIL("Op_StoreP"); 679 } 680 case Op_AryEq: 681 case Op_HasNegatives: 682 case Op_StrComp: 683 case Op_StrEquals: 684 case Op_StrIndexOf: 685 case Op_StrIndexOfChar: 686 case Op_StrInflatedCopy: 687 case Op_StrCompressedCopy: 688 case Op_EncodeISOArray: { 689 // char[]/byte[] arrays passed to string intrinsic do not escape but 690 // they are not scalar replaceable. Adjust escape state for them. 691 // Start from in(2) edge since in(1) is memory edge. 692 for (uint i = 2; i < n->req(); i++) { 693 Node* adr = n->in(i); 694 const Type* at = _igvn->type(adr); | 650 _igvn->type(n->in(TypeFunc::Parms))->isa_oopptr()) { 651 // Treat Return value as LocalVar with GlobalEscape escape state. 652 add_local_var_and_edge(n, PointsToNode::GlobalEscape, 653 n->in(TypeFunc::Parms), NULL); 654 break; 655 } 656 ELSE_FAIL("Op_Return"); 657 } 658 case Op_StoreP: 659 case Op_StoreN: 660 case Op_StoreNKlass: 661 case Op_StorePConditional: 662 case Op_CompareAndExchangeP: 663 case Op_CompareAndExchangeN: 664 case Op_CompareAndSwapP: 665 case Op_CompareAndSwapN: 666 case Op_WeakCompareAndSwapP: 667 case Op_WeakCompareAndSwapN: 668 case Op_GetAndSetP: 669 case Op_GetAndSetN: { 670 if (add_final_edges_unsafe_access(n, opcode)) { 671 break; 672 } 673 ELSE_FAIL("Op_StoreP"); 674 } 675 case Op_AryEq: 676 case Op_HasNegatives: 677 case Op_StrComp: 678 case Op_StrEquals: 679 case Op_StrIndexOf: 680 case Op_StrIndexOfChar: 681 case Op_StrInflatedCopy: 682 case Op_StrCompressedCopy: 683 case Op_EncodeISOArray: { 684 // char[]/byte[] arrays passed to string intrinsic do not escape but 685 // they are not scalar replaceable. Adjust escape state for them. 686 // Start from in(2) edge since in(1) is memory edge. 687 for (uint i = 2; i < n->req(); i++) { 688 Node* adr = n->in(i); 689 const Type* at = _igvn->type(adr); |