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