Update: Request for reviews (S): 6976400: "Meet Not Symmetric"
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Aug 24 10:34:21 PDT 2010
http://cr.openjdk.java.net/~kvn/6976400/webrev.03
After discussion with Tom and investigating further
the problem was identified as how we define TypeAryPtr::RANGE
which is bottom[int:>=0]+12 * :
TypeAryPtr::RANGE = TypeAryPtr::make( TypePtr::BotPTR, TypeAry::make(Type::BOTTOM,TypeInt::POS), current->env()->Object_klass(), false, arrayOopDesc::length_offset_in_bytes());
It has bottom element type and defined klass but C2
type system expect NULL klass for bottom[] and top[].
Solution:
Use NULL as klass for TypeAryPtr::RANGE.
Add verification into TypeAryPtr constructor to make sure
that specified klass and TypeAryPtr::klass() follow
the same rules.
Tested CTW, java/lang regression tests, nsk tests
Vladimir
Vladimir Kozlov wrote:
> http://cr.openjdk.java.net/~kvn/6976400/webrev
>
> Fixed 6976400: "Meet Not Symmetric"
>
> Meet of integer array pointer type with array pointer
> which has j.l.Object klass incorrectly falls to bottom:
>
> t = byte[int:>=0]:NotNull:exact+12 *
> this= bottom[int:>=0]+12 *
> mt=(t meet this)= bottom[int:>=0]+12 *
> t_dual= int:127..-128:www[int:max..0]:AnyNull:exact+12
> *,iid=top
> mt_dual= top[int:max..0]:TopPTR+12 *,iid=top
> mt_dual meet t_dual= bottom[int:max..0]:AnyNull:exact+12 * [narrow]
>
> Solution:
> Add missing checks for j.l.Object klass in TypeAryPtr::xmeet().
>
> Tested with failing cases, CTW, java/lang regression tests.
More information about the hotspot-compiler-dev
mailing list