diff src/share/vm/runtime/deoptimization.cpp @ 5129:51111665eda6

Support for recording a leaf graph id for each deoptimization point in the debug info.
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 21 Mar 2012 10:47:02 +0100
parents 1b907994bf2d
children ab038e0d6b43
line wrap: on
line diff
--- a/src/share/vm/runtime/deoptimization.cpp	Fri Mar 16 11:03:54 2012 +0100
+++ b/src/share/vm/runtime/deoptimization.cpp	Wed Mar 21 10:47:02 2012 +0100
@@ -86,6 +86,11 @@
 #endif
 #endif
 
+#ifdef GRAAL
+#include "graal/graalCompiler.hpp"
+#endif
+
+
 bool DeoptimizationMarker::_is_active = false;
 
 Deoptimization::UnrollBlock::UnrollBlock(int  size_of_deoptimized_frame,
@@ -201,6 +206,19 @@
   // Create a growable array of VFrames where each VFrame represents an inlined
   // Java frame.  This storage is allocated with the usual system arena.
   assert(deoptee.is_compiled_frame(), "Wrong frame type");
+
+#ifdef GRAAL
+  PcDesc* pc_desc = ((nmethod*) deoptee.cb())->pc_desc_at(deoptee.pc());
+  int decode_offset;
+  if (pc_desc != NULL && pc_desc->leaf_graph_id() != -1) {
+    GraalCompiler* compiler = (GraalCompiler*) ((nmethod*) deoptee.cb())->compiler();
+    if (PrintDeoptimizationDetails) {
+      tty->print_cr("leaf graph id: %d", pc_desc->leaf_graph_id());
+    }
+    compiler->deopt_leaf_graph(pc_desc->leaf_graph_id());
+  }
+#endif
+
   GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10);
   vframe* vf = vframe::new_vframe(&deoptee, &map, thread);
   while (!vf->is_top()) {