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;