{
int i;
struct isl_div_sort_info *array = NULL;
- int *pos = NULL;
+ int *pos = NULL, *at = NULL;
int *reordering = NULL;
unsigned div_pos;
array = isl_alloc_array(qp->div->ctx, struct isl_div_sort_info,
qp->div->n_row);
pos = isl_alloc_array(qp->div->ctx, int, qp->div->n_row);
+ at = isl_alloc_array(qp->div->ctx, int, qp->div->n_row);
reordering = isl_alloc_array(qp->div->ctx, int, qp->div->n_col - 2);
- if (!array || !pos || !reordering)
+ if (!array || !pos || !at || !reordering)
goto error;
for (i = 0; i < qp->div->n_row; ++i) {
array[i].div = qp->div;
array[i].row = i;
pos[i] = i;
+ at[i] = i;
}
qsort(array, qp->div->n_row, sizeof(struct isl_div_sort_info),
reordering[div_pos + array[i].row] = div_pos + i;
for (i = 0; i < qp->div->n_row; ++i) {
- int t;
if (pos[array[i].row] == i)
continue;
- qp->div = isl_mat_cow(qp->div);
qp->div = isl_mat_swap_rows(qp->div, i, pos[array[i].row]);
- t = pos[array[i].row];
- pos[array[i].row] = pos[i];
- pos[i] = t;
+ pos[at[i]] = pos[array[i].row];
+ at[pos[array[i].row]] = at[i];
+ at[i] = array[i].row;
+ pos[array[i].row] = i;
}
qp->upoly = reorder(qp->upoly, reordering);
if (!qp->upoly || !qp->div)
goto error;
+ free(at);
free(pos);
free(array);
free(reordering);
return qp;
error:
+ free(at);
free(pos);
free(array);
free(reordering);