tree-ssa-operands.c (swap_tree_operands): Always adjust existing operand positions.
authorRichard Guenther <rguenther@suse.de>
Fri, 9 Sep 2011 10:31:10 +0000 (10:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 9 Sep 2011 10:31:10 +0000 (10:31 +0000)
2011-09-09  Richard Guenther  <rguenther@suse.de>

* tree-ssa-operands.c (swap_tree_operands): Always adjust
existing operand positions.

From-SVN: r178723

gcc/ChangeLog
gcc/tree-ssa-operands.c

index d04c2e94ea3e12304879a15c898796ffd1762e3d..aadfd7d963ccbb034e801bad89026ff1fd08686e 100644 (file)
@@ -1,3 +1,8 @@
+2011-09-09  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-operands.c (swap_tree_operands): Always adjust
+       existing operand positions.
+
 2011-09-09  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/50333
index 995341f0e6986ecfd1b2f001c5c0ddd3ec987957..f27d5f0e6c099cab275dbc4a479c767bd5491f21 100644 (file)
@@ -1149,7 +1149,8 @@ swap_tree_operands (gimple stmt, tree *exp0, tree *exp1)
 
   /* If the operand cache is active, attempt to preserve the relative
      positions of these two operands in their respective immediate use
-     lists.  */
+     lists by adjusting their use pointer to point to the new
+     operand position.  */
   if (ssa_operands_active () && op0 != op1)
     {
       use_optype_p use0, use1, ptr;
@@ -1170,14 +1171,12 @@ swap_tree_operands (gimple stmt, tree *exp0, tree *exp1)
            break;
          }
 
-      /* If both uses don't have operand entries, there isn't much we can do
-         at this point.  Presumably we don't need to worry about it.  */
-      if (use0 && use1)
-        {
-         tree *tmp = USE_OP_PTR (use1)->use;
-         USE_OP_PTR (use1)->use = USE_OP_PTR (use0)->use;
-         USE_OP_PTR (use0)->use = tmp;
-       }
+      /* And adjust their location to point to the new position of the
+         operand.  */
+      if (use0)
+       USE_OP_PTR (use0)->use = exp1;
+      if (use1)
+       USE_OP_PTR (use1)->use = exp0;
     }
 
   /* Now swap the data.  */