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