提交 651a25e7 编写于 作者: V vlivanov

8058825: EA: ConnectionGraph::split_unique_types does incorrect scalar replacement

Reviewed-by: kvn
上级 c444407b
...@@ -2839,6 +2839,13 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist) ...@@ -2839,6 +2839,13 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist)
continue; 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()) { if (alloc->is_Allocate()) {
// Set the scalar_replaceable flag for allocation // Set the scalar_replaceable flag for allocation
// so it could be eliminated. // so it could be eliminated.
...@@ -2857,10 +2864,7 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist) ...@@ -2857,10 +2864,7 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist)
// - not determined to be ineligible by escape analysis // - not determined to be ineligible by escape analysis
set_map(alloc, n); set_map(alloc, n);
set_map(n, alloc); set_map(n, alloc);
const TypeOopPtr *t = igvn->type(n)->isa_oopptr(); const TypeOopPtr* tinst = t->cast_to_instance_id(ni);
if (t == NULL)
continue; // not a TypeOopPtr
const TypeOopPtr* tinst = t->cast_to_exactness(true)->is_oopptr()->cast_to_instance_id(ni);
igvn->hash_delete(n); igvn->hash_delete(n);
igvn->set_type(n, tinst); igvn->set_type(n, tinst);
n->raise_bottom_type(tinst); n->raise_bottom_type(tinst);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册