521 // adapted the `do_put_xxx' and `do_get_xxx' procedures for the case |
521 // adapted the `do_put_xxx' and `do_get_xxx' procedures for the case |
522 // of volatile fields. |
522 // of volatile fields. |
523 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, |
523 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, |
524 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
524 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
525 bool require_atomic_access = false, bool unaligned = false, |
525 bool require_atomic_access = false, bool unaligned = false, |
526 bool mismatched = false, bool unsafe = false) { |
526 bool mismatched = false, bool unsafe = false, uint8_t barrier_data = 0) { |
527 // This version computes alias_index from bottom_type |
527 // This version computes alias_index from bottom_type |
528 return make_load(ctl, adr, t, bt, adr->bottom_type()->is_ptr(), |
528 return make_load(ctl, adr, t, bt, adr->bottom_type()->is_ptr(), |
529 mo, control_dependency, require_atomic_access, |
529 mo, control_dependency, require_atomic_access, |
530 unaligned, mismatched, unsafe); |
530 unaligned, mismatched, unsafe, barrier_data); |
531 } |
531 } |
532 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, const TypePtr* adr_type, |
532 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, const TypePtr* adr_type, |
533 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
533 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
534 bool require_atomic_access = false, bool unaligned = false, |
534 bool require_atomic_access = false, bool unaligned = false, |
535 bool mismatched = false, bool unsafe = false) { |
535 bool mismatched = false, bool unsafe = false, uint8_t barrier_data = 0) { |
536 // This version computes alias_index from an address type |
536 // This version computes alias_index from an address type |
537 assert(adr_type != NULL, "use other make_load factory"); |
537 assert(adr_type != NULL, "use other make_load factory"); |
538 return make_load(ctl, adr, t, bt, C->get_alias_index(adr_type), |
538 return make_load(ctl, adr, t, bt, C->get_alias_index(adr_type), |
539 mo, control_dependency, require_atomic_access, |
539 mo, control_dependency, require_atomic_access, |
540 unaligned, mismatched, unsafe); |
540 unaligned, mismatched, unsafe, barrier_data); |
541 } |
541 } |
542 // This is the base version which is given an alias index. |
542 // This is the base version which is given an alias index. |
543 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, int adr_idx, |
543 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, int adr_idx, |
544 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
544 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, |
545 bool require_atomic_access = false, bool unaligned = false, |
545 bool require_atomic_access = false, bool unaligned = false, |
546 bool mismatched = false, bool unsafe = false); |
546 bool mismatched = false, bool unsafe = false, uint8_t barrier_data = 0); |
547 |
547 |
548 // Create & transform a StoreNode and store the effect into the |
548 // Create & transform a StoreNode and store the effect into the |
549 // parser's memory state. |
549 // parser's memory state. |
550 // |
550 // |
551 // We must ensure that stores of object references will be visible |
551 // We must ensure that stores of object references will be visible |