1.1 --- a/src/share/vm/opto/subnode.hpp Fri Feb 15 13:36:56 2013 -0800 1.2 +++ b/src/share/vm/opto/subnode.hpp Mon Feb 18 09:06:24 2013 +0100 1.3 @@ -399,7 +399,10 @@ 1.4 // Cosinus of a double 1.5 class CosDNode : public Node { 1.6 public: 1.7 - CosDNode( Node *in1 ) : Node(0, in1) {} 1.8 + CosDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 1.9 + init_flags(Flag_is_expensive); 1.10 + C->add_expensive_node(this); 1.11 + } 1.12 virtual int Opcode() const; 1.13 const Type *bottom_type() const { return Type::DOUBLE; } 1.14 virtual uint ideal_reg() const { return Op_RegD; } 1.15 @@ -410,7 +413,10 @@ 1.16 // Sinus of a double 1.17 class SinDNode : public Node { 1.18 public: 1.19 - SinDNode( Node *in1 ) : Node(0, in1) {} 1.20 + SinDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 1.21 + init_flags(Flag_is_expensive); 1.22 + C->add_expensive_node(this); 1.23 + } 1.24 virtual int Opcode() const; 1.25 const Type *bottom_type() const { return Type::DOUBLE; } 1.26 virtual uint ideal_reg() const { return Op_RegD; } 1.27 @@ -422,7 +428,10 @@ 1.28 // tangens of a double 1.29 class TanDNode : public Node { 1.30 public: 1.31 - TanDNode(Node *in1 ) : Node(0, in1) {} 1.32 + TanDNode(Compile* C, Node *c,Node *in1) : Node(c, in1) { 1.33 + init_flags(Flag_is_expensive); 1.34 + C->add_expensive_node(this); 1.35 + } 1.36 virtual int Opcode() const; 1.37 const Type *bottom_type() const { return Type::DOUBLE; } 1.38 virtual uint ideal_reg() const { return Op_RegD; } 1.39 @@ -445,7 +454,10 @@ 1.40 // square root a double 1.41 class SqrtDNode : public Node { 1.42 public: 1.43 - SqrtDNode(Node *c, Node *in1 ) : Node(c, in1) {} 1.44 + SqrtDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 1.45 + init_flags(Flag_is_expensive); 1.46 + C->add_expensive_node(this); 1.47 + } 1.48 virtual int Opcode() const; 1.49 const Type *bottom_type() const { return Type::DOUBLE; } 1.50 virtual uint ideal_reg() const { return Op_RegD; } 1.51 @@ -470,7 +482,10 @@ 1.52 // Log_e of a double 1.53 class LogDNode : public Node { 1.54 public: 1.55 - LogDNode( Node *in1 ) : Node(0, in1) {} 1.56 + LogDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 1.57 + init_flags(Flag_is_expensive); 1.58 + C->add_expensive_node(this); 1.59 + } 1.60 virtual int Opcode() const; 1.61 const Type *bottom_type() const { return Type::DOUBLE; } 1.62 virtual uint ideal_reg() const { return Op_RegD; } 1.63 @@ -481,7 +496,10 @@ 1.64 // Log_10 of a double 1.65 class Log10DNode : public Node { 1.66 public: 1.67 - Log10DNode( Node *in1 ) : Node(0, in1) {} 1.68 + Log10DNode(Compile* C, Node *c, Node *in1) : Node(c, in1) { 1.69 + init_flags(Flag_is_expensive); 1.70 + C->add_expensive_node(this); 1.71 + } 1.72 virtual int Opcode() const; 1.73 const Type *bottom_type() const { return Type::DOUBLE; } 1.74 virtual uint ideal_reg() const { return Op_RegD; }