6700102: c2 assertion "counter_changed,"failed dependencies, but counter didn't change")" with AggressiveOpts
authorkvn
Thu, 15 May 2008 22:40:43 -0700
changeset 580 aed902488ae4
parent 394 c33507c3ac75
child 581 02338c8a1bcf
6700102: c2 assertion "counter_changed,"failed dependencies, but counter didn't change")" with AggressiveOpts Summary: Bytecode Escape Analyzer does not have the check for the case described in 6389127. Reviewed-by: never
hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp
--- a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp	Wed May 14 00:41:06 2008 -0700
+++ b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.cpp	Thu May 15 22:40:43 2008 -0700
@@ -218,6 +218,13 @@
   ciInstanceKlass* callee_holder = ciEnv::get_instance_klass_for_declared_method_holder(holder);
   ciInstanceKlass* actual_recv = callee_holder;
 
+  // some methods are obviously bindable without any type checks so
+  // convert them directly to an invokespecial.
+  if (target->is_loaded() && !target->is_abstract() &&
+      target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) {
+    code = Bytecodes::_invokespecial;
+  }
+
   // compute size of arguments
   int arg_size = target->arg_size();
   if (!target->is_loaded() && code == Bytecodes::_invokestatic) {