diff -r 66c5dadb4d61 -r 0e35fa8ebccd src/share/vm/opto/c2compiler.cpp --- a/src/share/vm/opto/c2compiler.cpp Fri Jul 30 10:21:15 2010 -0700 +++ b/src/share/vm/opto/c2compiler.cpp Tue Aug 03 15:55:03 2010 -0700 @@ -103,13 +103,14 @@ if (!is_initialized()) { initialize(); } - bool subsume_loads = true; + bool subsume_loads = SubsumeLoads; bool do_escape_analysis = DoEscapeAnalysis && !env->jvmti_can_access_local_variables(); while (!env->failing()) { // Attempt to compile while subsuming loads into machine instructions. Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis); + // Check result and retry if appropriate. if (C.failure_reason() != NULL) { if (C.failure_reason_is(retry_no_subsuming_loads())) { @@ -127,6 +128,16 @@ // on the ciEnv via env->record_method_not_compilable(). env->record_failure(C.failure_reason()); } + if (StressRecompilation) { + if (subsume_loads) { + subsume_loads = false; + continue; // retry + } + if (do_escape_analysis) { + do_escape_analysis = false; + continue; // retry + } + } // No retry; just break the loop. break;