hotspot/src/share/vm/runtime/deoptimization.cpp
changeset 26436 f565c16d5513
parent 25920 6f9fa66be5df
child 27408 9a8090dd6ec3
equal deleted inserted replaced
26435:b446202ac824 26436:f565c16d5513
   189       // runtime calls (for example, used to allocate new objects/arrays
   189       // runtime calls (for example, used to allocate new objects/arrays
   190       // on slow code path) and any other calls generated in compiled code.
   190       // on slow code path) and any other calls generated in compiled code.
   191       // It is not guaranteed that we can get such information here only
   191       // It is not guaranteed that we can get such information here only
   192       // by analyzing bytecode in deoptimized frames. This is why this flag
   192       // by analyzing bytecode in deoptimized frames. This is why this flag
   193       // is set during method compilation (see Compile::Process_OopMap_Node()).
   193       // is set during method compilation (see Compile::Process_OopMap_Node()).
   194       bool save_oop_result = chunk->at(0)->scope()->return_oop();
   194       // If the previous frame was popped, we don't have a result.
       
   195       bool save_oop_result = chunk->at(0)->scope()->return_oop() && !thread->popframe_forcing_deopt_reexecution();
   195       Handle return_value;
   196       Handle return_value;
   196       if (save_oop_result) {
   197       if (save_oop_result) {
   197         // Reallocation may trigger GC. If deoptimization happened on return from
   198         // Reallocation may trigger GC. If deoptimization happened on return from
   198         // call which returns oop we need to save it since it is not in oopmap.
   199         // call which returns oop we need to save it since it is not in oopmap.
   199         oop result = deoptee.saved_oop_result(&map);
   200         oop result = deoptee.saved_oop_result(&map);