1006 // Eliminate Initialize node. |
1006 // Eliminate Initialize node. |
1007 InitializeNode *init = use->as_Initialize(); |
1007 InitializeNode *init = use->as_Initialize(); |
1008 assert(init->outcnt() <= 2, "only a control and memory projection expected"); |
1008 assert(init->outcnt() <= 2, "only a control and memory projection expected"); |
1009 Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control); |
1009 Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control); |
1010 if (ctrl_proj != NULL) { |
1010 if (ctrl_proj != NULL) { |
1011 assert(init->in(TypeFunc::Control) == _fallthroughcatchproj, "allocation control projection"); |
1011 _igvn.replace_node(ctrl_proj, init->in(TypeFunc::Control)); |
1012 _igvn.replace_node(ctrl_proj, _fallthroughcatchproj); |
1012 #ifdef ASSERT |
|
1013 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
1014 Node* tmp = init->in(TypeFunc::Control); |
|
1015 while (bs->is_gc_barrier_node(tmp)) { |
|
1016 Node* tmp2 = bs->step_over_gc_barrier_ctrl(tmp); |
|
1017 assert(tmp != tmp2, "Must make progress"); |
|
1018 tmp = tmp2; |
|
1019 } |
|
1020 assert(tmp == _fallthroughcatchproj, "allocation control projection"); |
|
1021 #endif |
1013 } |
1022 } |
1014 Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory); |
1023 Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory); |
1015 if (mem_proj != NULL) { |
1024 if (mem_proj != NULL) { |
1016 Node *mem = init->in(TypeFunc::Memory); |
1025 Node *mem = init->in(TypeFunc::Memory); |
1017 #ifdef ASSERT |
1026 #ifdef ASSERT |