aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-09-09 10:31:10 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-09-09 10:31:10 +0000
commit64d9cb054e8153852901aee359b62bca5e4c2a67 (patch)
treedbbcb5ce68eb29cfa86f1f716a9c053f24079923 /gcc
parentffd78b302f00ff445a645d33c895399ddb029420 (diff)
downloadgcc-64d9cb054e8153852901aee359b62bca5e4c2a67.zip
gcc-64d9cb054e8153852901aee359b62bca5e4c2a67.tar.gz
gcc-64d9cb054e8153852901aee359b62bca5e4c2a67.tar.bz2
tree-ssa-operands.c (swap_tree_operands): Always adjust existing operand positions.
2011-09-09 Richard Guenther <rguenther@suse.de> * tree-ssa-operands.c (swap_tree_operands): Always adjust existing operand positions. From-SVN: r178723
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-operands.c17
2 files changed, 13 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d04c2e9..aadfd7d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 995341f..f27d5f0 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -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. */