src/share/vm/opto/idealKit.cpp
Print this page
rev 5661 : 8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering.
*** 357,385 ****
const TypePtr* adr_type = NULL; // debug-mode-only argument
debug_only(adr_type = C->get_adr_type(adr_idx));
Node* mem = memory(adr_idx);
Node* ld;
if (require_atomic_access && bt == T_LONG) {
! ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t);
} else {
! ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt);
}
return transform(ld);
}
Node* IdealKit::store(Node* ctl, Node* adr, Node *val, BasicType bt,
int adr_idx,
! bool require_atomic_access) {
! assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory" );
const TypePtr* adr_type = NULL;
debug_only(adr_type = C->get_adr_type(adr_idx));
Node *mem = memory(adr_idx);
Node* st;
if (require_atomic_access && bt == T_LONG) {
! st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val);
} else {
! st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt);
}
st = transform(st);
set_memory(st, adr_idx);
return st;
--- 357,385 ----
const TypePtr* adr_type = NULL; // debug-mode-only argument
debug_only(adr_type = C->get_adr_type(adr_idx));
Node* mem = memory(adr_idx);
Node* ld;
if (require_atomic_access && bt == T_LONG) {
! ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t, LoadNode::unordered);
} else {
! ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, LoadNode::unordered);
}
return transform(ld);
}
Node* IdealKit::store(Node* ctl, Node* adr, Node *val, BasicType bt,
int adr_idx,
! bool require_atomic_access, StoreNode::Sem sem) {
! assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory");
const TypePtr* adr_type = NULL;
debug_only(adr_type = C->get_adr_type(adr_idx));
Node *mem = memory(adr_idx);
Node* st;
if (require_atomic_access && bt == T_LONG) {
! st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val, sem);
} else {
! st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, sem);
}
st = transform(st);
set_memory(st, adr_idx);
return st;