OSDN Git Service

2011-09-09 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Sep 2011 10:31:10 +0000 (10:31 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Sep 2011 10:31:10 +0000 (10:31 +0000)
* tree-ssa-operands.c (swap_tree_operands): Always adjust
existing operand positions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178723 138bc75d-0d04-0410-961f-82ee72b054a4

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

index d04c2e9..aadfd7d 100644 (file)
@@ -1,5 +1,10 @@
 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
        * tree-data-ref.c (split_constant_offset): Do not try to handle
        ternary ops.
index 995341f..f27d5f0 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.  */