203 return new (phase->C, 3) SubINode( in1->in(2), in2->in(2) ); |
203 return new (phase->C, 3) SubINode( in1->in(2), in2->in(2) ); |
204 |
204 |
205 // Convert "(A+X) - (B+X)" into "A - B" |
205 // Convert "(A+X) - (B+X)" into "A - B" |
206 if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(2) ) |
206 if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(2) ) |
207 return new (phase->C, 3) SubINode( in1->in(1), in2->in(1) ); |
207 return new (phase->C, 3) SubINode( in1->in(1), in2->in(1) ); |
|
208 |
|
209 // Convert "(A+X) - (X+B)" into "A - B" |
|
210 if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(1) ) |
|
211 return new (phase->C, 3) SubINode( in1->in(1), in2->in(2) ); |
|
212 |
|
213 // Convert "(X+A) - (B+X)" into "A - B" |
|
214 if( op1 == Op_AddI && op2 == Op_AddI && in1->in(1) == in2->in(2) ) |
|
215 return new (phase->C, 3) SubINode( in1->in(2), in2->in(1) ); |
208 |
216 |
209 // Convert "A-(B-C)" into (A+C)-B", since add is commutative and generally |
217 // Convert "A-(B-C)" into (A+C)-B", since add is commutative and generally |
210 // nicer to optimize than subtract. |
218 // nicer to optimize than subtract. |
211 if( op2 == Op_SubI && in2->outcnt() == 1) { |
219 if( op2 == Op_SubI && in2->outcnt() == 1) { |
212 Node *add1 = phase->transform( new (phase->C, 3) AddINode( in1, in2->in(2) ) ); |
220 Node *add1 = phase->transform( new (phase->C, 3) AddINode( in1, in2->in(2) ) ); |