hotspot/src/share/vm/opto/idealKit.cpp
changeset 33449 8aca535611b8
parent 25930 eae8b7490d2c
child 33459 9d377e6f0e4c
equal deleted inserted replaced
33447:fa16119dcde7 33449:8aca535611b8
   366   return transform(ld);
   366   return transform(ld);
   367 }
   367 }
   368 
   368 
   369 Node* IdealKit::store(Node* ctl, Node* adr, Node *val, BasicType bt,
   369 Node* IdealKit::store(Node* ctl, Node* adr, Node *val, BasicType bt,
   370                       int adr_idx,
   370                       int adr_idx,
   371                       MemNode::MemOrd mo, bool require_atomic_access) {
   371                       MemNode::MemOrd mo, bool require_atomic_access,
       
   372                       bool mismatched) {
   372   assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory");
   373   assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory");
   373   const TypePtr* adr_type = NULL;
   374   const TypePtr* adr_type = NULL;
   374   debug_only(adr_type = C->get_adr_type(adr_idx));
   375   debug_only(adr_type = C->get_adr_type(adr_idx));
   375   Node *mem = memory(adr_idx);
   376   Node *mem = memory(adr_idx);
   376   Node* st;
   377   Node* st;
   377   if (require_atomic_access && bt == T_LONG) {
   378   if (require_atomic_access && bt == T_LONG) {
   378     st = StoreLNode::make_atomic(ctl, mem, adr, adr_type, val, mo);
   379     st = StoreLNode::make_atomic(ctl, mem, adr, adr_type, val, mo);
   379   } else {
   380   } else {
   380     st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo);
   381     st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo);
       
   382   }
       
   383   if (mismatched) {
       
   384     st->as_Store()->set_mismatched_access();
   381   }
   385   }
   382   st = transform(st);
   386   st = transform(st);
   383   set_memory(st, adr_idx);
   387   set_memory(st, adr_idx);
   384 
   388 
   385   return st;
   389   return st;