hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
changeset 44738 11431bbc9549
parent 44315 1e2f842b0c96
child 45514 0fc9cc73ce45
equal deleted inserted replaced
44737:d090627aedb8 44738:11431bbc9549
  1826   CompileLog* log = compilation()->log();
  1826   CompileLog* log = compilation()->log();
  1827   if (log != NULL)
  1827   if (log != NULL)
  1828       log->elem("call method='%d' instr='%s'",
  1828       log->elem("call method='%d' instr='%s'",
  1829                 log->identify(target),
  1829                 log->identify(target),
  1830                 Bytecodes::name(code));
  1830                 Bytecodes::name(code));
       
  1831 
       
  1832   // invoke-special-super
       
  1833   if (bc_raw == Bytecodes::_invokespecial && !target->is_object_initializer()) {
       
  1834     ciInstanceKlass* sender_klass =
       
  1835           calling_klass->is_anonymous() ? calling_klass->host_klass() :
       
  1836                                           calling_klass;
       
  1837     if (sender_klass->is_interface()) {
       
  1838       int index = state()->stack_size() - (target->arg_size_no_receiver() + 1);
       
  1839       Value receiver = state()->stack_at(index);
       
  1840       CheckCast* c = new CheckCast(sender_klass, receiver, copy_state_before());
       
  1841       c->set_invokespecial_receiver_check();
       
  1842       state()->stack_at_put(index, append_split(c));
       
  1843     }
       
  1844   }
  1831 
  1845 
  1832   // Some methods are obviously bindable without any type checks so
  1846   // Some methods are obviously bindable without any type checks so
  1833   // convert them directly to an invokespecial or invokestatic.
  1847   // convert them directly to an invokespecial or invokestatic.
  1834   if (target->is_loaded() && !target->is_abstract() && target->can_be_statically_bound()) {
  1848   if (target->is_loaded() && !target->is_abstract() && target->can_be_statically_bound()) {
  1835     switch (bc_raw) {
  1849     switch (bc_raw) {