hotspot/src/share/vm/ci/ciEnv.cpp
changeset 23491 f690330b10b9
parent 22893 e3a2b513713a
child 23496 bfdd90c07bf8
equal deleted inserted replaced
23490:54fc219734a0 23491:f690330b10b9
   959                             ExceptionHandlerTable* handler_table,
   959                             ExceptionHandlerTable* handler_table,
   960                             ImplicitExceptionTable* inc_table,
   960                             ImplicitExceptionTable* inc_table,
   961                             AbstractCompiler* compiler,
   961                             AbstractCompiler* compiler,
   962                             int comp_level,
   962                             int comp_level,
   963                             bool has_unsafe_access,
   963                             bool has_unsafe_access,
   964                             bool has_wide_vectors) {
   964                             bool has_wide_vectors,
       
   965                             RTMState  rtm_state) {
   965   VM_ENTRY_MARK;
   966   VM_ENTRY_MARK;
   966   nmethod* nm = NULL;
   967   nmethod* nm = NULL;
   967   {
   968   {
   968     // To prevent compile queue updates.
   969     // To prevent compile queue updates.
   969     MutexLocker locker(MethodCompileQueue_lock, THREAD);
   970     MutexLocker locker(MethodCompileQueue_lock, THREAD);
   999       // Check for {class loads, evolution, breakpoints, ...} during compilation
  1000       // Check for {class loads, evolution, breakpoints, ...} during compilation
  1000       validate_compile_task_dependencies(target);
  1001       validate_compile_task_dependencies(target);
  1001     }
  1002     }
  1002 
  1003 
  1003     methodHandle method(THREAD, target->get_Method());
  1004     methodHandle method(THREAD, target->get_Method());
       
  1005 
       
  1006 #if INCLUDE_RTM_OPT
       
  1007     if (!failing() && (rtm_state != NoRTM) &&
       
  1008         (method()->method_data() != NULL) &&
       
  1009         (method()->method_data()->rtm_state() != rtm_state)) {
       
  1010       // Preemptive decompile if rtm state was changed.
       
  1011       record_failure("RTM state change invalidated rtm code");
       
  1012     }
       
  1013 #endif
  1004 
  1014 
  1005     if (failing()) {
  1015     if (failing()) {
  1006       // While not a true deoptimization, it is a preemptive decompile.
  1016       // While not a true deoptimization, it is a preemptive decompile.
  1007       MethodData* mdo = method()->method_data();
  1017       MethodData* mdo = method()->method_data();
  1008       if (mdo != NULL) {
  1018       if (mdo != NULL) {
  1026                                orig_pc_offset,
  1036                                orig_pc_offset,
  1027                                debug_info(), dependencies(), code_buffer,
  1037                                debug_info(), dependencies(), code_buffer,
  1028                                frame_words, oop_map_set,
  1038                                frame_words, oop_map_set,
  1029                                handler_table, inc_table,
  1039                                handler_table, inc_table,
  1030                                compiler, comp_level);
  1040                                compiler, comp_level);
  1031 
  1041 #if INCLUDE_RTM_OPT
       
  1042     nm->set_rtm_state(rtm_state);
       
  1043 #endif
  1032     // Free codeBlobs
  1044     // Free codeBlobs
  1033     code_buffer->free_blob();
  1045     code_buffer->free_blob();
  1034 
  1046 
  1035     if (nm != NULL) {
  1047     if (nm != NULL) {
  1036       nm->set_has_unsafe_access(has_unsafe_access);
  1048       nm->set_has_unsafe_access(has_unsafe_access);