src/share/vm/opto/escape.cpp

changeset 4159
8e47bac5643a
parent 4106
7eca5de9e0b6
child 4205
a3ecd773a7b9
     1.1 --- a/src/share/vm/opto/escape.cpp	Mon Oct 08 17:04:00 2012 -0700
     1.2 +++ b/src/share/vm/opto/escape.cpp	Tue Oct 09 10:11:38 2012 +0200
     1.3 @@ -368,7 +368,9 @@
     1.4      case Op_CastPP:
     1.5      case Op_CheckCastPP:
     1.6      case Op_EncodeP:
     1.7 -    case Op_DecodeN: {
     1.8 +    case Op_DecodeN:
     1.9 +    case Op_EncodePKlass:
    1.10 +    case Op_DecodeNKlass: {
    1.11        add_local_var_and_edge(n, PointsToNode::NoEscape,
    1.12                               n->in(1), delayed_worklist);
    1.13        break;
    1.14 @@ -381,7 +383,8 @@
    1.15        break;
    1.16      }
    1.17      case Op_ConP:
    1.18 -    case Op_ConN: {
    1.19 +    case Op_ConN:
    1.20 +    case Op_ConNKlass: {
    1.21        // assume all oop constants globally escape except for null
    1.22        PointsToNode::EscapeState es;
    1.23        if (igvn->type(n) == TypePtr::NULL_PTR ||
    1.24 @@ -458,6 +461,7 @@
    1.25      }
    1.26      case Op_StoreP:
    1.27      case Op_StoreN:
    1.28 +    case Op_StoreNKlass:
    1.29      case Op_StorePConditional:
    1.30      case Op_CompareAndSwapP:
    1.31      case Op_CompareAndSwapN: {
    1.32 @@ -465,7 +469,7 @@
    1.33        const Type *adr_type = igvn->type(adr);
    1.34        adr_type = adr_type->make_ptr();
    1.35        if (adr_type->isa_oopptr() ||
    1.36 -          (opcode == Op_StoreP || opcode == Op_StoreN) &&
    1.37 +          (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) &&
    1.38                          (adr_type == TypeRawPtr::NOTNULL &&
    1.39                           adr->in(AddPNode::Address)->is_Proj() &&
    1.40                           adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
    1.41 @@ -572,7 +576,9 @@
    1.42      case Op_CastPP:
    1.43      case Op_CheckCastPP:
    1.44      case Op_EncodeP:
    1.45 -    case Op_DecodeN: {
    1.46 +    case Op_DecodeN:
    1.47 +    case Op_EncodePKlass:
    1.48 +    case Op_DecodeNKlass: {
    1.49        add_local_var_and_edge(n, PointsToNode::NoEscape,
    1.50                               n->in(1), NULL);
    1.51        break;
    1.52 @@ -646,6 +652,7 @@
    1.53      }
    1.54      case Op_StoreP:
    1.55      case Op_StoreN:
    1.56 +    case Op_StoreNKlass:
    1.57      case Op_StorePConditional:
    1.58      case Op_CompareAndSwapP:
    1.59      case Op_CompareAndSwapN:
    1.60 @@ -661,7 +668,7 @@
    1.61        const Type *adr_type = _igvn->type(adr);
    1.62        adr_type = adr_type->make_ptr();
    1.63        if (adr_type->isa_oopptr() ||
    1.64 -          (opcode == Op_StoreP || opcode == Op_StoreN) &&
    1.65 +          (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) &&
    1.66                          (adr_type == TypeRawPtr::NOTNULL &&
    1.67                           adr->in(AddPNode::Address)->is_Proj() &&
    1.68                           adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
    1.69 @@ -2088,7 +2095,7 @@
    1.70      Node* uncast_base = base->uncast();
    1.71      int opcode = uncast_base->Opcode();
    1.72      assert(opcode == Op_ConP || opcode == Op_ThreadLocal ||
    1.73 -           opcode == Op_CastX2P || uncast_base->is_DecodeN() ||
    1.74 +           opcode == Op_CastX2P || uncast_base->is_DecodeNarrowPtr() ||
    1.75             (uncast_base->is_Mem() && uncast_base->bottom_type() == TypeRawPtr::NOTNULL) ||
    1.76             (uncast_base->is_Proj() && uncast_base->in(0)->is_Allocate()), "sanity");
    1.77    }
    1.78 @@ -2837,8 +2844,8 @@
    1.79          alloc_worklist.append_if_missing(use);
    1.80        } else if (use->is_Phi() ||
    1.81                   use->is_CheckCastPP() ||
    1.82 -                 use->is_EncodeP() ||
    1.83 -                 use->is_DecodeN() ||
    1.84 +                 use->is_EncodeNarrowPtr() ||
    1.85 +                 use->is_DecodeNarrowPtr() ||
    1.86                   (use->is_ConstraintCast() && use->Opcode() == Op_CastPP)) {
    1.87          alloc_worklist.append_if_missing(use);
    1.88  #ifdef ASSERT

mercurial