src/share/vm/opto/graphKit.hpp

changeset 8653
0ffee573412b
parent 8651
a50ab9692b6f
child 8856
ac27a9c85bea
child 9738
18fd6d87f16f
equal deleted inserted replaced
8652:057571442f86 8653:0ffee573412b
515 // We choose the unordered semantics by default because we have 515 // We choose the unordered semantics by default because we have
516 // adapted the `do_put_xxx' and `do_get_xxx' procedures for the case 516 // adapted the `do_put_xxx' and `do_get_xxx' procedures for the case
517 // of volatile fields. 517 // of volatile fields.
518 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, 518 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt,
519 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, 519 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest,
520 bool require_atomic_access = false) { 520 bool require_atomic_access = false, bool unaligned = false,
521 bool mismatched = false) {
521 // This version computes alias_index from bottom_type 522 // This version computes alias_index from bottom_type
522 return make_load(ctl, adr, t, bt, adr->bottom_type()->is_ptr(), 523 return make_load(ctl, adr, t, bt, adr->bottom_type()->is_ptr(),
523 mo, control_dependency, require_atomic_access); 524 mo, control_dependency, require_atomic_access,
525 unaligned, mismatched);
524 } 526 }
525 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, const TypePtr* adr_type, 527 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, const TypePtr* adr_type,
526 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, 528 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest,
527 bool require_atomic_access = false) { 529 bool require_atomic_access = false, bool unaligned = false,
530 bool mismatched = false) {
528 // This version computes alias_index from an address type 531 // This version computes alias_index from an address type
529 assert(adr_type != NULL, "use other make_load factory"); 532 assert(adr_type != NULL, "use other make_load factory");
530 return make_load(ctl, adr, t, bt, C->get_alias_index(adr_type), 533 return make_load(ctl, adr, t, bt, C->get_alias_index(adr_type),
531 mo, control_dependency, require_atomic_access); 534 mo, control_dependency, require_atomic_access,
535 unaligned, mismatched);
532 } 536 }
533 // This is the base version which is given an alias index. 537 // This is the base version which is given an alias index.
534 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, int adr_idx, 538 Node* make_load(Node* ctl, Node* adr, const Type* t, BasicType bt, int adr_idx,
535 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest, 539 MemNode::MemOrd mo, LoadNode::ControlDependency control_dependency = LoadNode::DependsOnlyOnTest,
536 bool require_atomic_access = false); 540 bool require_atomic_access = false, bool unaligned = false,
541 bool mismatched = false);
537 542
538 // Create & transform a StoreNode and store the effect into the 543 // Create & transform a StoreNode and store the effect into the
539 // parser's memory state. 544 // parser's memory state.
540 // 545 //
541 // We must ensure that stores of object references will be visible 546 // We must ensure that stores of object references will be visible
544 // semantics, if the stored value is an object reference that might 549 // semantics, if the stored value is an object reference that might
545 // point to a new object and may become externally visible. 550 // point to a new object and may become externally visible.
546 Node* store_to_memory(Node* ctl, Node* adr, Node* val, BasicType bt, 551 Node* store_to_memory(Node* ctl, Node* adr, Node* val, BasicType bt,
547 const TypePtr* adr_type, 552 const TypePtr* adr_type,
548 MemNode::MemOrd mo, 553 MemNode::MemOrd mo,
549 bool require_atomic_access = false) { 554 bool require_atomic_access = false,
555 bool unaligned = false,
556 bool mismatched = false) {
550 // This version computes alias_index from an address type 557 // This version computes alias_index from an address type
551 assert(adr_type != NULL, "use other store_to_memory factory"); 558 assert(adr_type != NULL, "use other store_to_memory factory");
552 return store_to_memory(ctl, adr, val, bt, 559 return store_to_memory(ctl, adr, val, bt,
553 C->get_alias_index(adr_type), 560 C->get_alias_index(adr_type),
554 mo, require_atomic_access); 561 mo, require_atomic_access,
562 unaligned, mismatched);
555 } 563 }
556 // This is the base version which is given alias index 564 // This is the base version which is given alias index
557 // Return the new StoreXNode 565 // Return the new StoreXNode
558 Node* store_to_memory(Node* ctl, Node* adr, Node* val, BasicType bt, 566 Node* store_to_memory(Node* ctl, Node* adr, Node* val, BasicType bt,
559 int adr_idx, 567 int adr_idx,
560 MemNode::MemOrd, 568 MemNode::MemOrd,
561 bool require_atomic_access = false); 569 bool require_atomic_access = false,
570 bool unaligned = false,
571 bool mismatched = false);
562 572
563 573
564 // All in one pre-barrier, store, post_barrier 574 // All in one pre-barrier, store, post_barrier
565 // Insert a write-barrier'd store. This is to let generational GC 575 // Insert a write-barrier'd store. This is to let generational GC
566 // work; we have to flag all oop-stores before the next GC point. 576 // work; we have to flag all oop-stores before the next GC point.
579 const TypePtr* adr_type, 589 const TypePtr* adr_type,
580 Node* val, 590 Node* val,
581 const TypeOopPtr* val_type, 591 const TypeOopPtr* val_type,
582 BasicType bt, 592 BasicType bt,
583 bool use_precise, 593 bool use_precise,
584 MemNode::MemOrd mo); 594 MemNode::MemOrd mo,
595 bool mismatched = false);
585 596
586 Node* store_oop_to_object(Node* ctl, 597 Node* store_oop_to_object(Node* ctl,
587 Node* obj, // containing obj 598 Node* obj, // containing obj
588 Node* adr, // actual adress to store val at 599 Node* adr, // actual adress to store val at
589 const TypePtr* adr_type, 600 const TypePtr* adr_type,
610 Node* obj, // containing obj 621 Node* obj, // containing obj
611 Node* adr, // actual adress to store val at 622 Node* adr, // actual adress to store val at
612 const TypePtr* adr_type, 623 const TypePtr* adr_type,
613 Node* val, 624 Node* val,
614 BasicType bt, 625 BasicType bt,
615 MemNode::MemOrd mo); 626 MemNode::MemOrd mo,
627 bool mismatched = false);
616 628
617 // For the few case where the barriers need special help 629 // For the few case where the barriers need special help
618 void pre_barrier(bool do_load, Node* ctl, 630 void pre_barrier(bool do_load, Node* ctl,
619 Node* obj, Node* adr, uint adr_idx, Node* val, const TypeOopPtr* val_type, 631 Node* obj, Node* adr, uint adr_idx, Node* val, const TypeOopPtr* val_type,
620 Node* pre_val, 632 Node* pre_val,

mercurial