< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page

        

*** 2792,2801 **** --- 2792,2817 ---- // (User must make the replace_in_map call.) return fail; } + //------------------------------subtype_check_receiver------------------------- + 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 // recompile; the offending check will be recompiled to handle NULLs.
< prev index next >