--- old/src/share/vm/opto/graphKit.cpp 2017-02-14 20:36:23.000000000 +0300 +++ new/src/share/vm/opto/graphKit.cpp 2017-02-14 20:36:23.000000000 +0300 @@ -2727,7 +2727,21 @@ return fail; } +Node* GraphKit::subtype_check_receiver(Node* receiver, ciKlass* klass, + Node** casted_receiver) { + const TypeKlassPtr* tklass = TypeKlassPtr::make(klass); + Node* recv_klass = load_object_klass(receiver); + Node* want_klass = makecon(tklass); + + Node* slow_ctl = gen_subtype_check(recv_klass, want_klass); + + // Cast receiver after successful check + const TypeOopPtr* recv_type = tklass->cast_to_exactness(false)->is_klassptr()->as_instance_type(); + Node* cast = new CheckCastPPNode(control(), receiver, recv_type); + (*casted_receiver) = _gvn.transform(cast); + return slow_ctl; +} //------------------------------seems_never_null------------------------------- // Use null_seen information if it is available from the profile. // If we see an unexpected null at a type check we record it and force a