6680594: Load + Load isn't canonicalized leading to missed GVN opportunities
authornever
Fri, 28 Mar 2008 09:00:39 -0700
changeset 346 e13ccc474a28
parent 345 8a4c345e460c
child 347 df859fcca515
6680594: Load + Load isn't canonicalized leading to missed GVN opportunities Reviewed-by: kvn, jrose
hotspot/src/share/vm/opto/addnode.cpp
--- a/hotspot/src/share/vm/opto/addnode.cpp	Wed Mar 26 12:25:06 2008 -0700
+++ b/hotspot/src/share/vm/opto/addnode.cpp	Fri Mar 28 09:00:39 2008 -0700
@@ -70,9 +70,14 @@
 
   // Convert "Load+x" into "x+Load".
   // Now check for loads
-  if( in2->is_Load() ) return false;
-  // Left is a Load and Right is not; move it right.
-  if( in1->is_Load() ) {
+  if (in2->is_Load()) {
+    if (!in1->is_Load()) {
+      // already x+Load to return
+      return false;
+    }
+    // both are loads, so fall through to sort inputs by idx
+  } else if( in1->is_Load() ) {
+    // Left is a Load and Right is not; move it right.
     add->swap_edges(1, 2);
     return true;
   }