869 if (is_virtual_or_interface) { |
869 if (is_virtual_or_interface) { |
870 ciInstanceKlass* klass = target->holder(); |
870 ciInstanceKlass* klass = target->holder(); |
871 Node* receiver_node = kit.argument(0); |
871 Node* receiver_node = kit.argument(0); |
872 const TypeOopPtr* receiver_type = gvn.type(receiver_node)->isa_oopptr(); |
872 const TypeOopPtr* receiver_type = gvn.type(receiver_node)->isa_oopptr(); |
873 // call_does_dispatch and vtable_index are out-parameters. They might be changed. |
873 // call_does_dispatch and vtable_index are out-parameters. They might be changed. |
874 target = C->optimize_virtual_call(caller, jvms->bci(), klass, target, receiver_type, |
874 // optimize_virtual_call() takes 2 different holder |
875 is_virtual, |
875 // arguments for a corner case that doesn't apply here (see |
|
876 // Parse::do_call()) |
|
877 target = C->optimize_virtual_call(caller, jvms->bci(), klass, klass, |
|
878 target, receiver_type, is_virtual, |
876 call_does_dispatch, vtable_index); // out-parameters |
879 call_does_dispatch, vtable_index); // out-parameters |
877 // We lack profiling at this call but type speculation may |
880 // We lack profiling at this call but type speculation may |
878 // provide us with a type |
881 // provide us with a type |
879 speculative_receiver_type = receiver_type->speculative_type(); |
882 speculative_receiver_type = receiver_type->speculative_type(); |
880 } |
883 } |