src/share/vm/opto/machnode.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6710487 Cdiff src/share/vm/opto/machnode.cpp

src/share/vm/opto/machnode.cpp

Print this page

        

*** 260,282 **** intptr_t disp = oper->constant_disp(); int scale = oper->scale(); // Now we have collected every part of the ADLC MEMORY_INTER. // See if it adds up to a base + offset. if (index != NULL) { ! const TypeNarrowOop* narrowoop = index->bottom_type()->isa_narrowoop(); ! if (narrowoop != NULL) { // EncodeN, LoadN, LoadConN, LoadNKlass. // Memory references through narrow oops have a // funny base so grab the type from the index: // [R12 + narrow_oop_reg<<3 + offset] assert(base == NULL, "Memory references through narrow oops have no base"); offset = disp; ! adr_type = narrowoop->make_oopptr()->add_offset(offset); return NULL; } else if (!index->is_Con()) { disp = Type::OffsetBot; } else if (disp != Type::OffsetBot) { ! const TypeX* ti = index->bottom_type()->isa_intptr_t(); if (ti == NULL) { disp = Type::OffsetBot; // a random constant?? } else { disp += ti->get_con() << scale; } --- 260,282 ---- intptr_t disp = oper->constant_disp(); int scale = oper->scale(); // Now we have collected every part of the ADLC MEMORY_INTER. // See if it adds up to a base + offset. if (index != NULL) { ! const Type* t_index = index->bottom_type(); ! if (t_index->isa_narrowoop()) { // EncodeN, LoadN, LoadConN, LoadNKlass. // Memory references through narrow oops have a // funny base so grab the type from the index: // [R12 + narrow_oop_reg<<3 + offset] assert(base == NULL, "Memory references through narrow oops have no base"); offset = disp; ! adr_type = t_index->make_ptr()->add_offset(offset); return NULL; } else if (!index->is_Con()) { disp = Type::OffsetBot; } else if (disp != Type::OffsetBot) { ! const TypeX* ti = t_index->isa_intptr_t(); if (ti == NULL) { disp = Type::OffsetBot; // a random constant?? } else { disp += ti->get_con() << scale; }
src/share/vm/opto/machnode.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File