comparison src/share/vm/opto/output.cpp @ 900:9987d9d5eb0e

6833129: specjvm98 fails with NullPointerException in the compiler with -XX:DeoptimizeALot Summary: developed a reexecute logic for the interpreter to reexecute the bytecode when deopt happens Reviewed-by: kvn, never, jrose, twisti
author cfang
date Fri, 31 Jul 2009 17:12:33 -0700
parents ea3f9723b5cf
children 15bbd3f505c0
comparison
equal deleted inserted replaced
899:55cb84cd1247 900:9987d9d5eb0e
909 909
910 // Make method available for all Safepoints 910 // Make method available for all Safepoints
911 ciMethod* scope_method = method ? method : _method; 911 ciMethod* scope_method = method ? method : _method;
912 // Describe the scope here 912 // Describe the scope here
913 assert(jvms->bci() >= InvocationEntryBci && jvms->bci() <= 0x10000, "must be a valid or entry BCI"); 913 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");
914 // Now we can describe the scope. 915 // Now we can describe the scope.
915 debug_info()->describe_scope(safepoint_pc_offset,scope_method,jvms->bci(),locvals,expvals,monvals); 916 debug_info()->describe_scope(safepoint_pc_offset,scope_method,jvms->bci(),jvms->should_reexecute(),locvals,expvals,monvals);
916 } // End jvms loop 917 } // End jvms loop
917 918
918 // Mark the end of the scope set. 919 // Mark the end of the scope set.
919 debug_info()->end_safepoint(safepoint_pc_offset); 920 debug_info()->end_safepoint(safepoint_pc_offset);
920 } 921 }
992 993
993 // Visit scopes from oldest to youngest. 994 // Visit scopes from oldest to youngest.
994 for (int depth = 1; depth <= max_depth; depth++) { 995 for (int depth = 1; depth <= max_depth; depth++) {
995 JVMState* jvms = youngest_jvms->of_depth(depth); 996 JVMState* jvms = youngest_jvms->of_depth(depth);
996 ciMethod* method = jvms->has_method() ? jvms->method() : NULL; 997 ciMethod* method = jvms->has_method() ? jvms->method() : NULL;
997 debug_info->describe_scope(pc_offset, method, jvms->bci()); 998 assert(!jvms->should_reexecute() || depth==max_depth, "reexecute allowed only for the youngest");
999 debug_info->describe_scope(pc_offset, method, jvms->bci(), jvms->should_reexecute());
998 } 1000 }
999 1001
1000 // Mark the end of the scope set. 1002 // Mark the end of the scope set.
1001 debug_info->end_non_safepoint(pc_offset); 1003 debug_info->end_non_safepoint(pc_offset);
1002 } 1004 }