1466 ptr = TypePtr::BotPTR; |
1466 ptr = TypePtr::BotPTR; |
1467 } else if( offset == oopDesc::mark_offset_in_bytes() ) { |
1467 } else if( offset == oopDesc::mark_offset_in_bytes() ) { |
1468 tj = TypeInstPtr::MARK; |
1468 tj = TypeInstPtr::MARK; |
1469 ta = TypeAryPtr::RANGE; // generic ignored junk |
1469 ta = TypeAryPtr::RANGE; // generic ignored junk |
1470 ptr = TypePtr::BotPTR; |
1470 ptr = TypePtr::BotPTR; |
|
1471 } else if (BarrierSet::barrier_set()->barrier_set_c2()->flatten_gc_alias_type(tj)) { |
|
1472 ta = tj->isa_aryptr(); |
1471 } else { // Random constant offset into array body |
1473 } else { // Random constant offset into array body |
1472 offset = Type::OffsetBot; // Flatten constant access into array body |
1474 offset = Type::OffsetBot; // Flatten constant access into array body |
1473 tj = ta = TypeAryPtr::make(ptr,ta->ary(),ta->klass(),false,offset); |
1475 tj = ta = TypeAryPtr::make(ptr,ta->ary(),ta->klass(),false,offset); |
1474 } |
1476 } |
1475 } |
1477 } |
1530 // First handle header references such as a LoadKlassNode, even if the |
1532 // First handle header references such as a LoadKlassNode, even if the |
1531 // object's klass is unloaded at compile time (4965979). |
1533 // object's klass is unloaded at compile time (4965979). |
1532 if (!is_known_inst) { // Do it only for non-instance types |
1534 if (!is_known_inst) { // Do it only for non-instance types |
1533 tj = to = TypeInstPtr::make(TypePtr::BotPTR, env()->Object_klass(), false, NULL, offset); |
1535 tj = to = TypeInstPtr::make(TypePtr::BotPTR, env()->Object_klass(), false, NULL, offset); |
1534 } |
1536 } |
|
1537 } else if (BarrierSet::barrier_set()->barrier_set_c2()->flatten_gc_alias_type(tj)) { |
|
1538 to = tj->is_instptr(); |
1535 } else if (offset < 0 || offset >= k->size_helper() * wordSize) { |
1539 } else if (offset < 0 || offset >= k->size_helper() * wordSize) { |
1536 // Static fields are in the space above the normal instance |
1540 // Static fields are in the space above the normal instance |
1537 // fields in the java.lang.Class instance. |
1541 // fields in the java.lang.Class instance. |
1538 if (to->klass() != ciEnv::current()->Class_klass()) { |
1542 if (to->klass() != ciEnv::current()->Class_klass()) { |
1539 to = NULL; |
1543 to = NULL; |
1628 (offset == Type::OffsetBot && tj->base() == Type::AryPtr) || |
1632 (offset == Type::OffsetBot && tj->base() == Type::AryPtr) || |
1629 (offset == Type::OffsetBot && tj == TypeOopPtr::BOTTOM) || |
1633 (offset == Type::OffsetBot && tj == TypeOopPtr::BOTTOM) || |
1630 (offset == Type::OffsetBot && tj == TypePtr::BOTTOM) || |
1634 (offset == Type::OffsetBot && tj == TypePtr::BOTTOM) || |
1631 (offset == oopDesc::mark_offset_in_bytes() && tj->base() == Type::AryPtr) || |
1635 (offset == oopDesc::mark_offset_in_bytes() && tj->base() == Type::AryPtr) || |
1632 (offset == oopDesc::klass_offset_in_bytes() && tj->base() == Type::AryPtr) || |
1636 (offset == oopDesc::klass_offset_in_bytes() && tj->base() == Type::AryPtr) || |
1633 (offset == arrayOopDesc::length_offset_in_bytes() && tj->base() == Type::AryPtr) , |
1637 (offset == arrayOopDesc::length_offset_in_bytes() && tj->base() == Type::AryPtr) || |
|
1638 (BarrierSet::barrier_set()->barrier_set_c2()->verify_gc_alias_type(tj, offset)), |
1634 "For oops, klasses, raw offset must be constant; for arrays the offset is never known" ); |
1639 "For oops, klasses, raw offset must be constant; for arrays the offset is never known" ); |
1635 assert( tj->ptr() != TypePtr::TopPTR && |
1640 assert( tj->ptr() != TypePtr::TopPTR && |
1636 tj->ptr() != TypePtr::AnyNull && |
1641 tj->ptr() != TypePtr::AnyNull && |
1637 tj->ptr() != TypePtr::Null, "No imprecise addresses" ); |
1642 tj->ptr() != TypePtr::Null, "No imprecise addresses" ); |
1638 // assert( tj->ptr() != TypePtr::Constant || |
1643 // assert( tj->ptr() != TypePtr::Constant || |