src/share/vm/opto/subnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/subnode.cpp Wed Oct 1 10:07:24 2008
--- new/src/share/vm/opto/subnode.cpp Wed Oct 1 10:07:23 2008
*** 204,213 ****
--- 204,221 ----
// Convert "(A+X) - (B+X)" into "A - B"
if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(2) )
return new (phase->C, 3) SubINode( in1->in(1), in2->in(1) );
+ // Convert "(A+X) - (X+B)" into "A - B"
+ if( op1 == Op_AddI && op2 == Op_AddI && in1->in(2) == in2->in(1) )
+ return new (phase->C, 3) SubINode( in1->in(1), in2->in(2) );
+
+ // Convert "(X+A) - (B+X)" into "A - B"
+ if( op1 == Op_AddI && op2 == Op_AddI && in1->in(1) == in2->in(2) )
+ return new (phase->C, 3) SubINode( in1->in(2), in2->in(1) );
+
// Convert "A-(B-C)" into (A+C)-B", since add is commutative and generally
// nicer to optimize than subtract.
if( op2 == Op_SubI && in2->outcnt() == 1) {
Node *add1 = phase->transform( new (phase->C, 3) AddINode( in1, in2->in(2) ) );
return new (phase->C, 3) SubINode( add1, in2->in(1) );
src/share/vm/opto/subnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File