hotspot/src/share/vm/opto/parse1.cpp
changeset 28395 fbe08d791778
parent 27637 cf68c0af6882
child 28640 01e4ca94fb0d
equal deleted inserted replaced
28394:6d382dc493e5 28395:fbe08d791778
    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