提交 cbf1621c 编写于 作者: R roland

8224580: Matcher can cause oop field/array element to be reloaded

Reviewed-by: neliasso, rkennke, dlong
上级 cc0466ab
......@@ -2043,6 +2043,12 @@ void Matcher::find_shared( Node *n ) {
// Node is shared and has no reason to clone. Flag it as shared.
// This causes it to match into a register for the sharing.
set_shared(n); // Flag as shared and
if (n->is_DecodeNarrowPtr()) {
// Oop field/array element loads must be shared but since
// they are shared through a DecodeN they may appear to have
// a single use so force sharing here.
set_shared(n->in(1));
}
mstack.pop(); // remove node from stack
continue;
}
......@@ -2165,13 +2171,6 @@ void Matcher::find_shared( Node *n ) {
continue; // for(int i = ...)
}
if( mop == Op_AddP && m->in(AddPNode::Base)->is_DecodeNarrowPtr()) {
// Bases used in addresses must be shared but since
// they are shared through a DecodeN they may appear
// to have a single use so force sharing here.
set_shared(m->in(AddPNode::Base)->in(1));
}
// if 'n' and 'm' are part of a graph for BMI instruction, clone this node.
#ifdef X86
if (UseBMI1Instructions && is_bmi_pattern(n, m)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册