* 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: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103771
138bc75d-0d04-0410-961f-
82ee72b054a4
+2005-09-02 J"orn Rennecke <joern.rennecke@st.com>
+
+ PR rtl-optimization/20365
+ * 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.
+
2005-09-02 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/23626
struct simplify_plus_minus_op_data
{
rtx op;
- int neg;
+ short neg;
+ short ix;
};
static int
{
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
/* 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. */