43 Node *Opaque1Node::Identity( PhaseTransform *phase ) {
44 return phase->C->major_progress() ? this : in(1);
45 }
46
47 //=============================================================================
48 // A node to prevent unwanted optimizations. Allows constant folding. Stops
49 // value-numbering, most Ideal calls or Identity functions. This Node is
50 // specifically designed to prevent the pre-increment value of a loop trip
51 // counter from being live out of the bottom of the loop (hence causing the
52 // pre- and post-increment values both being live and thus requiring an extra
53 // temp register and an extra move). If we "accidentally" optimize through
54 // this kind of a Node, we'll get slightly pessimal, but correct, code. Thus
55 // it's OK to be slightly sloppy on optimizations here.
56
57 // Do not allow value-numbering
58 uint Opaque2Node::hash() const { return NO_HASH; }
59 uint Opaque2Node::cmp( const Node &n ) const {
60 return (&n == this); // Always fail except on self
61 }
62
63
|
43 Node *Opaque1Node::Identity( PhaseTransform *phase ) {
44 return phase->C->major_progress() ? this : in(1);
45 }
46
47 //=============================================================================
48 // A node to prevent unwanted optimizations. Allows constant folding. Stops
49 // value-numbering, most Ideal calls or Identity functions. This Node is
50 // specifically designed to prevent the pre-increment value of a loop trip
51 // counter from being live out of the bottom of the loop (hence causing the
52 // pre- and post-increment values both being live and thus requiring an extra
53 // temp register and an extra move). If we "accidentally" optimize through
54 // this kind of a Node, we'll get slightly pessimal, but correct, code. Thus
55 // it's OK to be slightly sloppy on optimizations here.
56
57 // Do not allow value-numbering
58 uint Opaque2Node::hash() const { return NO_HASH; }
59 uint Opaque2Node::cmp( const Node &n ) const {
60 return (&n == this); // Always fail except on self
61 }
62
63 //=============================================================================
64
65 uint Opaque4Node::hash() const { return NO_HASH; }
66 uint Opaque4Node::cmp( const Node &n ) const {
67 return (&n == this);
68 }
69
70 Node *Opaque4Node::Ideal(PhaseGVN *phase, bool can_reshape) {
71 if (can_reshape & _delay_removal) {
72 _delay_removal = false;
73 return this;
74 } else {
75 return NULL;
76 }
77 }
78
79 Node *Opaque4Node::Identity( PhaseTransform *phase ) {
80 if (_delay_removal) {
81 return this;
82 } else {
83 return in(1);
84 }
85 }
|