< prev index next >
src/share/vm/opto/castnode.hpp
Print this page
*** 60,76 ****
};
//------------------------------CastIINode-------------------------------------
// cast integer to integer (different range)
class CastIINode: public ConstraintCastNode {
public:
! CastIINode(Node *n, const Type *t, bool carry_dependency = false)
! : ConstraintCastNode(n, t, carry_dependency) {}
virtual int Opcode() const;
virtual uint ideal_reg() const { return Op_RegI; }
virtual const Type* Value(PhaseGVN* phase) const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------CastPPNode-------------------------------------
// cast pointer to pointer (different type)
class CastPPNode: public ConstraintCastNode {
--- 60,96 ----
};
//------------------------------CastIINode-------------------------------------
// cast integer to integer (different range)
class CastIINode: public ConstraintCastNode {
+ protected:
+ // Is this node dependent on a range check?
+ const bool _range_check_dependency;
+ virtual uint cmp(const Node &n) const;
+ virtual uint size_of() const;
+
public:
! CastIINode(Node* n, const Type* t, bool carry_dependency = false, bool range_check_dependency = false)
! : ConstraintCastNode(n, t, carry_dependency), _range_check_dependency(range_check_dependency) {
! init_class_id(Class_CastII);
! }
virtual int Opcode() const;
virtual uint ideal_reg() const { return Op_RegI; }
virtual const Type* Value(PhaseGVN* phase) const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
+ const bool has_range_check() {
+ #ifdef _LP64
+ return _range_check_dependency;
+ #else
+ assert(!_range_check_dependency, "Should not have range check dependency");
+ return false;
+ #endif
+ }
+
+ #ifndef PRODUCT
+ virtual void dump_spec(outputStream* st) const;
+ #endif
};
//------------------------------CastPPNode-------------------------------------
// cast pointer to pointer (different type)
class CastPPNode: public ConstraintCastNode {
< prev index next >