1.1 --- a/src/share/vm/opto/machnode.cpp Thu Mar 26 14:39:39 2009 -0700 1.2 +++ b/src/share/vm/opto/machnode.cpp Thu Mar 26 15:04:55 2009 -0700 1.3 @@ -340,6 +340,10 @@ 1.4 if (base == NodeSentinel) return TypePtr::BOTTOM; 1.5 1.6 const Type* t = base->bottom_type(); 1.7 + if (UseCompressedOops && Universe::narrow_oop_shift() == 0) { 1.8 + // 32-bit unscaled narrow oop can be the base of any address expression 1.9 + t = t->make_ptr(); 1.10 + } 1.11 if (t->isa_intptr_t() && offset != 0 && offset != Type::OffsetBot) { 1.12 // We cannot assert that the offset does not look oop-ish here. 1.13 // Depending on the heap layout the cardmark base could land 1.14 @@ -353,6 +357,7 @@ 1.15 1.16 // be conservative if we do not recognize the type 1.17 if (tp == NULL) { 1.18 + assert(false, "this path may produce not optimal code"); 1.19 return TypePtr::BOTTOM; 1.20 } 1.21 assert(tp->base() != Type::AnyPtr, "not a bare pointer");