src/share/vm/opto/idealKit.cpp

changeset 8653
0ffee573412b
parent 6503
a9becfeecd1b
child 8856
ac27a9c85bea
equal deleted inserted replaced
8652:057571442f86 8653:0ffee573412b
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(C, ctl, mem, adr, adr_type, val, mo); 379 st = StoreLNode::make_atomic(C, 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;

mercurial