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

src/share/vm/opto/c2compiler.cpp

Print this page




  85 
  86   // Note that this is being called from a compiler thread not the
  87   // main startup thread.
  88   if (should_perform_init()) {
  89     bool successful = C2Compiler::init_c2_runtime();
  90     int new_state = (successful) ? initialized : failed;
  91     set_state(new_state);
  92   }
  93 }
  94 
  95 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
  96   assert(is_initialized(), "Compiler thread must be initialized");
  97 
  98   bool subsume_loads = SubsumeLoads;
  99   bool do_escape_analysis = DoEscapeAnalysis && !env->should_retain_local_variables();
 100   bool eliminate_boxing = EliminateAutoBox;
 101   while (!env->failing()) {
 102     // Attempt to compile while subsuming loads into machine instructions.
 103     Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing);
 104 
 105 
 106     // Check result and retry if appropriate.
 107     if (C.failure_reason() != NULL) {
 108       if (C.failure_reason_is(retry_no_subsuming_loads())) {
 109         assert(subsume_loads, "must make progress");
 110         subsume_loads = false;

 111         continue;  // retry
 112       }
 113       if (C.failure_reason_is(retry_no_escape_analysis())) {
 114         assert(do_escape_analysis, "must make progress");
 115         do_escape_analysis = false;

 116         continue;  // retry
 117       }
 118       if (C.has_boxed_value()) {
 119         // Recompile without boxing elimination regardless failure reason.
 120         assert(eliminate_boxing, "must make progress");
 121         eliminate_boxing = false;

 122         continue;  // retry
 123       }
 124       // Pass any other failure reason up to the ciEnv.
 125       // Note that serious, irreversible failures are already logged
 126       // on the ciEnv via env->record_method_not_compilable().
 127       env->record_failure(C.failure_reason());
 128     }
 129     if (StressRecompilation) {
 130       if (subsume_loads) {
 131         subsume_loads = false;
 132         continue;  // retry
 133       }
 134       if (do_escape_analysis) {
 135         do_escape_analysis = false;
 136         continue;  // retry
 137       }
 138     }
 139 
 140     // print inlining for last compilation only
 141     C.dump_print_inlining();


  85 
  86   // Note that this is being called from a compiler thread not the
  87   // main startup thread.
  88   if (should_perform_init()) {
  89     bool successful = C2Compiler::init_c2_runtime();
  90     int new_state = (successful) ? initialized : failed;
  91     set_state(new_state);
  92   }
  93 }
  94 
  95 void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
  96   assert(is_initialized(), "Compiler thread must be initialized");
  97 
  98   bool subsume_loads = SubsumeLoads;
  99   bool do_escape_analysis = DoEscapeAnalysis && !env->should_retain_local_variables();
 100   bool eliminate_boxing = EliminateAutoBox;
 101   while (!env->failing()) {
 102     // Attempt to compile while subsuming loads into machine instructions.
 103     Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing);
 104 

 105     // Check result and retry if appropriate.
 106     if (C.failure_reason() != NULL) {
 107       if (C.failure_reason_is(retry_no_subsuming_loads())) {
 108         assert(subsume_loads, "must make progress");
 109         subsume_loads = false;
 110         env->report_failure(C.failure_reason());
 111         continue;  // retry
 112       }
 113       if (C.failure_reason_is(retry_no_escape_analysis())) {
 114         assert(do_escape_analysis, "must make progress");
 115         do_escape_analysis = false;
 116         env->report_failure(C.failure_reason());
 117         continue;  // retry
 118       }
 119       if (C.has_boxed_value()) {
 120         // Recompile without boxing elimination regardless failure reason.
 121         assert(eliminate_boxing, "must make progress");
 122         eliminate_boxing = false;
 123         env->report_failure(C.failure_reason());
 124         continue;  // retry
 125       }
 126       // Pass any other failure reason up to the ciEnv.
 127       // Note that serious, irreversible failures are already logged
 128       // on the ciEnv via env->record_method_not_compilable().
 129       env->record_failure(C.failure_reason());
 130     }
 131     if (StressRecompilation) {
 132       if (subsume_loads) {
 133         subsume_loads = false;
 134         continue;  // retry
 135       }
 136       if (do_escape_analysis) {
 137         do_escape_analysis = false;
 138         continue;  // retry
 139       }
 140     }
 141 
 142     // print inlining for last compilation only
 143     C.dump_print_inlining();
src/share/vm/opto/c2compiler.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File