Update: Request for reviews (S): 6976400: "Meet Not Symmetric"

Tom Rodriguez tom.rodriguez at oracle.com
Wed Aug 25 10:28:01 PDT 2010


Looks good.

tom

On Aug 24, 2010, at 10:34 AM, Vladimir Kozlov wrote:

> 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