src/share/vm/opto/c2compiler.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/c2compiler.cpp	Mon Aug  2 14:26:20 2010
--- new/src/share/vm/opto/c2compiler.cpp	Mon Aug  2 14:26:20 2010

*** 101,117 **** --- 101,118 ---- ciMethod* target, int entry_bci) { 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())) { assert(subsume_loads, "must make progress"); subsume_loads = false;
*** 125,134 **** --- 126,145 ---- // Pass any other failure reason up to the ciEnv. // Note that serious, irreversible failures are already logged // on the ciEnv via env->record_method_not_compilable(). env->record_failure(C.failure_reason()); } + if (CompileTheWorld) { + 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; } }

src/share/vm/opto/c2compiler.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File