8168996: C2 crash at postaloc.cpp:140 : assert(false) failed: unexpected yanked node
Summary: Prevent MemBarAcquire from keeping a LoadNNode alive by adding it to the worklist if it is the only user of a DecodeNNode.
Reviewed-by: kvn
--- a/hotspot/src/share/vm/opto/node.cpp Sun Nov 27 19:58:30 2016 -0800
+++ b/hotspot/src/share/vm/opto/node.cpp Tue Nov 29 08:16:15 2016 +0100
@@ -1117,8 +1117,8 @@
if (this->is_Store()) {
// Condition for back-to-back stores folding.
return n->Opcode() == op && n->in(MemNode::Memory) == this;
- } else if (this->is_Load()) {
- // Condition for removing an unused LoadNode from the MemBarAcquire precedence input
+ } else if (this->is_Load() || this->is_DecodeN()) {
+ // Condition for removing an unused LoadNode or DecodeNNode from the MemBarAcquire precedence input
return n->Opcode() == Op_MemBarAcquire;
} else if (op == Op_AddL) {
// Condition for convL2I(addL(x,y)) ==> addI(convL2I(x),convL2I(y))