1491 MemNode::MemOrd mo, |
1491 MemNode::MemOrd mo, |
1492 LoadNode::ControlDependency control_dependency, |
1492 LoadNode::ControlDependency control_dependency, |
1493 bool require_atomic_access, |
1493 bool require_atomic_access, |
1494 bool unaligned, |
1494 bool unaligned, |
1495 bool mismatched, |
1495 bool mismatched, |
1496 bool unsafe) { |
1496 bool unsafe, |
|
1497 uint8_t barrier_data) { |
1497 assert(adr_idx != Compile::AliasIdxTop, "use other make_load factory" ); |
1498 assert(adr_idx != Compile::AliasIdxTop, "use other make_load factory" ); |
1498 const TypePtr* adr_type = NULL; // debug-mode-only argument |
1499 const TypePtr* adr_type = NULL; // debug-mode-only argument |
1499 debug_only(adr_type = C->get_adr_type(adr_idx)); |
1500 debug_only(adr_type = C->get_adr_type(adr_idx)); |
1500 Node* mem = memory(adr_idx); |
1501 Node* mem = memory(adr_idx); |
1501 Node* ld; |
1502 Node* ld; |
1502 if (require_atomic_access && bt == T_LONG) { |
1503 if (require_atomic_access && bt == T_LONG) { |
1503 ld = LoadLNode::make_atomic(ctl, mem, adr, adr_type, t, mo, control_dependency, unaligned, mismatched, unsafe); |
1504 ld = LoadLNode::make_atomic(ctl, mem, adr, adr_type, t, mo, control_dependency, unaligned, mismatched, unsafe, barrier_data); |
1504 } else if (require_atomic_access && bt == T_DOUBLE) { |
1505 } else if (require_atomic_access && bt == T_DOUBLE) { |
1505 ld = LoadDNode::make_atomic(ctl, mem, adr, adr_type, t, mo, control_dependency, unaligned, mismatched, unsafe); |
1506 ld = LoadDNode::make_atomic(ctl, mem, adr, adr_type, t, mo, control_dependency, unaligned, mismatched, unsafe, barrier_data); |
1506 } else { |
1507 } else { |
1507 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo, control_dependency, unaligned, mismatched, unsafe); |
1508 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo, control_dependency, unaligned, mismatched, unsafe, barrier_data); |
1508 } |
1509 } |
1509 ld = _gvn.transform(ld); |
1510 ld = _gvn.transform(ld); |
1510 if (((bt == T_OBJECT) && C->do_escape_analysis()) || C->eliminate_boxing()) { |
1511 if (((bt == T_OBJECT) && C->do_escape_analysis()) || C->eliminate_boxing()) { |
1511 // Improve graph before escape analysis and boxing elimination. |
1512 // Improve graph before escape analysis and boxing elimination. |
1512 record_for_igvn(ld); |
1513 record_for_igvn(ld); |