< prev index next >
src/hotspot/share/opto/compile.cpp
Print this page
*** 468,478 ****
assert(compile == Compile::current(), "sanity");
compile->set_type_dict(NULL);
compile->set_clone_map(new Dict(cmpkey, hashkey, _compile->comp_arena()));
compile->clone_map().set_clone_idx(0);
- compile->set_type_hwm(NULL);
compile->set_type_last_size(0);
compile->set_last_tf(NULL, NULL);
compile->set_indexSet_arena(NULL);
compile->set_indexSet_free_block_list(NULL);
compile->init_type_arena();
--- 468,477 ----
*** 1492,1501 ****
--- 1491,1509 ----
const TypeAryPtr *ta = tj->isa_aryptr();
if (ta && ta->is_stable()) {
// Erase stability property for alias analysis.
tj = ta = ta->cast_to_stable(false);
}
+ if (ta && ta->is_not_flat()) {
+ // Erase not flat property for alias analysis.
+ tj = ta = ta->cast_to_not_flat(false);
+ }
+ if (ta && ta->is_not_null_free()) {
+ // Erase not null free property for alias analysis.
+ tj = ta = ta->cast_to_not_null_free(false);
+ }
+
if( ta && is_known_inst ) {
if ( offset != Type::OffsetBot &&
offset > arrayOopDesc::length_offset_in_bytes() ) {
offset = Type::OffsetBot; // Flatten constant access into array body only
tj = ta = TypeAryPtr::make(ptr, ta->ary(), ta->klass(), true, Type::Offset(offset), ta->field_offset(), ta->instance_id());
*** 3417,3440 ****
// Check to see if address types have grounded out somehow.
const TypeInstPtr *tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr();
assert( !tp || oop_offset_is_sane(tp), "" );
}
#endif
! if (nop == Op_LoadKlass || nop == Op_LoadNKlass) {
const TypeKlassPtr* tk = n->bottom_type()->make_ptr()->is_klassptr();
assert(!tk->klass_is_exact(), "should have been folded");
! if (tk->klass()->is_obj_array_klass() || tk->klass()->is_java_lang_Object()) {
! bool maybe_value_array = tk->klass()->is_java_lang_Object();
! if (!maybe_value_array) {
! ciArrayKlass* ak = tk->klass()->as_array_klass();
! ciKlass* elem = ak->element_klass();
! maybe_value_array = elem->is_java_lang_Object() || elem->is_interface() || elem->is_valuetype();
}
if (maybe_value_array) {
// Array load klass needs to filter out property bits (but not
! // GetNullFreePropertyNode which needs to extract the null free
! // bits)
uint last = unique();
Node* pointer = NULL;
if (nop == Op_LoadKlass) {
Node* cast = new CastP2XNode(NULL, n);
Node* masked = new LShiftXNode(cast, new ConINode(TypeInt::make(oopDesc::storage_props_nof_bits)));
--- 3425,3446 ----
// Check to see if address types have grounded out somehow.
const TypeInstPtr *tp = mem->in(MemNode::Address)->bottom_type()->isa_instptr();
assert( !tp || oop_offset_is_sane(tp), "" );
}
#endif
! if (EnableValhalla && (nop == Op_LoadKlass || nop == Op_LoadNKlass)) {
const TypeKlassPtr* tk = n->bottom_type()->make_ptr()->is_klassptr();
assert(!tk->klass_is_exact(), "should have been folded");
! ciKlass* klass = tk->klass();
! bool maybe_value_array = klass->is_java_lang_Object();
! if (!maybe_value_array && klass->is_obj_array_klass()) {
! klass = klass->as_array_klass()->element_klass();
! maybe_value_array = klass->is_java_lang_Object() || klass->is_interface() || klass->is_valuetype();
}
if (maybe_value_array) {
// Array load klass needs to filter out property bits (but not
! // GetNullFreePropertyNode which needs to extract the null free bits)
uint last = unique();
Node* pointer = NULL;
if (nop == Op_LoadKlass) {
Node* cast = new CastP2XNode(NULL, n);
Node* masked = new LShiftXNode(cast, new ConINode(TypeInt::make(oopDesc::storage_props_nof_bits)));
*** 3453,3463 ****
--i, imax -= nb;
}
}
}
}
- }
break;
}
case Op_AddP: { // Assert sane base pointers
Node *addp = n->in(AddPNode::Address);
--- 3459,3468 ----
< prev index next >