Mercurial > hg > truffle
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());