46 const char* C2Compiler::retry_no_subsuming_loads() { |
46 const char* C2Compiler::retry_no_subsuming_loads() { |
47 return "retry without subsuming loads"; |
47 return "retry without subsuming loads"; |
48 } |
48 } |
49 const char* C2Compiler::retry_no_escape_analysis() { |
49 const char* C2Compiler::retry_no_escape_analysis() { |
50 return "retry without escape analysis"; |
50 return "retry without escape analysis"; |
|
51 } |
|
52 const char* C2Compiler::retry_class_loading_during_parsing() { |
|
53 return "retry class loading during parsing"; |
51 } |
54 } |
52 bool C2Compiler::init_c2_runtime() { |
55 bool C2Compiler::init_c2_runtime() { |
53 |
56 |
54 // Check assumptions used while running ADLC |
57 // Check assumptions used while running ADLC |
55 Compile::adlc_verification(); |
58 Compile::adlc_verification(); |
113 Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing); |
116 Compile C(env, this, target, entry_bci, subsume_loads, do_escape_analysis, eliminate_boxing); |
114 |
117 |
115 |
118 |
116 // Check result and retry if appropriate. |
119 // Check result and retry if appropriate. |
117 if (C.failure_reason() != NULL) { |
120 if (C.failure_reason() != NULL) { |
|
121 if (C.failure_reason_is(retry_class_loading_during_parsing())) { |
|
122 env->record_failure(C.failure_reason()); |
|
123 continue; // retry |
|
124 } |
118 if (C.failure_reason_is(retry_no_subsuming_loads())) { |
125 if (C.failure_reason_is(retry_no_subsuming_loads())) { |
119 assert(subsume_loads, "must make progress"); |
126 assert(subsume_loads, "must make progress"); |
120 subsume_loads = false; |
127 subsume_loads = false; |
121 continue; // retry |
128 continue; // retry |
122 } |
129 } |