isl_int one;
isl_int negone;
+ isl_int normalize_gcd;
+
int n_cached;
struct isl_blk cache[ISL_BLK_CACHE_SIZE];
struct isl_hash_table name_hash;
#include <sys/types.h>
#include <isl_int.h>
+#include <isl_ctx.h>
/* Some common operations on sequences of isl_int's */
isl_int *m);
void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd);
void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm);
-void isl_seq_normalize(isl_int *p, unsigned len);
+void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len);
void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len,
isl_int *prod);
int isl_seq_first_non_zero(isl_int *p, unsigned len);
bset1->ctx->one, dir->block.data,
sample->block.data[n++], bset1->ineq[i], 1 + d);
isl_vec_free(sample);
+ isl_seq_normalize(bset1->ctx, dir->block.data + 1, dir->size - 1);
isl_basic_set_free(bset1);
isl_basic_set_free(bset2);
- isl_seq_normalize(dir->block.data + 1, dir->size - 1);
return dir;
error:
isl_vec_free(sample);
isl_int_init(ctx->negone);
isl_int_set_si(ctx->negone, -1);
+ isl_int_init(ctx->normalize_gcd);
+
ctx->n_cached = 0;
#ifdef ISL_POLYLIB
isl_blk_clear_cache(ctx);
isl_int_clear(ctx->one);
isl_int_clear(ctx->negone);
+ isl_int_clear(ctx->normalize_gcd);
free(ctx->stats);
free(ctx);
}
}
}
-void isl_seq_normalize(isl_int *p, unsigned len)
+void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len)
{
- isl_int gcd;
-
if (len == 0)
return;
- isl_int_init(gcd);
- isl_seq_gcd(p, len, &gcd);
- if (!isl_int_is_zero(gcd) && !isl_int_is_one(gcd))
- isl_seq_scale_down(p, p, gcd, len);
- isl_int_clear(gcd);
+ isl_seq_gcd(p, len, &ctx->normalize_gcd);
+ if (!isl_int_is_zero(ctx->normalize_gcd) &&
+ !isl_int_is_one(ctx->normalize_gcd))
+ isl_seq_scale_down(p, p, ctx->normalize_gcd, len);
}
void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm)
#include "isl_mat.h"
#include "isl_map_private.h"
#include "isl_tab.h"
+#include "isl_seq.h"
/*
* The implementation of tableaus in this file was inspired by Section 8
isl_int_neg(mat->row[row][1 + j], mat->row[row][1 + j]);
}
if (!isl_int_is_one(mat->row[row][0]))
- isl_seq_normalize(mat->row[row], off + tab->n_col);
+ isl_seq_normalize(mat->ctx, mat->row[row], off + tab->n_col);
for (i = 0; i < tab->n_row; ++i) {
if (i == row)
continue;
isl_int_mul(mat->row[i][off + col],
mat->row[i][off + col], mat->row[row][off + col]);
if (!isl_int_is_one(mat->row[i][0]))
- isl_seq_normalize(mat->row[i], off + tab->n_col);
+ isl_seq_normalize(mat->ctx, mat->row[i], off + tab->n_col);
}
t = tab->row_var[row];
tab->row_var[row] = tab->col_var[col];
if (tab->M && i >= tab->n_param && i < tab->n_var - tab->n_div)
isl_int_submul(row[2], line[1 + i], row[0]);
}
- isl_seq_normalize(row, off + tab->n_col);
+ isl_seq_normalize(tab->mat->ctx, row, off + tab->n_col);
isl_int_clear(a);
isl_int_clear(b);
{
if (!vec)
return NULL;
- isl_seq_normalize(vec->el, vec->size);
+ isl_seq_normalize(vec->ctx, vec->el, vec->size);
return vec;
}