< prev index next >

src/share/vm/opto/castnode.cpp

Print this page

        

*** 31,47 **** #include "opto/subnode.hpp" #include "opto/type.hpp" //============================================================================= // If input is already higher or equal to cast type, then this is an identity. ! Node *ConstraintCastNode::Identity( PhaseTransform *phase ) { return phase->type(in(1))->higher_equal_speculative(_type) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type ! const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; const Type* ft = phase->type(in(1))->filter_speculative(_type); #ifdef ASSERT // Previous versions of this function had some special case logic, --- 31,47 ---- #include "opto/subnode.hpp" #include "opto/type.hpp" //============================================================================= // If input is already higher or equal to cast type, then this is an identity. ! Node* ConstraintCastNode::Identity(PhaseGVN* phase) { return phase->type(in(1))->higher_equal_speculative(_type) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type ! const Type* ConstraintCastNode::Value(PhaseGVN* phase) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; const Type* ft = phase->type(in(1))->filter_speculative(_type); #ifdef ASSERT // Previous versions of this function had some special case logic,
*** 79,96 **** uint CastIINode::cmp(const Node &n) const { return TypeNode::cmp(n) && ((CastIINode&)n)._carry_dependency == _carry_dependency; } ! Node *CastIINode::Identity(PhaseTransform *phase) { if (_carry_dependency) { return this; } return ConstraintCastNode::Identity(phase); } ! const Type *CastIINode::Value(PhaseTransform *phase) const { const Type *res = ConstraintCastNode::Value(phase); // Try to improve the type of the CastII if we recognize a CmpI/If // pattern. if (_carry_dependency) { --- 79,96 ---- uint CastIINode::cmp(const Node &n) const { return TypeNode::cmp(n) && ((CastIINode&)n)._carry_dependency == _carry_dependency; } ! Node* CastIINode::Identity(PhaseGVN* phase) { if (_carry_dependency) { return this; } return ConstraintCastNode::Identity(phase); } ! const Type* CastIINode::Value(PhaseGVN* phase) const { const Type *res = ConstraintCastNode::Value(phase); // Try to improve the type of the CastII if we recognize a CmpI/If // pattern. if (_carry_dependency) {
*** 164,182 **** #endif //============================================================================= //------------------------------Identity--------------------------------------- // If input is already higher or equal to cast type, then this is an identity. ! Node *CheckCastPPNode::Identity( PhaseTransform *phase ) { // Toned down to rescue meeting at a Phi 3 different oops all implementing // the same interface. CompileTheWorld starting at 502, kd12rc1.zip. return (phase->type(in(1)) == phase->type(this)) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type, unless working with an Interface ! const Type *CheckCastPPNode::Value( PhaseTransform *phase ) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; const Type *inn = phase->type(in(1)); if( inn == Type::TOP ) return Type::TOP; // No information yet --- 164,182 ---- #endif //============================================================================= //------------------------------Identity--------------------------------------- // If input is already higher or equal to cast type, then this is an identity. ! Node* CheckCastPPNode::Identity(PhaseGVN* phase) { // Toned down to rescue meeting at a Phi 3 different oops all implementing // the same interface. CompileTheWorld starting at 502, kd12rc1.zip. return (phase->type(in(1)) == phase->type(this)) ? in(1) : this; } //------------------------------Value------------------------------------------ // Take 'join' of input and cast-up type, unless working with an Interface ! const Type* CheckCastPPNode::Value(PhaseGVN* phase) const { if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP; const Type *inn = phase->type(in(1)); if( inn == Type::TOP ) return Type::TOP; // No information yet
*** 262,272 **** return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; } //============================================================================= //------------------------------Value------------------------------------------ ! const Type *CastX2PNode::Value( PhaseTransform *phase ) const { const Type* t = phase->type(in(1)); if (t == Type::TOP) return Type::TOP; if (t->base() == Type_X && t->singleton()) { uintptr_t bits = (uintptr_t) t->is_intptr_t()->get_con(); if (bits == 0) return TypePtr::NULL_PTR; --- 262,272 ---- return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; } //============================================================================= //------------------------------Value------------------------------------------ ! const Type* CastX2PNode::Value(PhaseGVN* phase) const { const Type* t = phase->type(in(1)); if (t == Type::TOP) return Type::TOP; if (t->base() == Type_X && t->singleton()) { uintptr_t bits = (uintptr_t) t->is_intptr_t()->get_con(); if (bits == 0) return TypePtr::NULL_PTR;
*** 326,343 **** } return NULL; } //------------------------------Identity--------------------------------------- ! Node *CastX2PNode::Identity( PhaseTransform *phase ) { if (in(1)->Opcode() == Op_CastP2X) return in(1)->in(1); return this; } //============================================================================= //------------------------------Value------------------------------------------ ! const Type *CastP2XNode::Value( PhaseTransform *phase ) const { const Type* t = phase->type(in(1)); if (t == Type::TOP) return Type::TOP; if (t->base() == Type::RawPtr && t->singleton()) { uintptr_t bits = (uintptr_t) t->is_rawptr()->get_con(); return TypeX::make(bits); --- 326,343 ---- } return NULL; } //------------------------------Identity--------------------------------------- ! Node* CastX2PNode::Identity(PhaseGVN* phase) { if (in(1)->Opcode() == Op_CastP2X) return in(1)->in(1); return this; } //============================================================================= //------------------------------Value------------------------------------------ ! const Type* CastP2XNode::Value(PhaseGVN* phase) const { const Type* t = phase->type(in(1)); if (t == Type::TOP) return Type::TOP; if (t->base() == Type::RawPtr && t->singleton()) { uintptr_t bits = (uintptr_t) t->is_rawptr()->get_con(); return TypeX::make(bits);
*** 348,356 **** Node *CastP2XNode::Ideal(PhaseGVN *phase, bool can_reshape) { return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; } //------------------------------Identity--------------------------------------- ! Node *CastP2XNode::Identity( PhaseTransform *phase ) { if (in(1)->Opcode() == Op_CastX2P) return in(1)->in(1); return this; } --- 348,356 ---- Node *CastP2XNode::Ideal(PhaseGVN *phase, bool can_reshape) { return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL; } //------------------------------Identity--------------------------------------- ! Node* CastP2XNode::Identity(PhaseGVN* phase) { if (in(1)->Opcode() == Op_CastX2P) return in(1)->in(1); return this; }
< prev index next >