8057758: Tests run TypeProfileLevel=222 crash with guarantee(0) failed: must find derived/base pair
Summary: Use TypeAryPtr::INT type with offset 0 in inline_multiplyToLen().
Reviewed-by: kvn, iveresov
--- a/hotspot/src/share/vm/opto/library_call.cpp Tue Sep 09 16:14:40 2014 +0200
+++ b/hotspot/src/share/vm/opto/library_call.cpp Tue Sep 09 15:47:18 2014 -0700
@@ -4968,7 +4968,8 @@
// Allocate the result array
Node* zlen = _gvn.transform(new AddINode(xlen, ylen));
- Node* klass_node = makecon(TypeKlassPtr::make(ciTypeArrayKlass::make(T_INT)));
+ ciKlass* klass = ciTypeArrayKlass::make(T_INT);
+ Node* klass_node = makecon(TypeKlassPtr::make(klass));
IdealKit ideal(this);
@@ -5002,7 +5003,8 @@
sync_kit(ideal);
z = __ value(z_alloc);
- _gvn.set_type(z, TypeAryPtr::INTS);
+ // Can't use TypeAryPtr::INTS which uses Bottom offset.
+ _gvn.set_type(z, TypeOopPtr::make_from_klass(klass));
// Final sync IdealKit and GraphKit.
final_sync(ideal);
#undef __