src/share/vm/opto/c2compiler.cpp

changeset 2040
0e35fa8ebccd
parent 1907
c18cbe5936b8
child 2314
f95d63e2154a
     1.1 --- a/src/share/vm/opto/c2compiler.cpp	Fri Jul 30 10:21:15 2010 -0700
     1.2 +++ b/src/share/vm/opto/c2compiler.cpp	Tue Aug 03 15:55:03 2010 -0700
     1.3 @@ -103,13 +103,14 @@
     1.4    if (!is_initialized()) {
     1.5      initialize();
     1.6    }
     1.7 -  bool subsume_loads = true;
     1.8 +  bool subsume_loads = SubsumeLoads;
     1.9    bool do_escape_analysis = DoEscapeAnalysis &&
    1.10      !env->jvmti_can_access_local_variables();
    1.11    while (!env->failing()) {
    1.12      // Attempt to compile while subsuming loads into machine instructions.
    1.13      Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis);
    1.14  
    1.15 +
    1.16      // Check result and retry if appropriate.
    1.17      if (C.failure_reason() != NULL) {
    1.18        if (C.failure_reason_is(retry_no_subsuming_loads())) {
    1.19 @@ -127,6 +128,16 @@
    1.20        // on the ciEnv via env->record_method_not_compilable().
    1.21        env->record_failure(C.failure_reason());
    1.22      }
    1.23 +    if (StressRecompilation) {
    1.24 +      if (subsume_loads) {
    1.25 +        subsume_loads = false;
    1.26 +        continue;  // retry
    1.27 +      }
    1.28 +      if (do_escape_analysis) {
    1.29 +        do_escape_analysis = false;
    1.30 +        continue;  // retry
    1.31 +      }
    1.32 +    }
    1.33  
    1.34      // No retry; just break the loop.
    1.35      break;

mercurial