1.1 --- a/src/share/vm/opto/subnode.cpp Tue Sep 30 15:53:55 2008 -0700 1.2 +++ b/src/share/vm/opto/subnode.cpp Thu Oct 02 08:37:44 2008 -0700 1.3 @@ -206,6 +206,14 @@ 1.4 if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(2) ) 1.5 return new (phase->C, 3) SubINode( in1->in(1), in2->in(1) ); 1.6 1.7 + // Convert "(A+X) - (X+B)" into "A - B" 1.8 + if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(1) ) 1.9 + return new (phase->C, 3) SubINode( in1->in(1), in2->in(2) ); 1.10 + 1.11 + // Convert "(X+A) - (B+X)" into "A - B" 1.12 + if( op1 == Op_AddI && op2 == Op_AddI && in1->in(1) == in2->in(2) ) 1.13 + return new (phase->C, 3) SubINode( in1->in(2), in2->in(1) ); 1.14 + 1.15 // Convert "A-(B-C)" into (A+C)-B", since add is commutative and generally 1.16 // nicer to optimize than subtract. 1.17 if( op2 == Op_SubI && in2->outcnt() == 1) {