8224580: Matcher can cause oop field/array element to be reloaded
Reviewed-by: neliasso, rkennke, dlong
This commit is contained in:
parent
9fbdec42c4
commit
04c0750041
@ -2066,6 +2066,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;
|
||||
}
|
||||
@ -2098,13 +2104,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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user