< prev index next >
src/share/vm/opto/subnode.hpp
Print this page
*** 43,57 ****
init_class_id(Class_Sub);
}
// Handle algebraic identities here. If we have an identity, return the Node
// we are equivalent to. We look for "add of zero" as an identity.
! virtual Node *Identity( PhaseTransform *phase );
// Compute a new Type for this node. Basically we just do the pre-check,
// then call the virtual add() to set the type.
! virtual const Type *Value( PhaseTransform *phase ) const;
const Type* Value_common( PhaseTransform *phase ) const;
// Supplied function returns the subtractend of the inputs.
// This also type-checks the inputs for sanity. Guaranteed never to
// be passed a TOP or BOTTOM type, these are filtered out by a pre-check.
--- 43,57 ----
init_class_id(Class_Sub);
}
// Handle algebraic identities here. If we have an identity, return the Node
// we are equivalent to. We look for "add of zero" as an identity.
! virtual Node* Identity(PhaseGVN* phase);
// Compute a new Type for this node. Basically we just do the pre-check,
// then call the virtual add() to set the type.
! virtual const Type* Value(PhaseGVN* phase) const;
const Type* Value_common( PhaseTransform *phase ) const;
// Supplied function returns the subtractend of the inputs.
// This also type-checks the inputs for sanity. Guaranteed never to
// be passed a TOP or BOTTOM type, these are filtered out by a pre-check.
*** 95,105 ****
// Subtract 2 floats or doubles
class SubFPNode : public SubNode {
protected:
SubFPNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {}
public:
! const Type *Value( PhaseTransform *phase ) const;
};
// NOTE: SubFNode should be taken away and replaced by add and negate
//------------------------------SubFNode---------------------------------------
// Subtract 2 doubles
--- 95,105 ----
// Subtract 2 floats or doubles
class SubFPNode : public SubNode {
protected:
SubFPNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {}
public:
! const Type* Value(PhaseGVN* phase) const;
};
// NOTE: SubFNode should be taken away and replaced by add and negate
//------------------------------SubFNode---------------------------------------
// Subtract 2 doubles
*** 133,143 ****
class CmpNode : public SubNode {
public:
CmpNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {
init_class_id(Class_Cmp);
}
! virtual Node *Identity( PhaseTransform *phase );
const Type *add_id() const { return TypeInt::ZERO; }
const Type *bottom_type() const { return TypeInt::CC; }
virtual uint ideal_reg() const { return Op_RegFlags; }
#ifndef PRODUCT
--- 133,143 ----
class CmpNode : public SubNode {
public:
CmpNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {
init_class_id(Class_Cmp);
}
! virtual Node* Identity(PhaseGVN* phase);
const Type *add_id() const { return TypeInt::ZERO; }
const Type *bottom_type() const { return TypeInt::CC; }
virtual uint ideal_reg() const { return Op_RegFlags; }
#ifndef PRODUCT
*** 163,173 ****
class CmpUNode : public CmpNode {
public:
CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const;
! const Type *Value( PhaseTransform *phase ) const;
bool is_index_range_check() const;
};
//------------------------------CmpPNode---------------------------------------
// Compare 2 pointer values, returning condition codes (-1, 0 or 1).
--- 163,173 ----
class CmpUNode : public CmpNode {
public:
CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const;
! const Type* Value(PhaseGVN* phase) const;
bool is_index_range_check() const;
};
//------------------------------CmpPNode---------------------------------------
// Compare 2 pointer values, returning condition codes (-1, 0 or 1).
*** 217,227 ****
class CmpFNode : public CmpNode {
public:
CmpFNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
! const Type *Value( PhaseTransform *phase ) const;
};
//------------------------------CmpF3Node--------------------------------------
// Compare 2 float values, returning integer value (-1, 0 or 1).
// This implements the Java bytecode fcmpl, so unordered returns -1.
--- 217,227 ----
class CmpFNode : public CmpNode {
public:
CmpFNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
! const Type* Value(PhaseGVN* phase) const;
};
//------------------------------CmpF3Node--------------------------------------
// Compare 2 float values, returning integer value (-1, 0 or 1).
// This implements the Java bytecode fcmpl, so unordered returns -1.
*** 245,255 ****
class CmpDNode : public CmpNode {
public:
CmpDNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
! const Type *Value( PhaseTransform *phase ) const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------CmpD3Node--------------------------------------
// Compare 2 double values, returning integer value (-1, 0 or 1).
--- 245,255 ----
class CmpDNode : public CmpNode {
public:
CmpDNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
! const Type* Value(PhaseGVN* phase) const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
};
//------------------------------CmpD3Node--------------------------------------
// Compare 2 double values, returning integer value (-1, 0 or 1).
*** 307,317 ****
Node* as_int_value(PhaseGVN* phase);
// Invert sense of self, returning new Bool.
BoolNode* negate(PhaseGVN* phase);
virtual int Opcode() const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
! virtual const Type *Value( PhaseTransform *phase ) const;
virtual const Type *bottom_type() const { return TypeInt::BOOL; }
uint match_edge(uint idx) const { return 0; }
virtual uint ideal_reg() const { return Op_RegI; }
bool is_counted_loop_exit_test();
--- 307,317 ----
Node* as_int_value(PhaseGVN* phase);
// Invert sense of self, returning new Bool.
BoolNode* negate(PhaseGVN* phase);
virtual int Opcode() const;
virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
! virtual const Type* Value(PhaseGVN* phase) const;
virtual const Type *bottom_type() const { return TypeInt::BOOL; }
uint match_edge(uint idx) const { return 0; }
virtual uint ideal_reg() const { return Op_RegI; }
bool is_counted_loop_exit_test();
*** 417,427 ****
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type *Value( PhaseTransform *phase ) const;
};
//------------------------------CosDNode---------------------------------------
// Sinus of a double
class SinDNode : public Node {
--- 417,427 ----
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type* Value(PhaseGVN* phase) const;
};
//------------------------------CosDNode---------------------------------------
// Sinus of a double
class SinDNode : public Node {
*** 431,441 ****
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type *Value( PhaseTransform *phase ) const;
};
//------------------------------TanDNode---------------------------------------
// tangens of a double
--- 431,441 ----
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type* Value(PhaseGVN* phase) const;
};
//------------------------------TanDNode---------------------------------------
// tangens of a double
*** 446,456 ****
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type *Value( PhaseTransform *phase ) const;
};
//------------------------------AtanDNode--------------------------------------
// arcus tangens of a double
--- 446,456 ----
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type* Value(PhaseGVN* phase) const;
};
//------------------------------AtanDNode--------------------------------------
// arcus tangens of a double
*** 472,482 ****
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type *Value( PhaseTransform *phase ) const;
};
//------------------------------Log10DNode---------------------------------------
// Log_10 of a double
class Log10DNode : public Node {
--- 472,482 ----
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type* Value(PhaseGVN* phase) const;
};
//------------------------------Log10DNode---------------------------------------
// Log_10 of a double
class Log10DNode : public Node {
*** 486,496 ****
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type *Value( PhaseTransform *phase ) const;
};
//-------------------------------ReverseBytesINode--------------------------------
// reverse bytes of an integer
class ReverseBytesINode : public Node {
--- 486,496 ----
C->add_expensive_node(this);
}
virtual int Opcode() const;
const Type *bottom_type() const { return Type::DOUBLE; }
virtual uint ideal_reg() const { return Op_RegD; }
! virtual const Type* Value(PhaseGVN* phase) const;
};
//-------------------------------ReverseBytesINode--------------------------------
// reverse bytes of an integer
class ReverseBytesINode : public Node {
< prev index next >