156 if( val->bottom_type()->isa_narrowoop() && |
156 if( val->bottom_type()->isa_narrowoop() && |
157 MacroAssembler::needs_explicit_null_check(offset) ) |
157 MacroAssembler::needs_explicit_null_check(offset) ) |
158 continue; // Give up if offset is beyond page size |
158 continue; // Give up if offset is beyond page size |
159 // cannot reason about it; is probably not implicit null exception |
159 // cannot reason about it; is probably not implicit null exception |
160 } else { |
160 } else { |
161 const TypePtr* tptr = base->bottom_type()->is_ptr(); |
161 const TypePtr* tptr; |
|
162 if (UseCompressedOops && Universe::narrow_oop_shift() == 0) { |
|
163 // 32-bits narrow oop can be the base of address expressions |
|
164 tptr = base->bottom_type()->make_ptr(); |
|
165 } else { |
|
166 // only regular oops are expected here |
|
167 tptr = base->bottom_type()->is_ptr(); |
|
168 } |
162 // Give up if offset is not a compile-time constant |
169 // Give up if offset is not a compile-time constant |
163 if( offset == Type::OffsetBot || tptr->_offset == Type::OffsetBot ) |
170 if( offset == Type::OffsetBot || tptr->_offset == Type::OffsetBot ) |
164 continue; |
171 continue; |
165 offset += tptr->_offset; // correct if base is offseted |
172 offset += tptr->_offset; // correct if base is offseted |
166 if( MacroAssembler::needs_explicit_null_check(offset) ) |
173 if( MacroAssembler::needs_explicit_null_check(offset) ) |