projects
/
platform
/
upstream
/
isl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
isl_stream_read_pw_qpolynomial: read nested divs
[platform/upstream/isl.git]
/
isl_input.c
diff --git
a/isl_input.c
b/isl_input.c
index
6da79e6
..
84cde79
100644
(file)
--- a/
isl_input.c
+++ b/
isl_input.c
@@
-376,8
+376,9
@@
static __isl_give isl_basic_map *add_divs(__isl_take isl_basic_map *bmap,
for (i = 0, var = v->v; i < extra; ++i, var = var->next) {
int k = bmap->n_div - 1 - i;
for (i = 0, var = v->v; i < extra; ++i, var = var->next) {
int k = bmap->n_div - 1 - i;
- isl_seq_cpy(bmap->div[k], var->def->el, 2 + var->pos);
- isl_seq_clr(bmap->div[k] + 2 + var->pos, v->n - var->pos);
+ isl_seq_cpy(bmap->div[k], var->def->el, var->def->size);
+ isl_seq_clr(bmap->div[k] + var->def->size,
+ 2 + v->n - var->def->size);
if (isl_basic_map_add_div_constraints(bmap, k) < 0)
goto error;
if (isl_basic_map_add_div_constraints(bmap, k) < 0)
goto error;
@@
-1290,26
+1291,25
@@
static int optional_power(struct isl_stream *s)
}
static __isl_give isl_div *read_div(struct isl_stream *s,
}
static __isl_give isl_div *read_div(struct isl_stream *s,
- __isl_
keep isl_basic_map *bmap
, struct vars *v)
+ __isl_
take isl_dim *dim
, struct vars *v)
{
{
- unsigned total = isl_basic_map_total_dim(bmap);
- int k;
-
- bmap = isl_basic_map_copy(bmap);
- bmap = isl_basic_map_cow(bmap);
- bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim),
- 1, 0, 2);
+ int n;
+ isl_basic_map *bmap;
- if ((k = isl_basic_map_alloc_div(bmap)) < 0)
- goto error;
- isl_seq_clr(bmap->div[k], 1 + 1 + total);
+ n = v->n;
+ bmap = isl_basic_map_universe(dim);
if (vars_add_anon(v) < 0)
goto error;
if (vars_add_anon(v) < 0)
goto error;
- bmap = add_div_definition(s, v, bmap, k);
- vars_drop(v, 1);
+ if (read_div_definition(s, v) < 0)
+ goto error;
+ bmap = add_divs(bmap, v);
+ bmap = isl_basic_map_order_divs(bmap);
+ if (!bmap)
+ goto error;
+ vars_drop(v, v->n - n);
- return isl_basic_map_div(bmap,
k
);
+ return isl_basic_map_div(bmap,
bmap->n_div - 1
);
error:
isl_basic_map_free(bmap);
return NULL;
error:
isl_basic_map_free(bmap);
return NULL;
@@
-1384,7
+1384,7
@@
static __isl_give isl_qpolynomial *read_factor(struct isl_stream *s,
int pow;
isl_stream_push_token(s, tok);
int pow;
isl_stream_push_token(s, tok);
- div = read_div(s,
bmap
, v);
+ div = read_div(s,
isl_basic_map_get_dim(bmap)
, v);
pow = optional_power(s);
qp = isl_qpolynomial_div_pow(div, pow);
} else if (tok->type == '-') {
pow = optional_power(s);
qp = isl_qpolynomial_div_pow(div, pow);
} else if (tok->type == '-') {