757 s1, s2) {}; |
757 s1, s2) {}; |
758 virtual int Opcode() const; |
758 virtual int Opcode() const; |
759 virtual bool depends_only_on_test() const { return false; } |
759 virtual bool depends_only_on_test() const { return false; } |
760 virtual const Type* bottom_type() const { return TypeInt::INT; } |
760 virtual const Type* bottom_type() const { return TypeInt::INT; } |
761 // a StrCompNode (conservatively) aliases with everything: |
761 // a StrCompNode (conservatively) aliases with everything: |
|
762 virtual const TypePtr* adr_type() const { return TypePtr::BOTTOM; } |
|
763 virtual uint match_edge(uint idx) const; |
|
764 virtual uint ideal_reg() const { return Op_RegI; } |
|
765 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
|
766 }; |
|
767 |
|
768 //------------------------------StrEquals------------------------------------- |
|
769 class StrEqualsNode: public Node { |
|
770 public: |
|
771 StrEqualsNode(Node *control, |
|
772 Node* char_array_mem, |
|
773 Node* value_mem, |
|
774 Node* count_mem, |
|
775 Node* offset_mem, |
|
776 Node* s1, Node* s2): Node(control, |
|
777 char_array_mem, |
|
778 value_mem, |
|
779 count_mem, |
|
780 offset_mem, |
|
781 s1, s2) {}; |
|
782 virtual int Opcode() const; |
|
783 virtual bool depends_only_on_test() const { return false; } |
|
784 virtual const Type* bottom_type() const { return TypeInt::BOOL; } |
|
785 // a StrEqualsNode (conservatively) aliases with everything: |
|
786 virtual const TypePtr* adr_type() const { return TypePtr::BOTTOM; } |
|
787 virtual uint match_edge(uint idx) const; |
|
788 virtual uint ideal_reg() const { return Op_RegI; } |
|
789 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
|
790 }; |
|
791 |
|
792 //------------------------------StrIndexOf------------------------------------- |
|
793 class StrIndexOfNode: public Node { |
|
794 public: |
|
795 StrIndexOfNode(Node *control, |
|
796 Node* char_array_mem, |
|
797 Node* value_mem, |
|
798 Node* count_mem, |
|
799 Node* offset_mem, |
|
800 Node* s1, Node* s2): Node(control, |
|
801 char_array_mem, |
|
802 value_mem, |
|
803 count_mem, |
|
804 offset_mem, |
|
805 s1, s2) {}; |
|
806 virtual int Opcode() const; |
|
807 virtual bool depends_only_on_test() const { return false; } |
|
808 virtual const Type* bottom_type() const { return TypeInt::INT; } |
|
809 // a StrIndexOfNode (conservatively) aliases with everything: |
762 virtual const TypePtr* adr_type() const { return TypePtr::BOTTOM; } |
810 virtual const TypePtr* adr_type() const { return TypePtr::BOTTOM; } |
763 virtual uint match_edge(uint idx) const; |
811 virtual uint match_edge(uint idx) const; |
764 virtual uint ideal_reg() const { return Op_RegI; } |
812 virtual uint ideal_reg() const { return Op_RegI; } |
765 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
813 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
766 }; |
814 }; |