equal
deleted
inserted
replaced
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); |