comparison src/share/vm/opto/graphKit.cpp @ 6634:7f813940ac35

7192406: JSR 292: C2 needs exact return type information for invokedynamic and invokehandle call sites Reviewed-by: kvn
author twisti
date Tue, 28 Aug 2012 15:24:39 -0700
parents 1d7922586cf6
children da91efe96a93
comparison
equal deleted inserted replaced
6633:a5dd6e3ef9f3 6634:7f813940ac35
1004 case Bytecodes::_putstatic: 1004 case Bytecodes::_putstatic:
1005 case Bytecodes::_getfield: 1005 case Bytecodes::_getfield:
1006 case Bytecodes::_putfield: 1006 case Bytecodes::_putfield:
1007 { 1007 {
1008 bool is_get = (depth >= 0), is_static = (depth & 1); 1008 bool is_get = (depth >= 0), is_static = (depth & 1);
1009 bool ignore;
1010 ciBytecodeStream iter(method()); 1009 ciBytecodeStream iter(method());
1011 iter.reset_to_bci(bci()); 1010 iter.reset_to_bci(bci());
1012 iter.next(); 1011 iter.next();
1013 ciField* field = iter.get_field(ignore); 1012 bool ignored_will_link;
1013 ciField* field = iter.get_field(ignored_will_link);
1014 int size = field->type()->size(); 1014 int size = field->type()->size();
1015 inputs = (is_static ? 0 : 1); 1015 inputs = (is_static ? 0 : 1);
1016 if (is_get) { 1016 if (is_get) {
1017 depth = size - inputs; 1017 depth = size - inputs;
1018 } else { 1018 } else {
1026 case Bytecodes::_invokespecial: 1026 case Bytecodes::_invokespecial:
1027 case Bytecodes::_invokestatic: 1027 case Bytecodes::_invokestatic:
1028 case Bytecodes::_invokedynamic: 1028 case Bytecodes::_invokedynamic:
1029 case Bytecodes::_invokeinterface: 1029 case Bytecodes::_invokeinterface:
1030 { 1030 {
1031 bool ignore;
1032 ciBytecodeStream iter(method()); 1031 ciBytecodeStream iter(method());
1033 iter.reset_to_bci(bci()); 1032 iter.reset_to_bci(bci());
1034 iter.next(); 1033 iter.next();
1035 ciMethod* callee = iter.get_method(ignore); 1034 bool ignored_will_link;
1035 ciSignature* declared_signature = NULL;
1036 ciMethod* callee = iter.get_method(ignored_will_link, &declared_signature);
1037 assert(declared_signature != NULL, "cannot be null");
1036 // (Do not use ciMethod::arg_size(), because 1038 // (Do not use ciMethod::arg_size(), because
1037 // it might be an unloaded method, which doesn't 1039 // it might be an unloaded method, which doesn't
1038 // know whether it is static or not.) 1040 // know whether it is static or not.)
1039 if (for_parse) { 1041 if (for_parse) {
1040 // Case 1: When called from parse we are *before* the invoke (in the 1042 // Case 1: When called from parse we are *before* the invoke (in the
1044 } else { 1046 } else {
1045 // Case 2: Here we are *after* the invoke (in the callee) and need to 1047 // Case 2: Here we are *after* the invoke (in the callee) and need to
1046 // remove any appendix arguments that were popped. 1048 // remove any appendix arguments that were popped.
1047 inputs = callee->invoke_arg_size(code) - (callee->has_member_arg() ? 1 : 0); 1049 inputs = callee->invoke_arg_size(code) - (callee->has_member_arg() ? 1 : 0);
1048 } 1050 }
1049 int size = callee->return_type()->size(); 1051 int size = declared_signature->return_type()->size();
1050 depth = size - inputs; 1052 depth = size - inputs;
1051 } 1053 }
1052 break; 1054 break;
1053 1055
1054 case Bytecodes::_multianewarray: 1056 case Bytecodes::_multianewarray: