src/share/vm/opto/mathexactnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/opto/mathexactnode.hpp

src/share/vm/opto/mathexactnode.hpp

Print this page
rev 5513 : 8026844: Various Math functions needs intrinsification
Reviewed-by: duke

*** 37,46 **** --- 37,47 ---- class PhaseGVN; class PhaseTransform; class MathExactNode : public MultiNode { public: + MathExactNode(Node* ctrl, Node* in1); MathExactNode(Node* ctrl, Node* in1, Node* in2); enum { result_proj_node = 0, flags_proj_node = 1 };
*** 60,78 **** IfNode* if_node() const; BoolNode* bool_node() const; Node* no_overflow(PhaseGVN *phase, Node* new_result); }; ! class AddExactINode : public MathExactNode { ! public: ! AddExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {} virtual int Opcode() const; virtual const Type* bottom_type() const { return TypeTuple::INT_CC_PAIR; } virtual Node* match(const ProjNode* proj, const Matcher* m); virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); }; class FlagsProjNode : public ProjNode { public: FlagsProjNode(Node* src, uint con) : ProjNode(src, con) { init_class_id(Class_FlagsProj); } --- 61,144 ---- IfNode* if_node() const; BoolNode* bool_node() const; Node* no_overflow(PhaseGVN *phase, Node* new_result); }; ! class MathExactINode : public MathExactNode { ! public: ! MathExactINode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) { init_class_id(Class_MathExactI); } ! MathExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) { init_class_id(Class_MathExactI); } virtual int Opcode() const; + virtual Node* match(const ProjNode* proj, const Matcher* m); virtual const Type* bottom_type() const { return TypeTuple::INT_CC_PAIR; } + }; + + class MathExactLNode : public MathExactNode { + public: + MathExactLNode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) { init_class_id(Class_MathExactL); } + MathExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) { init_class_id(Class_MathExactL); } + virtual int Opcode() const; virtual Node* match(const ProjNode* proj, const Matcher* m); + virtual const Type* bottom_type() const { return TypeTuple::LONG_CC_PAIR; } + }; + + class AddExactINode : public MathExactINode { + public: + AddExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) { init_class_id(Class_AddExactI); } + virtual int Opcode() const; virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); }; + class AddExactLNode : public MathExactLNode { + public: + AddExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) { init_class_id(Class_AddExactL); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class SubExactINode : public MathExactINode { + public: + SubExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) { init_class_id(Class_SubExactI); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class SubExactLNode : public MathExactLNode { + public: + SubExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) { init_class_id(Class_SubExactL); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class NegExactINode : public MathExactINode { + public: + NegExactINode(Node* ctrl, Node* in1) : MathExactINode(ctrl, in1) { init_class_id(Class_NegExactI); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class NegExactLNode : public MathExactLNode { + public: + NegExactLNode(Node* ctrl, Node* in1) : MathExactLNode(ctrl, in1) { init_class_id(Class_NegExactL); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class MulExactINode : public MathExactINode { + public: + MulExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) { init_class_id(Class_MulExactI); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + + class MulExactLNode : public MathExactLNode { + public: + MulExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) { init_class_id(Class_MulExactL); } + virtual int Opcode() const; + virtual Node* Ideal(PhaseGVN* phase, bool can_reshape); + }; + class FlagsProjNode : public ProjNode { public: FlagsProjNode(Node* src, uint con) : ProjNode(src, con) { init_class_id(Class_FlagsProj); }
src/share/vm/opto/mathexactnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File