equal
deleted
inserted
replaced
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "compiler/compileLog.hpp" |
26 #include "compiler/compileLog.hpp" |
27 #include "interpreter/linkResolver.hpp" |
27 #include "interpreter/linkResolver.hpp" |
28 #include "oops/method.hpp" |
28 #include "oops/method.hpp" |
29 #include "opto/addnode.hpp" |
29 #include "opto/addnode.hpp" |
|
30 #include "opto/c2compiler.hpp" |
30 #include "opto/castnode.hpp" |
31 #include "opto/castnode.hpp" |
31 #include "opto/idealGraphPrinter.hpp" |
32 #include "opto/idealGraphPrinter.hpp" |
32 #include "opto/locknode.hpp" |
33 #include "opto/locknode.hpp" |
33 #include "opto/memnode.hpp" |
34 #include "opto/memnode.hpp" |
34 #include "opto/opaquenode.hpp" |
35 #include "opto/opaquenode.hpp" |
984 } |
985 } |
985 |
986 |
986 if (tf()->range()->cnt() > TypeFunc::Parms) { |
987 if (tf()->range()->cnt() > TypeFunc::Parms) { |
987 const Type* ret_type = tf()->range()->field_at(TypeFunc::Parms); |
988 const Type* ret_type = tf()->range()->field_at(TypeFunc::Parms); |
988 Node* ret_phi = _gvn.transform( _exits.argument(0) ); |
989 Node* ret_phi = _gvn.transform( _exits.argument(0) ); |
989 assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty(), "return value must be well defined"); |
990 if (!_exits.control()->is_top() && _gvn.type(ret_phi)->empty()) { |
|
991 // In case of concurrent class loading, the type we set for the |
|
992 // ret_phi in build_exits() may have been too optimistic and the |
|
993 // ret_phi may be top now. |
|
994 #ifdef ASSERT |
|
995 { |
|
996 MutexLockerEx ml(Compile_lock, Mutex::_no_safepoint_check_flag); |
|
997 assert(ret_type->isa_ptr() && C->env()->system_dictionary_modification_counter_changed(), "return value must be well defined"); |
|
998 } |
|
999 #endif |
|
1000 C->record_failure(C2Compiler::retry_class_loading_during_parsing()); |
|
1001 } |
990 _exits.push_node(ret_type->basic_type(), ret_phi); |
1002 _exits.push_node(ret_type->basic_type(), ret_phi); |
991 } |
1003 } |
992 |
1004 |
993 // Note: Logic for creating and optimizing the ReturnNode is in Compile. |
1005 // Note: Logic for creating and optimizing the ReturnNode is in Compile. |
994 |
1006 |