< prev index next >

src/share/vm/opto/escape.cpp

Print this page




3148                  use->is_DecodeNarrowPtr() ||
3149                  (use->is_ConstraintCast() && use->Opcode() == Op_CastPP)) {
3150         alloc_worklist.append_if_missing(use);
3151 #ifdef ASSERT
3152       } else if (use->is_Mem()) {
3153         assert(use->in(MemNode::Address) != n, "EA: missing allocation reference path");
3154       } else if (use->is_MergeMem()) {
3155         assert(_mergemem_worklist.contains(use->as_MergeMem()), "EA: missing MergeMem node in the worklist");
3156       } else if (use->is_SafePoint()) {
3157         // Look for MergeMem nodes for calls which reference unique allocation
3158         // (through CheckCastPP nodes) even for debug info.
3159         Node* m = use->in(TypeFunc::Memory);
3160         if (m->is_MergeMem()) {
3161           assert(_mergemem_worklist.contains(m->as_MergeMem()), "EA: missing MergeMem node in the worklist");
3162         }
3163       } else if (use->Opcode() == Op_EncodeISOArray) {
3164         if (use->in(MemNode::Memory) == n || use->in(3) == n) {
3165           // EncodeISOArray overwrites destination array
3166           memnode_worklist.append_if_missing(use);
3167         }






3168       } else {
3169         uint op = use->Opcode();
3170         if ((op == Op_StrCompressedCopy || op == Op_StrInflatedCopy) &&
3171             (use->in(MemNode::Memory) == n)) {
3172           // They overwrite memory edge corresponding to destination array,
3173           memnode_worklist.append_if_missing(use);
3174         } else if (!(op == Op_CmpP || op == Op_Conv2B ||
3175               op == Op_CastP2X || op == Op_StoreCM ||
3176               op == Op_FastLock || op == Op_AryEq || op == Op_StrComp || op == Op_HasNegatives ||
3177               op == Op_StrCompressedCopy || op == Op_StrInflatedCopy ||
3178               op == Op_StrEquals || op == Op_StrIndexOf || op == Op_StrIndexOfChar ||
3179               op == Op_ValueType)) {
3180           n->dump();
3181           use->dump();
3182           assert(false, "EA: missing allocation reference path");
3183         }
3184 #endif
3185       }
3186     }
3187 




3148                  use->is_DecodeNarrowPtr() ||
3149                  (use->is_ConstraintCast() && use->Opcode() == Op_CastPP)) {
3150         alloc_worklist.append_if_missing(use);
3151 #ifdef ASSERT
3152       } else if (use->is_Mem()) {
3153         assert(use->in(MemNode::Address) != n, "EA: missing allocation reference path");
3154       } else if (use->is_MergeMem()) {
3155         assert(_mergemem_worklist.contains(use->as_MergeMem()), "EA: missing MergeMem node in the worklist");
3156       } else if (use->is_SafePoint()) {
3157         // Look for MergeMem nodes for calls which reference unique allocation
3158         // (through CheckCastPP nodes) even for debug info.
3159         Node* m = use->in(TypeFunc::Memory);
3160         if (m->is_MergeMem()) {
3161           assert(_mergemem_worklist.contains(m->as_MergeMem()), "EA: missing MergeMem node in the worklist");
3162         }
3163       } else if (use->Opcode() == Op_EncodeISOArray) {
3164         if (use->in(MemNode::Memory) == n || use->in(3) == n) {
3165           // EncodeISOArray overwrites destination array
3166           memnode_worklist.append_if_missing(use);
3167         }
3168       } else if (use->Opcode() == Op_Return) {
3169         Node* klass = use->in(TypeFunc::Parms);
3170         const TypeKlassPtr* tkls = igvn->type(klass)->isa_klassptr();
3171         ciValueKlass* vk = tkls->klass()->as_value_klass();
3172         assert(_compile->tf()->returns_value_type_as_fields(), "must return a value type");
3173         assert(vk->contains_oops(), "returned value type must contain a reference field");
3174       } else {
3175         uint op = use->Opcode();
3176         if ((op == Op_StrCompressedCopy || op == Op_StrInflatedCopy) &&
3177             (use->in(MemNode::Memory) == n)) {
3178           // They overwrite memory edge corresponding to destination array,
3179           memnode_worklist.append_if_missing(use);
3180         } else if (!(op == Op_CmpP || op == Op_Conv2B ||
3181               op == Op_CastP2X || op == Op_StoreCM ||
3182               op == Op_FastLock || op == Op_AryEq || op == Op_StrComp || op == Op_HasNegatives ||
3183               op == Op_StrCompressedCopy || op == Op_StrInflatedCopy ||
3184               op == Op_StrEquals || op == Op_StrIndexOf || op == Op_StrIndexOfChar ||
3185               op == Op_ValueType)) {
3186           n->dump();
3187           use->dump();
3188           assert(false, "EA: missing allocation reference path");
3189         }
3190 #endif
3191       }
3192     }
3193 


< prev index next >