Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/c2compiler.cpp @ 23848:3e1cd663c2d3
8055530: assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty()) failed: return value must be well defined
Summary: concurrent class loading causes return phi to become top
Reviewed-by: kvn
author | shshahma |
---|---|
date | Fri, 15 Apr 2016 12:02:37 +0530 |
parents | ddce0b7cee93 |
children | f13e777eb255 |
comparison
equal
deleted
inserted
replaced
23847:b5c3e9670fa0 | 23848:3e1cd663c2d3 |
---|---|
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 } |