aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2004-06-16 16:41:57 +0000
committerJ"orn Rennecke <joern.rennecke@superh.com>2004-06-16 16:41:57 +0000
commit665a08db3faadc8a837aefde33d66d345e5bca77 (patch)
tree6f1a0a6cecdf65502dc6fe173d4cf09e2a65cb2e
parent49933b9924ab885d7d1623ed35cb9519d97fbeb9 (diff)
* simplify-rtx.c (simplify_plus_minus_op_data): Change type of neg
to short. New member ix. (simplify_plus_minus_op_data_cmp): Break ties using ix member. (simplify_plus_minus): Initialize ix members before calling qsort. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/sh-elf-3_5-branch@83246 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.sh-elf7
-rw-r--r--gcc/simplify-rtx.c18
2 files changed, 21 insertions, 4 deletions
diff --git a/gcc/ChangeLog.sh-elf b/gcc/ChangeLog.sh-elf
index 08f13bfe49a..f31fb1dba9c 100644
--- a/gcc/ChangeLog.sh-elf
+++ b/gcc/ChangeLog.sh-elf
@@ -1,3 +1,10 @@
+2004-06-16 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * simplify-rtx.c (simplify_plus_minus_op_data): Change type of neg
+ to short. New member ix.
+ (simplify_plus_minus_op_data_cmp): Break ties using ix member.
+ (simplify_plus_minus): Initialize ix members before calling qsort.
+
2004-06-15 J"orn Rennecke <joern.rennecke@superh.com>
* combine.c (distribute_notes): Comment typo fix.
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index fb80219155c..807092a22fc 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -2373,7 +2373,8 @@ simplify_binary_operation (enum rtx_code code, enum machine_mode mode,
struct simplify_plus_minus_op_data
{
rtx op;
- int neg;
+ short neg;
+ short ix;
};
static int
@@ -2381,9 +2382,13 @@ simplify_plus_minus_op_data_cmp (const void *p1, const void *p2)
{
const struct simplify_plus_minus_op_data *d1 = p1;
const struct simplify_plus_minus_op_data *d2 = p2;
+ int result;
- return (commutative_operand_precedence (d2->op)
- - commutative_operand_precedence (d1->op));
+ result = (commutative_operand_precedence (d2->op)
+ - commutative_operand_precedence (d1->op));
+ if (result)
+ return result;
+ return d1->ix - d2->ix;
}
static rtx
@@ -2558,7 +2563,12 @@ simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0,
/* Pack all the operands to the lower-numbered entries. */
for (i = 0, j = 0; j < n_ops; j++)
if (ops[j].op)
- ops[i++] = ops[j];
+ {
+ ops[i] = ops[j];
+ /* Stabilize sort. */
+ ops[i].ix = i;
+ i++;
+ }
n_ops = i;
/* Sort the operations based on swap_commutative_operands_p. */