src/hotspot/share/opto/compile.cpp
changeset 52441 6082c529aed8
parent 52426 38bf0c9c4e64
child 52442 dc1f9dec2018
equal deleted inserted replaced
52440:f6583d7cff56 52441:6082c529aed8
  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 ||