643 virtual const Type* Value(PhaseGVN* phase) const;
644
645 // Check for identity function on memory (Load then Store at same address)
646 virtual Node* Identity(PhaseGVN* phase);
647
648 // Do not match memory edge
649 virtual uint match_edge(uint idx) const;
650
651 virtual const Type *bottom_type() const; // returns Type::MEMORY
652
653 // Map a store opcode to its corresponding own opcode, trivially.
654 virtual int store_Opcode() const { return Opcode(); }
655
656 // have all possible loads of the value stored been optimized away?
657 bool value_never_loaded(PhaseValues* phase) const;
658
659 bool has_reinterpret_variant(const Type* vt);
660 Node* convert_to_reinterpret_store(PhaseGVN& gvn, Node* val, const Type* vt);
661
662 MemBarNode* trailing_membar() const;
663 };
664
665 //------------------------------StoreBNode-------------------------------------
666 // Store byte to memory
667 class StoreBNode : public StoreNode {
668 public:
669 StoreBNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo)
670 : StoreNode(c, mem, adr, at, val, mo) {}
671 virtual int Opcode() const;
672 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
673 virtual BasicType value_basic_type() const { return T_BYTE; }
674 };
675
676 //------------------------------StoreCNode-------------------------------------
677 // Store char/short to memory
678 class StoreCNode : public StoreNode {
679 public:
680 StoreCNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo)
681 : StoreNode(c, mem, adr, at, val, mo) {}
682 virtual int Opcode() const;
|
643 virtual const Type* Value(PhaseGVN* phase) const;
644
645 // Check for identity function on memory (Load then Store at same address)
646 virtual Node* Identity(PhaseGVN* phase);
647
648 // Do not match memory edge
649 virtual uint match_edge(uint idx) const;
650
651 virtual const Type *bottom_type() const; // returns Type::MEMORY
652
653 // Map a store opcode to its corresponding own opcode, trivially.
654 virtual int store_Opcode() const { return Opcode(); }
655
656 // have all possible loads of the value stored been optimized away?
657 bool value_never_loaded(PhaseValues* phase) const;
658
659 bool has_reinterpret_variant(const Type* vt);
660 Node* convert_to_reinterpret_store(PhaseGVN& gvn, Node* val, const Type* vt);
661
662 MemBarNode* trailing_membar() const;
663
664 #ifndef PRODUCT
665 virtual void dump_spec(outputStream *st) const {
666 StoreNode::dump_spec(st);
667 if (is_release()) st->print("is_release");
668 }
669 #endif
670 };
671
672 //------------------------------StoreBNode-------------------------------------
673 // Store byte to memory
674 class StoreBNode : public StoreNode {
675 public:
676 StoreBNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo)
677 : StoreNode(c, mem, adr, at, val, mo) {}
678 virtual int Opcode() const;
679 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
680 virtual BasicType value_basic_type() const { return T_BYTE; }
681 };
682
683 //------------------------------StoreCNode-------------------------------------
684 // Store char/short to memory
685 class StoreCNode : public StoreNode {
686 public:
687 StoreCNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo)
688 : StoreNode(c, mem, adr, at, val, mo) {}
689 virtual int Opcode() const;
|