< prev index next >

src/hotspot/share/ci/ciTypeFlow.cpp

Print this page

        

*** 271,280 **** --- 271,286 ---- // kind is their least common ancestor. The meet of two types of // different kinds is always java.lang.Object. ciType* ciTypeFlow::StateVector::type_meet_internal(ciType* t1, ciType* t2, ciTypeFlow* analyzer) { assert(t1 != t2, "checked in caller"); + // Unwrap the types after gathering nullness information + bool never_null1 = t1->is_never_null(); + bool never_null2 = t2->is_never_null(); + t1 = t1->unwrap(); + t2 = t2->unwrap(); + if (t1->equals(top_type())) { return t2; } else if (t2->equals(top_type())) { return t1; } else if (t1->is_primitive_type() || t2->is_primitive_type()) {
*** 293,308 **** // At least one of the two types is a non-top primitive type. // The other type is not equal to it. Fall to bottom. return bottom_type(); } - // Unwrap the types after gathering nullness information - bool never_null1 = t1->is_never_null(); - bool never_null2 = t2->is_never_null(); - t1 = t1->unwrap(); - t2 = t2->unwrap(); - // Both types are non-top non-primitive types. That is, // both types are either instanceKlasses or arrayKlasses. ciKlass* object_klass = analyzer->env()->Object_klass(); ciKlass* k1 = t1->as_klass(); ciKlass* k2 = t2->as_klass(); --- 299,308 ----
*** 626,639 **** // 1) C2 uses do_null_assert() and continues compilation for later blocks // 2) C2 does an OSR compile in a later block (see bug 4778368). pop_object(); do_null_assert(klass); } else { ! pop_object(); ! if (str->is_klass_never_null()) { // Casting to a Q-Type contains a NULL check - assert(klass->is_valuetype(), "must be a value type"); push(outer()->mark_as_never_null(klass)); } else { push_object(klass); } } --- 626,638 ---- // 1) C2 uses do_null_assert() and continues compilation for later blocks // 2) C2 does an OSR compile in a later block (see bug 4778368). pop_object(); do_null_assert(klass); } else { ! ciType* type = pop_value(); ! if (klass->is_valuetype() && (str->is_klass_never_null() || type->is_never_null())) { // Casting to a Q-Type contains a NULL check push(outer()->mark_as_never_null(klass)); } else { push_object(klass); } }
< prev index next >