comparison src/share/vm/opto/output.cpp @ 1137:97125851f396

6829187: compiler optimizations required for JSR 292 Summary: C2 implementation for invokedynamic support. Reviewed-by: kvn, never
author twisti
date Tue, 05 Jan 2010 13:05:58 +0100
parents e66fd840cb6b
children ba263cfb7611
comparison
equal deleted inserted replaced
1136:4b84186a8248 1137:97125851f396
792 #ifdef ENABLE_ZAP_DEAD_LOCALS 792 #ifdef ENABLE_ZAP_DEAD_LOCALS
793 assert( is_node_getting_a_safepoint(mach), "logic does not match; false negative"); 793 assert( is_node_getting_a_safepoint(mach), "logic does not match; false negative");
794 #endif 794 #endif
795 795
796 int safepoint_pc_offset = current_offset; 796 int safepoint_pc_offset = current_offset;
797 bool is_method_handle_invoke = false;
797 798
798 // Add the safepoint in the DebugInfoRecorder 799 // Add the safepoint in the DebugInfoRecorder
799 if( !mach->is_MachCall() ) { 800 if( !mach->is_MachCall() ) {
800 mcall = NULL; 801 mcall = NULL;
801 debug_info()->add_safepoint(safepoint_pc_offset, sfn->_oop_map); 802 debug_info()->add_safepoint(safepoint_pc_offset, sfn->_oop_map);
802 } else { 803 } else {
803 mcall = mach->as_MachCall(); 804 mcall = mach->as_MachCall();
805
806 // Is the call a MethodHandle call?
807 if (mcall->is_MachCallJava())
808 is_method_handle_invoke = mcall->as_MachCallJava()->_method_handle_invoke;
809
804 safepoint_pc_offset += mcall->ret_addr_offset(); 810 safepoint_pc_offset += mcall->ret_addr_offset();
805 debug_info()->add_safepoint(safepoint_pc_offset, mcall->_oop_map); 811 debug_info()->add_safepoint(safepoint_pc_offset, mcall->_oop_map);
806 } 812 }
807 813
808 // Loop over the JVMState list to add scope information 814 // Loop over the JVMState list to add scope information
911 ciMethod* scope_method = method ? method : _method; 917 ciMethod* scope_method = method ? method : _method;
912 // Describe the scope here 918 // Describe the scope here
913 assert(jvms->bci() >= InvocationEntryBci && jvms->bci() <= 0x10000, "must be a valid or entry BCI"); 919 assert(jvms->bci() >= InvocationEntryBci && jvms->bci() <= 0x10000, "must be a valid or entry BCI");
914 assert(!jvms->should_reexecute() || depth == max_depth, "reexecute allowed only for the youngest"); 920 assert(!jvms->should_reexecute() || depth == max_depth, "reexecute allowed only for the youngest");
915 // Now we can describe the scope. 921 // Now we can describe the scope.
916 bool is_method_handle_invoke = false;
917 debug_info()->describe_scope(safepoint_pc_offset, scope_method, jvms->bci(), jvms->should_reexecute(), is_method_handle_invoke, locvals, expvals, monvals); 922 debug_info()->describe_scope(safepoint_pc_offset, scope_method, jvms->bci(), jvms->should_reexecute(), is_method_handle_invoke, locvals, expvals, monvals);
918 } // End jvms loop 923 } // End jvms loop
919 924
920 // Mark the end of the scope set. 925 // Mark the end of the scope set.
921 debug_info()->end_safepoint(safepoint_pc_offset); 926 debug_info()->end_safepoint(safepoint_pc_offset);