--- old/src/share/vm/opto/type.hpp 2017-05-05 11:33:43.158987660 +0200 +++ new/src/share/vm/opto/type.hpp 2017-05-05 11:33:43.030987664 +0200 @@ -982,8 +982,8 @@ // Some kind of oop (Java pointer), either klass or instance or array. class TypeOopPtr : public TypePtr { protected: - TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, bool xk, ciObject* o, Offset offset, int instance_id, - const TypePtr* speculative, int inline_depth); + TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, bool xk, ciObject* o, Offset offset, Offset field_offset, + int instance_id, const TypePtr* speculative, int inline_depth); public: virtual bool eq( const Type *t ) const; virtual int hash() const; // Type specific hashing @@ -1174,10 +1174,10 @@ //------------------------------TypeAryPtr------------------------------------- // Class of Java array pointers class TypeAryPtr : public TypeOopPtr { - TypeAryPtr( PTR ptr, ciObject* o, const TypeAry *ary, ciKlass* k, bool xk, - Offset offset, Offset field_offset, int instance_id, bool is_autobox_cache, - const TypePtr* speculative, int inline_depth) - : TypeOopPtr(AryPtr,ptr,k,xk,o,offset, instance_id, speculative, inline_depth), + TypeAryPtr(PTR ptr, ciObject* o, const TypeAry *ary, ciKlass* k, bool xk, + Offset offset, Offset field_offset, int instance_id, bool is_autobox_cache, + const TypePtr* speculative, int inline_depth) + : TypeOopPtr(AryPtr, ptr, k, xk, o, offset, field_offset, instance_id, speculative, inline_depth), _ary(ary), _is_autobox_cache(is_autobox_cache), _field_offset(field_offset) @@ -1203,16 +1203,16 @@ virtual int hash() const; // Type specific hashing const TypeAry *_ary; // Array we point into const bool _is_autobox_cache; - Offset meet_field_offset(int offset) const; + // For flattened value type arrays, each field of the value type in + // the array has its own memory slice so we need to keep track of + // which field is accessed + const Offset _field_offset; + Offset meet_field_offset(const Type::Offset offset) const; Offset dual_field_offset() const; ciKlass* compute_klass(DEBUG_ONLY(bool verify = false)) const; public: - // For flattened value type arrays, each field of the value type in - // the array has its own memory slice so we need to keep track of - // which field is accessed - const Offset _field_offset; // Accessors ciKlass* klass() const; const TypeAry* ary() const { return _ary; } @@ -1261,7 +1261,7 @@ const TypeAryPtr* cast_to_autobox_cache(bool cache) const; - const int field_offset() const { return _field_offset.get(); } + const Offset field_offset() const { return _field_offset; } const TypeAryPtr* with_field_offset(int offset) const; const TypePtr* with_field_offset_and_offset(intptr_t offset) const; @@ -1296,7 +1296,7 @@ // Class of value type pointers class TypeValueTypePtr : public TypeOopPtr { TypeValueTypePtr(const TypeValueType* vt, PTR ptr, ciObject* o, Offset offset, int instance_id, const TypePtr* speculative, int inline_depth) - : TypeOopPtr(ValueTypePtr, ptr, vt->value_klass(), true, o, offset, instance_id, speculative, inline_depth) { + : TypeOopPtr(ValueTypePtr, ptr, vt->value_klass(), true, o, offset, Offset::bottom, instance_id, speculative, inline_depth) { _vt = vt; }