25 #ifndef SHARE_VM_OPTO_MATHEXACTNODE_HPP |
25 #ifndef SHARE_VM_OPTO_MATHEXACTNODE_HPP |
26 #define SHARE_VM_OPTO_MATHEXACTNODE_HPP |
26 #define SHARE_VM_OPTO_MATHEXACTNODE_HPP |
27 |
27 |
28 #include "opto/multnode.hpp" |
28 #include "opto/multnode.hpp" |
29 #include "opto/node.hpp" |
29 #include "opto/node.hpp" |
|
30 #include "opto/subnode.hpp" |
30 #include "opto/type.hpp" |
31 #include "opto/type.hpp" |
31 |
32 |
|
33 class BoolNode; |
|
34 class IfNode; |
32 class Node; |
35 class Node; |
33 |
36 |
34 class PhaseGVN; |
37 class PhaseGVN; |
35 class PhaseTransform; |
38 class PhaseTransform; |
36 |
39 |
47 virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); } |
50 virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); } |
48 virtual uint hash() const { return Node::hash(); } |
51 virtual uint hash() const { return Node::hash(); } |
49 virtual bool is_CFG() const { return false; } |
52 virtual bool is_CFG() const { return false; } |
50 virtual uint ideal_reg() const { return NotAMachineReg; } |
53 virtual uint ideal_reg() const { return NotAMachineReg; } |
51 |
54 |
52 ProjNode* result_node() { return proj_out(result_proj_node); } |
55 ProjNode* result_node() const { return proj_out(result_proj_node); } |
53 ProjNode* flags_node() { return proj_out(flags_proj_node); } |
56 ProjNode* flags_node() const { return proj_out(flags_proj_node); } |
|
57 Node* control_node() const; |
|
58 Node* non_throwing_branch() const; |
54 protected: |
59 protected: |
|
60 IfNode* if_node() const; |
|
61 BoolNode* bool_node() const; |
55 Node* no_overflow(PhaseGVN *phase, Node* new_result); |
62 Node* no_overflow(PhaseGVN *phase, Node* new_result); |
56 }; |
63 }; |
57 |
64 |
58 class AddExactINode : public MathExactNode { |
65 class AddExactINode : public MathExactNode { |
59 public: |
66 public: |