diff src/share/vm/graal/graalVMEntries.cpp @ 2990:66ecfc755c86

inlining of monomorphic profiled callsites with quick type checks
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 15 Jun 2011 16:49:46 +0200
parents f9c6d9bc4fbc
children f00918f35c7f
line wrap: on
line diff
--- a/src/share/vm/graal/graalVMEntries.cpp	Wed Jun 15 15:57:08 2011 +0200
+++ b/src/share/vm/graal/graalVMEntries.cpp	Wed Jun 15 16:49:46 2011 +0200
@@ -186,8 +186,20 @@
     RiTypeProfile::set_count(obj, cimethod->scale_count(profile.count(), 1));
     RiTypeProfile::set_morphism(obj, profile.morphism());
 
-    RiTypeProfile::set_probabilities(obj, NULL);
-    RiTypeProfile::set_types(obj, NULL);
+    typeArrayHandle probabilities = oopFactory::new_typeArray(T_FLOAT, profile.limit(), CHECK_NULL);
+    objArrayHandle types = oopFactory::new_objArray(SystemDictionary::RiType_klass(), profile.limit(), CHECK_NULL);
+    for (int i=0; i<profile.limit(); i++) {
+      float prob = profile.receiver_prob(i);
+      ciKlass* receiver = profile.receiver(i);
+      oop type = GraalCompiler::get_RiType(receiver, KlassHandle(), CHECK_NULL);
+
+      probabilities->float_at_put(i, prob);
+      types->obj_at_put(i, type);
+    }
+
+    RiTypeProfile::set_probabilities(obj, probabilities());
+    RiTypeProfile::set_types(obj, types());
+
   }
 
   return JNIHandles::make_local(obj());