--- old/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp 2018-06-06 00:37:28.623281310 +0200 +++ new/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp 2018-06-06 00:37:28.366270243 +0200 @@ -761,15 +761,11 @@ // barrier: the load cannot be allowed to float above the // dominating barrier Node* load = in_val; - Node* decode = NULL; - if (load->is_DecodeN()) { - decode = load; - load = load->in(1); - } + if (load->is_Load()) { Node* new_load = load->clone(); Node* addp = new_load->in(MemNode::Address); - assert(addp->is_AddP() || addp->is_Phi(), "bad address"); + assert(addp->is_AddP() || addp->is_Phi() || addp->is_Load(), "bad address"); Node* cast = new CastPPNode(addp, igvn.type(addp), true); Node* ctrl = NULL; Node* similar = barrier->in(LoadBarrierNode::Similar); @@ -786,14 +782,7 @@ new_load->set_req(MemNode::Address, cast); igvn.transform(new_load); - Node* new_in_val = new_load; - if (decode != NULL) { - new_in_val = decode->clone(); - new_in_val->set_req(1, new_load); - igvn.transform(new_in_val); - } - - igvn.replace_node(out_res, new_in_val); + igvn.replace_node(out_res, new_load); igvn.replace_node(out_ctrl, in_ctrl); return; }