432 return NULL; // can't find a value on this path |
432 return NULL; // can't find a value on this path |
433 } |
433 } |
434 if (val == mem) { |
434 if (val == mem) { |
435 values.at_put(j, mem); |
435 values.at_put(j, mem); |
436 } else if (val->is_Store()) { |
436 } else if (val->is_Store()) { |
437 values.at_put(j, val->in(MemNode::ValueIn)); |
437 Node* n = val->in(MemNode::ValueIn); |
|
438 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
439 n = bs->step_over_gc_barrier(n); |
|
440 values.at_put(j, n); |
438 } else if(val->is_Proj() && val->in(0) == alloc) { |
441 } else if(val->is_Proj() && val->in(0) == alloc) { |
439 values.at_put(j, _igvn.zerocon(ft)); |
442 values.at_put(j, _igvn.zerocon(ft)); |
440 } else if (val->is_Phi()) { |
443 } else if (val->is_Phi()) { |
441 val = value_from_mem_phi(val, ft, phi_type, adr_t, alloc, value_phis, level-1); |
444 val = value_from_mem_phi(val, ft, phi_type, adr_t, alloc, value_phis, level-1); |
442 if (val == NULL) { |
445 if (val == NULL) { |
544 if (mem != NULL) { |
547 if (mem != NULL) { |
545 if (mem == start_mem || mem == alloc_mem) { |
548 if (mem == start_mem || mem == alloc_mem) { |
546 // hit a sentinel, return appropriate 0 value |
549 // hit a sentinel, return appropriate 0 value |
547 return _igvn.zerocon(ft); |
550 return _igvn.zerocon(ft); |
548 } else if (mem->is_Store()) { |
551 } else if (mem->is_Store()) { |
549 return mem->in(MemNode::ValueIn); |
552 Node* n = mem->in(MemNode::ValueIn); |
|
553 BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); |
|
554 n = bs->step_over_gc_barrier(n); |
|
555 return n; |
550 } else if (mem->is_Phi()) { |
556 } else if (mem->is_Phi()) { |
551 // attempt to produce a Phi reflecting the values on the input paths of the Phi |
557 // attempt to produce a Phi reflecting the values on the input paths of the Phi |
552 Node_Stack value_phis(a, 8); |
558 Node_Stack value_phis(a, 8); |
553 Node * phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit); |
559 Node * phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit); |
554 if (phi != NULL) { |
560 if (phi != NULL) { |