< prev index next >

src/hotspot/share/opto/escape.cpp

Print this page




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


< prev index next >