8058825: EA: ConnectionGraph::split_unique_types does incorrect scalar replacement
authorvlivanov
Mon, 29 Sep 2014 11:46:05 -0700
changeset 26917 c3574c0b2da0
parent 26916 8a1deee4f9b4
child 26918 4e1761669426
8058825: EA: ConnectionGraph::split_unique_types does incorrect scalar replacement Reviewed-by: kvn
hotspot/src/share/vm/opto/escape.cpp
--- a/hotspot/src/share/vm/opto/escape.cpp	Mon Sep 29 09:32:15 2014 -0700
+++ b/hotspot/src/share/vm/opto/escape.cpp	Mon Sep 29 11:46:05 2014 -0700
@@ -2839,6 +2839,13 @@
           continue;
         }
       }
+
+      const TypeOopPtr *t = igvn->type(n)->isa_oopptr();
+      if (t == NULL)
+        continue;  // not a TypeOopPtr
+      if (!t->klass_is_exact())
+        continue; // not an unique type
+
       if (alloc->is_Allocate()) {
         // Set the scalar_replaceable flag for allocation
         // so it could be eliminated.
@@ -2857,10 +2864,7 @@
       //   - not determined to be ineligible by escape analysis
       set_map(alloc, n);
       set_map(n, alloc);
-      const TypeOopPtr *t = igvn->type(n)->isa_oopptr();
-      if (t == NULL)
-        continue;  // not a TypeOopPtr
-      const TypeOopPtr* tinst = t->cast_to_exactness(true)->is_oopptr()->cast_to_instance_id(ni);
+      const TypeOopPtr* tinst = t->cast_to_instance_id(ni);
       igvn->hash_delete(n);
       igvn->set_type(n,  tinst);
       n->raise_bottom_type(tinst);