2
Index: b/source/isl/domain.c
3
===================================================================
4
--- a/source/isl/domain.c
5
+++ b/source/isl/domain.c
8
#include <isl/constraint.h>
14
+#include <isl/val_gmp.h>
17
#include <osl/macros.h>
18
@@ -510,15 +514,18 @@ static struct isl_constraint *isl_constr
20
constraint = isl_inequality_alloc(ls);
22
- for (j = 0; j < nvariables; ++j)
23
- isl_constraint_set_coefficient(constraint, isl_dim_out, j,
26
- for (j = 0; j < nparam; ++j)
27
- isl_constraint_set_coefficient(constraint, isl_dim_param, j,
28
- row[1 + nvariables + j]);
29
+ for (j = 0; j < nvariables; ++j) {
30
+ isl_val *val = cloog_int_to_isl_val(isl_constraint_get_ctx(constraint), row[1 + j]);
31
+ isl_constraint_set_coefficient_val(constraint, isl_dim_out, j, val);
34
+ for (j = 0; j < nparam; ++j) {
35
+ isl_val *val = cloog_int_to_isl_val(isl_constraint_get_ctx(constraint), row[1 + nvariables + j]);
36
+ isl_constraint_set_coefficient_val(constraint, isl_dim_param, j, val);
39
- isl_constraint_set_constant(constraint, row[1 + nvariables + nparam]);
40
+ isl_val *val = cloog_int_to_isl_val(isl_constraint_get_ctx(constraint), row[1 + nvariables + nparam]);
41
+ isl_constraint_set_constant_val(constraint, val);
45
@@ -631,7 +638,6 @@ CloogDomain *cloog_domain_from_osl_relat
51
* Converts an openscop scattering relation to a CLooG scattering.
52
* \param[in,out] state CLooG state.
53
@@ -779,10 +785,22 @@ int cloog_domain_is_otl(CloogDomain *dom
54
void cloog_domain_stride(CloogDomain *domain, int strided_level,
55
cloog_int_t *stride, cloog_int_t *offset)
58
isl_set *set = isl_set_from_cloog_domain(domain);
59
- isl_set_dim_residue_class(set, strided_level - 1, stride, offset);
60
- if (!isl_int_is_zero(*offset))
61
- isl_int_sub(*offset, *stride, *offset);
62
+ isl_val *stride_val = NULL;
63
+ isl_val *offset_val = NULL;
64
+ ret = isl_set_dim_residue_class_val(set, strided_level - 1, &stride_val, &offset_val);
66
+ cloog_die("failure to compute stride.\n");
67
+ isl_val_to_cloog_int(stride_val, stride);
68
+ isl_val_to_cloog_int(offset_val, offset);
70
+ if (!cloog_int_is_zero(*offset))
71
+ cloog_int_sub(*offset, *stride, *offset);
73
+ isl_val_free(stride_val);
74
+ isl_val_free(offset_val);
79
@@ -796,7 +814,7 @@ static int constraint_can_stride(__isl_t
81
struct cloog_can_stride *ccs = (struct cloog_can_stride *)user;
87
if (isl_constraint_is_equality(c)) {
88
@@ -804,21 +822,22 @@ static int constraint_can_stride(__isl_t
93
- isl_constraint_get_coefficient(c, isl_dim_set, ccs->level - 1, &v);
94
- if (isl_int_is_pos(v)) {
95
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, ccs->level - 1);
96
+ if (isl_val_is_pos(v)) {
97
n_div = isl_constraint_dim(c, isl_dim_div);
99
for (i = 0; i < n_div; ++i) {
100
- isl_constraint_get_coefficient(c, isl_dim_div, i, &v);
101
- if (!isl_int_is_zero(v))
103
+ v = isl_constraint_get_coefficient_val(c, isl_dim_div, i);
104
+ if (!isl_val_is_zero(v))
111
- isl_constraint_free(c);
114
+ isl_constraint_free(c);
118
@@ -903,7 +922,7 @@ struct cloog_stride_lower {
119
static int constraint_stride_lower(__isl_take isl_constraint *c, void *user)
121
struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user;
124
isl_constraint *bound;
127
@@ -912,31 +931,31 @@ static int constraint_stride_lower(__isl
132
- isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v);
133
- if (!isl_int_is_pos(v)) {
135
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, csl->level - 1);
136
+ if (!isl_val_is_pos(v)) {
138
isl_constraint_free(c);
144
b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1);
147
- b = isl_aff_add_constant(b, csl->stride->offset);
148
- b = isl_aff_scale_down(b, csl->stride->stride);
149
+ b = isl_aff_add_constant_val(b, cloog_int_to_isl_val(isl_constraint_get_ctx(c), csl->stride->offset));
150
+ b = isl_aff_scale_down_val(b, cloog_int_to_isl_val(isl_constraint_get_ctx(c), csl->stride->stride));
151
b = isl_aff_floor(b);
152
- b = isl_aff_scale(b, csl->stride->stride);
153
- isl_int_neg(v, csl->stride->offset);
154
- b = isl_aff_add_constant(b, v);
155
+ b = isl_aff_scale_val(b, cloog_int_to_isl_val(isl_constraint_get_ctx(c), csl->stride->stride));
156
+ v = cloog_int_to_isl_val(isl_constraint_get_ctx(c), csl->stride->offset);
157
+ v = isl_val_neg(v);
158
+ b = isl_aff_add_constant_val(b, v);
159
b = isl_aff_add_coefficient_si(b, isl_dim_in, csl->level - 1, 1);
161
bound = isl_inequality_from_aff(b);
163
csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound);
166
isl_constraint_free(c);
169
@@ -960,7 +979,7 @@ static int constraint_stride_lower(__isl
170
static int constraint_stride_lower_c(__isl_take isl_constraint *c, void *user)
172
struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user;
175
isl_constraint *bound;
176
isl_constraint *csl_c;
178
@@ -970,10 +989,9 @@ static int constraint_stride_lower_c(__i
183
- isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v);
184
- if (!isl_int_is_pos(v)) {
186
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, csl->level - 1);
187
+ if (!isl_val_is_pos(v)) {
189
isl_constraint_free(c);
192
@@ -984,15 +1002,15 @@ static int constraint_stride_lower_c(__i
193
d = isl_constraint_get_aff(csl_c);
194
d = isl_aff_drop_dims(d, isl_dim_div, 0, isl_aff_dim(d, isl_dim_div));
195
d = isl_aff_set_coefficient_si(d, isl_dim_in, csl->level - 1, 0);
196
- d = isl_aff_scale(d, csl->stride->factor);
197
+ d = isl_aff_scale_val(d, cloog_int_to_isl_val(isl_constraint_get_ctx(csl_c), csl->stride->factor));
199
b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1);
202
b = isl_aff_add(b, isl_aff_copy(d));
203
- b = isl_aff_scale_down(b, csl->stride->stride);
204
+ b = isl_aff_scale_down_val(b, cloog_int_to_isl_val(isl_constraint_get_ctx(csl_c), csl->stride->stride));
205
b = isl_aff_floor(b);
206
- b = isl_aff_scale(b, csl->stride->stride);
207
+ b = isl_aff_scale_val(b, cloog_int_to_isl_val(isl_constraint_get_ctx(csl_c), csl->stride->stride));
208
b = isl_aff_sub(b, d);
209
b = isl_aff_add_coefficient_si(b, isl_dim_in, csl->level - 1, 1);
211
@@ -1000,7 +1018,7 @@ static int constraint_stride_lower_c(__i
213
csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound);
217
isl_constraint_free(c);
220
@@ -1090,28 +1108,30 @@ struct cloog_bound_split {
221
static int constraint_bound_split(__isl_take isl_constraint *c, void *user)
223
struct cloog_bound_split *cbs = (struct cloog_bound_split *)user;
230
- isl_constraint_get_coefficient(c, isl_dim_set, cbs->level - 1, &v);
231
- if (!cbs->lower && isl_int_is_pos(v))
232
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, cbs->level - 1);
233
+ if (!cbs->lower && isl_val_is_pos(v))
234
cbs->lower = handle = 1;
235
- else if (!cbs->upper && isl_int_is_neg(v))
236
+ else if (!cbs->upper && isl_val_is_neg(v))
237
cbs->upper = handle = 1;
240
for (i = 0; i < isl_set_dim(cbs->set, isl_dim_param); ++i) {
241
- isl_constraint_get_coefficient(c, isl_dim_param, i, &v);
242
- if (isl_int_is_zero(v))
244
+ v = isl_constraint_get_coefficient_val(c, isl_dim_param, i);
245
+ if (isl_val_is_zero(v))
248
cbs->set = isl_set_split_dims(cbs->set,
249
isl_dim_param, i, 1);
253
- isl_constraint_free(c);
256
+ isl_constraint_free(c);
257
return (cbs->lower && cbs->upper) ? -1 : 0;
260
@@ -1203,7 +1223,7 @@ static int injective_scattering(CloogSca
261
* - scattdims is the total number of scattering dimentions.
263
int cloog_scattering_lazy_block(CloogScattering *s1, CloogScattering *s2,
264
- CloogScatteringList *scattering, int scattdims)
265
+ CloogScatteringList *scattering, int scattdims)
268
struct isl_space *dim;
269
@@ -1211,8 +1231,8 @@ int cloog_scattering_lazy_block(CloogSca
270
struct isl_set *delta;
271
isl_map *map1 = isl_map_from_cloog_scattering(s1);
272
isl_map *map2 = isl_map_from_cloog_scattering(s2);
279
n_scat = isl_map_dim(map1, isl_dim_out);
280
@@ -1225,22 +1245,33 @@ int cloog_scattering_lazy_block(CloogSca
281
rel = isl_map_apply_domain(rel, isl_map_copy(map1));
282
rel = isl_map_apply_range(rel, isl_map_copy(map2));
283
delta = isl_map_deltas(rel);
286
for (i = 0; i < n_scat; ++i) {
287
- fixed = isl_set_fast_dim_is_fixed(delta, i, &cst);
289
+ cst = isl_set_plain_get_val_if_fixed(delta, isl_dim_set, i);
293
- if (isl_int_is_zero(cst))
295
+ if (isl_val_is_zero(cst)){
298
- if (i + 1 < n_scat)
300
+ if (i + 1 < n_scat){
303
- if (!isl_int_is_one(cst))
305
+ if (!isl_val_is_one(cst)){
308
- if (!injective_scattering(scattering))
310
+ if (!injective_scattering(scattering)){
318
- isl_int_clear(cst);
322
@@ -1345,10 +1376,25 @@ CloogDomain *cloog_domain_simplify_union
323
* If value is not NULL, then it is set to the constant value of dimension.
325
int cloog_scattering_lazy_isscalar(CloogScattering *scatt, int dimension,
326
- cloog_int_t *value)
327
+ cloog_int_t *value)
329
isl_map *map = isl_map_from_cloog_scattering(scatt);
330
- return isl_map_fast_is_fixed(map, isl_dim_out, dimension, value);
331
+ isl_val *v = isl_map_plain_get_val_if_fixed(map, isl_dim_out, dimension);
333
+ if (!isl_val_is_nan(v)){
335
+ isl_val_to_cloog_int(v, value);
350
@@ -1362,7 +1408,22 @@ int cloog_domain_lazy_isconstant(CloogDo
353
isl_set *set = isl_set_from_cloog_domain(domain);
354
- return isl_set_fast_dim_is_fixed(set, dimension, value);
355
+ isl_val *cst = isl_set_plain_get_val_if_fixed(set, isl_dim_set, dimension);
357
+ if (!isl_val_is_nan(cst)){
359
+ isl_val_to_cloog_int(cst, value);
374
@@ -1389,20 +1450,24 @@ CloogDomain *cloog_domain_cube(CloogStat
375
int dim, cloog_int_t min, cloog_int_t max)
378
- struct isl_basic_set *cube;
379
- struct isl_basic_set *interval;
380
- struct isl_basic_set_list *list;
387
return cloog_domain_universe(state, dim);
389
- interval = isl_basic_set_interval(state->backend->ctx, min, max);
390
- list = isl_basic_set_list_alloc(state->backend->ctx, dim);
391
- for (i = 0; i < dim; ++i)
392
- list = isl_basic_set_list_add(list, isl_basic_set_copy(interval));
393
- isl_basic_set_free(interval);
394
- cube = isl_basic_set_list_product(list);
395
- return cloog_domain_from_isl_set(isl_set_from_basic_set(cube));
396
+ space = isl_space_set_alloc(state->backend->ctx, 0, dim);
397
+ cube = isl_set_universe(space);
398
+ for (i = 0; i < dim; ++i) {
399
+ min_v = cloog_int_to_isl_val(isl_set_get_ctx(cube), min);
400
+ max_v = cloog_int_to_isl_val(isl_set_get_ctx(cube), max);
401
+ cube = isl_set_lower_bound_val(cube, isl_dim_set, i, min_v);
402
+ cube = isl_set_upper_bound_val(cube, isl_dim_set, i, max_v);
405
+ return cloog_domain_from_isl_set(cube);
409
@@ -1595,7 +1660,7 @@ static void Euclid(cloog_int_t a, cloog_
410
cloog_int_mul(tmp, tmp, d);
411
cloog_int_sub(c, c, tmp);
412
cloog_int_swap(c, d);
413
- cloog_int_swap(e, f);
414
+ cloog_int_swap(e, f);
416
cloog_int_set(*g, c);
417
if (cloog_int_is_zero(a))
418
@@ -1631,49 +1696,70 @@ static void Euclid(cloog_int_t a, cloog_
419
static CloogStride *construct_stride(isl_constraint *c, int level)
422
- isl_int v, m, gcd, stride, factor;
423
+ isl_val *v, *m, *gcd, *stride;
424
+ isl_val *v_copy, *m_copy, *gcd_copy;
425
+ cloog_int_t c_v, c_m, c_gcd, c_stride, c_factor;
427
+ isl_ctx *ctx = isl_constraint_get_ctx(c);;
435
- isl_int_init(factor);
436
- isl_int_init(stride);
438
- isl_constraint_get_coefficient(c, isl_dim_set, level - 1, &v);
439
- sign = isl_int_sgn(v);
441
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, level - 1);
443
- isl_int_set_si(gcd, 0);
444
+ sign = isl_val_sgn(v);
445
+ m = isl_val_abs(v); /* *takes* v. */
447
+ gcd = isl_val_int_from_si(ctx, 0);
448
n = isl_constraint_dim(c, isl_dim_div);
449
for (i = 0; i < n; ++i) {
450
- isl_constraint_get_coefficient(c, isl_dim_div, i, &v);
451
- isl_int_gcd(gcd, gcd, v);
452
+ v = isl_constraint_get_coefficient_val(c, isl_dim_div, i);
453
+ gcd = isl_val_gcd(gcd, v);
456
- isl_int_gcd(v, m, gcd);
457
- isl_int_divexact(stride, gcd, v);
458
+ m_copy = isl_val_copy(m);
459
+ gcd_copy = isl_val_copy(gcd);
461
+ v = isl_val_gcd(m, gcd);
463
+ v_copy = isl_val_copy(v);
464
+ gcd = isl_val_copy(gcd_copy);
465
+ stride = isl_val_div(gcd, v);
467
- if (isl_int_is_zero(stride) || isl_int_is_one(stride))
468
+ if (isl_val_is_zero(stride) || isl_val_is_one(stride))
471
- Euclid(m, stride, &factor, &v, &gcd);
472
+ cloog_int_init(c_m);
473
+ cloog_int_init(c_stride);
474
+ cloog_int_init(c_v);
475
+ cloog_int_init(c_gcd);
476
+ cloog_int_init(c_factor);
478
+ isl_val_to_cloog_int(m_copy, &c_m);
479
+ isl_val_to_cloog_int(stride, &c_stride);
480
+ isl_val_to_cloog_int(v_copy, &c_v);
481
+ isl_val_to_cloog_int(gcd_copy, &c_gcd);
483
+ Euclid(c_m, c_stride, &c_factor, &c_v, &c_gcd);
485
- isl_int_neg(factor, factor);
486
+ cloog_int_neg(c_factor, c_factor);
488
c = isl_constraint_copy(c);
489
- s = cloog_stride_alloc_from_constraint(stride,
490
- cloog_constraint_from_isl_constraint(c), factor);
491
+ s = cloog_stride_alloc_from_constraint(c_stride,
492
+ cloog_constraint_from_isl_constraint(c), c_factor);
495
+ cloog_int_clear(c_m);
496
+ cloog_int_clear(c_stride);
497
+ cloog_int_clear(c_v);
498
+ cloog_int_clear(c_gcd);
499
+ cloog_int_clear(c_factor);
502
- isl_int_clear(stride);
503
- isl_int_clear(factor);
504
- isl_int_clear(gcd);
507
+ isl_val_free(stride);
508
+ isl_val_free(gcd_copy);
509
+ isl_val_free(m_copy);
510
+ isl_val_free(v_copy);
514
@@ -1694,7 +1780,7 @@ static int find_stride(__isl_take isl_co
516
struct cloog_isl_find_stride_data *data;
521
if (!isl_constraint_is_equality(c)) {
522
isl_constraint_free(c);
523
@@ -1714,13 +1800,11 @@ static int find_stride(__isl_take isl_co
529
- isl_constraint_get_coefficient(c, isl_dim_set, data->level - 1, &v);
530
- if (!isl_int_is_zero(v))
531
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, data->level - 1);
532
+ if (!isl_val_is_zero(v))
533
data->stride = construct_stride(c, data->level);
538
isl_constraint_free(c);
540
@@ -1769,7 +1853,7 @@ struct cloog_can_unroll {
549
@@ -1782,11 +1866,11 @@ struct cloog_can_unroll {
550
* with l the given lower bound and i the iterator identified by level.
552
static int is_valid_unrolling_lower_bound(struct cloog_can_unroll *ccu,
553
- __isl_keep isl_constraint *c, isl_int *v)
554
+ __isl_keep isl_constraint *c, isl_val **v)
558
- enum isl_lp_result res;
559
+ enum isl_lp_result;
561
n_div = isl_constraint_dim(c, isl_dim_div);
562
if (isl_constraint_involves_dims(c, isl_dim_div, 0, n_div))
563
@@ -1796,15 +1880,19 @@ static int is_valid_unrolling_lower_boun
564
aff = isl_aff_ceil(aff);
565
aff = isl_aff_neg(aff);
566
aff = isl_aff_add_coefficient_si(aff, isl_dim_in, ccu->level - 1, 1);
567
- res = isl_set_max(ccu->set, aff, v);
568
+ *v = isl_set_max_val(ccu->set, aff);
571
- if (res == isl_lp_unbounded)
573
+ if (!*v || isl_val_is_nan(*v))
574
+ cloog_die("Fail to decide about unrolling (cannot find max)");
576
- assert(res == isl_lp_ok);
577
+ if (isl_val_is_infty(*v) || isl_val_is_neginfty(*v)){
583
- cloog_int_add_ui(*v, *v, 1);
584
+ *v = isl_val_add_ui(*v, 1);
588
@@ -1818,21 +1906,21 @@ static int is_valid_unrolling_lower_boun
589
static int constraint_can_unroll(__isl_take isl_constraint *c, void *user)
591
struct cloog_can_unroll *ccu = (struct cloog_can_unroll *)user;
595
+ isl_val *count = NULL;
598
- isl_int_init(count);
599
- isl_constraint_get_coefficient(c, isl_dim_set, ccu->level - 1, &v);
600
- if (isl_int_is_pos(v) &&
601
- is_valid_unrolling_lower_bound(ccu, c, &count) &&
602
- (!ccu->c || isl_int_lt(count, *ccu->n))) {
603
+ v = isl_constraint_get_coefficient_val(c, isl_dim_set, ccu->level - 1);
604
+ if (isl_val_is_pos(v) &&
605
+ is_valid_unrolling_lower_bound(ccu, c, &count) &&
606
+ (!ccu->c || (isl_val_lt(count, ccu->n))) ) {
607
isl_constraint_free(ccu->c);
608
ccu->c = isl_constraint_copy(c);
609
- isl_int_set(*ccu->n, count);
611
+ isl_val_free(ccu->n);
612
+ ccu->n = isl_val_copy(count);
614
- isl_int_clear(count);
616
+ isl_val_free(count);
618
isl_constraint_free(c);
621
@@ -1872,7 +1960,8 @@ int cloog_domain_can_unroll(CloogDomain
622
CloogConstraint **lb)
624
isl_set *set = isl_set_from_cloog_domain(domain);
625
- struct cloog_can_unroll ccu = { 1, level, NULL, set, n };
626
+ isl_val *v = cloog_int_to_isl_val(isl_set_get_ctx(set), *n);
627
+ struct cloog_can_unroll ccu = { 1, level, NULL, set, v };
631
@@ -1887,6 +1976,11 @@ int cloog_domain_can_unroll(CloogDomain
633
*lb = cloog_constraint_from_isl_constraint(ccu.c);
635
+ isl_val_to_cloog_int(ccu.n, n);
636
+ /* Note: we have to free ccu.n and not v because v has been
637
+ * freed and replaced in ccu during isl_set_foreach_basic_set
639
+ isl_val_free(ccu.n);
640
return ccu.can_unroll;
643
@@ -1904,6 +1998,7 @@ CloogDomain *cloog_domain_fixed_offset(C
646
isl_set *set = isl_set_from_cloog_domain(domain);
647
+ isl_ctx *ctx = isl_set_get_ctx(set);
651
@@ -1911,7 +2006,7 @@ CloogDomain *cloog_domain_fixed_offset(C
652
aff = isl_constraint_get_bound(c, isl_dim_set, level - 1);
653
aff = isl_aff_ceil(aff);
654
aff = isl_aff_add_coefficient_si(aff, isl_dim_in, level - 1, -1);
655
- aff = isl_aff_add_constant(aff, offset);
656
+ aff = isl_aff_add_constant_val(aff, cloog_int_to_isl_val(ctx, offset));
657
eq = isl_equality_from_aff(aff);
658
set = isl_set_add_constraint(set, eq);
660
Index: b/include/cloog/isl/constraintset.h
661
===================================================================
662
--- a/include/cloog/isl/constraintset.h
663
+++ b/include/cloog/isl/constraintset.h
664
@@ -27,6 +27,12 @@ CloogConstraintSet *cloog_constraint_set
665
CloogConstraint *cloog_constraint_from_isl_constraint(struct isl_constraint *constraint);
666
isl_constraint *cloog_constraint_to_isl(CloogConstraint *constraint);
668
+__isl_give isl_val *cloog_int_to_isl_val(isl_ctx* ctx, cloog_int_t c);
669
+void isl_val_to_cloog_int(__isl_keep isl_val *val, cloog_int_t *cint);
671
+__isl_give isl_val *cloog_constraint_coefficient_get_val(CloogConstraint *constraint,
674
#if defined(__cplusplus)
677
Index: b/source/isl/constraints.c
678
===================================================================
679
--- a/source/isl/constraints.c
680
+++ b/source/isl/constraints.c
682
#include <cloog/isl/backend.h>
685
+#include <isl/val.h>
686
+#include <isl/val_gmp.h>
689
#define ALLOC(type) (type*)malloc(sizeof(type))
690
#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type))
692
+__isl_give isl_val *cloog_int_to_isl_val(isl_ctx* ctx, cloog_int_t c)
695
+#if defined(CLOOG_INT_INT)
696
+ v = isl_val_int_from_si(ctx, c);
697
+#elif defined(CLOOG_INT_LONG)
698
+ v = isl_val_int_from_si(ctx, c);
699
+#elif defined(CLOOG_INT_LONG_LONG)
700
+ v = isl_val_int_from_si(ctx, c);
701
+#elif defined(CLOOG_INT_GMP)
702
+ v = isl_val_int_from_gmp(ctx, c);
704
+#error "No integer type defined"
710
+ * CLooG'll be dealing in integers so we expect numerator/1 form
711
+ * from isl_val. Thus get numerator to assign to cloog_int
713
+void isl_val_to_cloog_int(__isl_keep isl_val *val, cloog_int_t *cint)
715
+ assert(isl_val_is_int(val));
716
+#if defined(CLOOG_INT_INT)
717
+ *cint = isl_val_get_num_si(val);
718
+#elif defined(CLOOG_INT_LONG)
719
+ *cint = isl_val_get_num_si(val);
720
+#elif defined(CLOOG_INT_LONG_LONG)
721
+ *cint = isl_val_get_num_si(val);
722
+#elif defined(CLOOG_INT_GMP)
723
+ isl_val_get_num_gmp(val, *cint);
725
+#error "No integer type defined"
730
CloogConstraintSet *cloog_constraint_set_from_isl_basic_set(struct isl_basic_set *bset)
732
return (CloogConstraintSet *)bset;
733
@@ -266,53 +306,65 @@ int cloog_equal_count(CloogEqualities *e
734
static int cloog_constraint_equal_type(CloogConstraint *cc, int level)
739
int type = EQTYPE_NONE;
740
struct isl_constraint *constraint = cloog_constraint_to_isl(cc);
743
- isl_constraint_get_constant(constraint, &c);
744
- if (!isl_int_is_zero(c))
745
+ c = isl_constraint_get_constant_val(constraint);
746
+ if (!isl_val_is_zero(c))
747
type = EQTYPE_CONSTANT;
748
- isl_constraint_get_coefficient(constraint, isl_dim_set, level - 1, &c);
749
- if (!isl_int_is_one(c) && !isl_int_is_negone(c))
751
+ c = isl_constraint_get_coefficient_val(constraint, isl_dim_set, level - 1);
752
+ if (!isl_val_is_one(c) && !isl_val_is_negone(c))
753
type = EQTYPE_EXAFFINE;
755
for (i = 0; i < isl_constraint_dim(constraint, isl_dim_param); ++i) {
756
- isl_constraint_get_coefficient(constraint, isl_dim_param, i, &c);
757
- if (isl_int_is_zero(c))
758
+ c = isl_constraint_get_coefficient_val(constraint, isl_dim_param, i);
759
+ if (isl_val_is_zero(c)){
762
- if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) ||
764
+ if ((!isl_val_is_one(c) && !isl_val_is_negone(c)) ||
765
type != EQTYPE_NONE) {
766
type = EQTYPE_EXAFFINE;
770
type = EQTYPE_PUREITEM;
773
for (i = 0; i < isl_constraint_dim(constraint, isl_dim_set); ++i) {
776
- isl_constraint_get_coefficient(constraint, isl_dim_set, i, &c);
777
- if (isl_int_is_zero(c))
778
+ c = isl_constraint_get_coefficient_val(constraint, isl_dim_set, i);
779
+ if (isl_val_is_zero(c)){
782
- if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) ||
784
+ if ((!isl_val_is_one(c) && !isl_val_is_negone(c)) ||
785
type != EQTYPE_NONE) {
786
type = EQTYPE_EXAFFINE;
790
type = EQTYPE_PUREITEM;
793
for (i = 0; i < isl_constraint_dim(constraint, isl_dim_div); ++i) {
794
- isl_constraint_get_coefficient(constraint, isl_dim_div, i, &c);
795
- if (isl_int_is_zero(c))
796
+ c = isl_constraint_get_coefficient_val(constraint, isl_dim_div, i);
797
+ if (isl_val_is_zero(c)){
800
- if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) ||
802
+ if ((!isl_val_is_one(c) && !isl_val_is_negone(c)) ||
803
type != EQTYPE_NONE) {
804
type = EQTYPE_EXAFFINE;
808
type = EQTYPE_PUREITEM;
813
if (type == EQTYPE_NONE)
814
type = EQTYPE_CONSTANT;
815
@@ -447,27 +499,31 @@ static struct clast_expr *div_expr(Cloog
818
unsigned dim = cloog_constraint_total_dimension(constraint);
821
struct clast_reduction *r;
822
struct clast_expr *e = NULL;
826
+ cloog_int_init(cint);
827
div = isl_constraint_get_div(cloog_constraint_to_isl(constraint), pos);
830
for (i = 0, nb_elts = 0; i < dim; ++i) {
831
struct cloog_isl_dim dim;
833
dim = constraint_cloog_dim_to_isl_dim(constraint, i);
834
if (dim.type == isl_dim_set)
835
dim.type = isl_dim_in;
836
- isl_aff_get_coefficient(div, dim.type, dim.pos, &c);
837
- if (!cloog_int_is_zero(c))
838
+ c = isl_aff_get_coefficient_val(div, dim.type, dim.pos);
839
+ if (!isl_val_is_zero(c))
844
- isl_aff_get_constant(div, &c);
845
- if (!cloog_int_is_zero(c))
846
+ c = isl_aff_get_constant_val(div);
847
+ if (!isl_val_is_zero(c))
851
r = new_clast_reduction(clast_red_sum, nb_elts);
852
for (i = 0, nb_elts = 0; i < dim; ++i) {
853
@@ -477,22 +533,35 @@ static struct clast_expr *div_expr(Cloog
854
dim = constraint_cloog_dim_to_isl_dim(constraint, i);
855
if (dim.type == isl_dim_set)
856
dim.type = isl_dim_in;
857
- isl_aff_get_coefficient(div, dim.type, dim.pos, &c);
858
- if (cloog_int_is_zero(c))
859
+ c = isl_aff_get_coefficient_val(div, dim.type, dim.pos);
860
+ if (isl_val_is_zero(c)){
865
v = cloog_constraint_variable_expr(constraint, 1 + i, names);
867
- r->elts[nb_elts++] = &new_clast_term(c, v)->expr;
868
+ /* We are interested only in the numerator */
869
+ cloog_int_set_si(cint, isl_val_get_num_si(c));
870
+ r->elts[nb_elts++] = &new_clast_term(cint, v)->expr;
874
- isl_aff_get_constant(div, &c);
875
- if (!cloog_int_is_zero(c))
876
- r->elts[nb_elts++] = &new_clast_term(c, NULL)->expr;
878
- isl_aff_get_denominator(div, &c);
879
- e = &new_clast_binary(clast_bin_fdiv, &r->expr, c)->expr;
880
+ c = isl_aff_get_constant_val(div);
881
+ if (!isl_val_is_zero(c)) {
882
+ /* We are interested only in the numerator */
883
+ cloog_int_set_si(cint, isl_val_get_num_si(c));
884
+ r->elts[nb_elts++] = &new_clast_term(cint, NULL)->expr;
888
- cloog_int_clear(c);
889
+ c = isl_aff_get_denominator_val(div);
890
+ isl_val_to_cloog_int(c, &cint);
892
+ e = &new_clast_binary(clast_bin_fdiv, &r->expr, cint)->expr;
894
+ cloog_int_clear(cint);
898
@@ -529,37 +598,34 @@ struct clast_expr *cloog_constraint_vari
900
int cloog_constraint_involves(CloogConstraint *constraint, int v)
907
- cloog_constraint_coefficient_get(constraint, v, &c);
908
- res = !isl_int_is_zero(c);
910
+ c = cloog_constraint_coefficient_get_val(constraint, v);
911
+ res = !isl_val_is_zero(c);
916
int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v)
923
- cloog_constraint_coefficient_get(constraint, v, &c);
924
- res = isl_int_is_pos(c);
926
+ c = cloog_constraint_coefficient_get_val(constraint, v);
927
+ res = isl_val_is_pos(c);
932
int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v)
939
- cloog_constraint_coefficient_get(constraint, v, &c);
940
- res = isl_int_is_neg(c);
942
+ c = cloog_constraint_coefficient_get_val(constraint, v);
943
+ res = isl_val_is_neg(c);
948
@@ -585,15 +651,37 @@ void cloog_constraint_coefficient_get(Cl
950
struct cloog_isl_dim dim;
958
dim = constraint_cloog_dim_to_isl_dim(constraint, var);
959
c = cloog_constraint_to_isl(constraint);
960
- isl_constraint_get_coefficient(c, dim.type, dim.pos, val);
961
+ ival = isl_constraint_get_coefficient_val(c, dim.type, dim.pos);
963
+ isl_val_to_cloog_int(ival, val);
964
+ isl_val_free(ival);
967
+isl_val *cloog_constraint_coefficient_get_val(CloogConstraint *constraint,
970
+ struct cloog_isl_dim dim;
977
+ dim = constraint_cloog_dim_to_isl_dim(constraint, var);
978
+ c = cloog_constraint_to_isl(constraint);
979
+ val = isl_constraint_get_coefficient_val(c, dim.type, dim.pos);
985
void cloog_constraint_coefficient_set(CloogConstraint *constraint,
986
int var, cloog_int_t val)
988
@@ -604,14 +692,26 @@ void cloog_constraint_coefficient_set(Cl
990
dim = constraint_cloog_dim_to_isl_dim(constraint, var);
991
c = cloog_constraint_to_isl(constraint);
992
- isl_constraint_set_coefficient(c, dim.type, dim.pos, val);
993
+ isl_constraint_set_coefficient_val(c, dim.type, dim.pos,
994
+ cloog_int_to_isl_val(isl_constraint_get_ctx(c), val));
997
void cloog_constraint_constant_get(CloogConstraint *constraint, cloog_int_t *val)
999
- isl_constraint_get_constant(cloog_constraint_to_isl(constraint), val);
1001
+ ival = isl_constraint_get_constant_val(cloog_constraint_to_isl(constraint));
1002
+ isl_val_to_cloog_int(ival, val);
1003
+ isl_val_free(ival);
1007
+__isl_give isl_val *cloog_constraint_constant_get_val(CloogConstraint *constraint)
1009
+ return isl_constraint_get_constant_val(cloog_constraint_to_isl(constraint));
1015
* Copy the coefficient of constraint c into dst in PolyLib order,
1016
* i.e., first the coefficients of the variables, then the coefficients
1017
@@ -700,15 +800,11 @@ CloogConstraintSet *cloog_constraint_set
1019
static int add_constant_term(CloogConstraint *c, void *user)
1021
- isl_int *bound = (isl_int *)user;
1025
+ isl_val **bound = (isl_val **)user;
1028
- cloog_constraint_constant_get(c, &v);
1029
- isl_int_add(*bound, *bound, v);
1032
+ v = cloog_constraint_constant_get_val(c);
1033
+ *bound = isl_val_add(*bound, v);
1037
@@ -822,11 +918,14 @@ CloogConstraintSet *cloog_constraint_set
1038
c = isl_constraint_set_coefficient_si(c, isl_dim_set, dim.pos, -1);
1039
bset = isl_basic_set_add_constraint(bset, c);
1041
- isl_int_set_si(*bound, 0);
1042
+ cloog_int_set_si(*bound, 0);
1043
+ isl_val *v = cloog_int_to_isl_val(isl_basic_set_get_ctx(bset), *bound);
1044
constraints = cloog_constraint_set_from_isl_basic_set(bset);
1045
cloog_constraint_set_foreach_constraint(constraints,
1046
- add_constant_term, bound);
1047
+ add_constant_term, &v);
1048
+ isl_val_to_cloog_int(v, bound); //return the value to bound
1051
isl_basic_set_free(orig);
1052
return cloog_constraint_set_from_isl_basic_set(bset);
1054
@@ -896,31 +995,27 @@ static isl_aff *extract_stride_offset(__
1055
isl_space *dim = isl_constraint_get_space(c);
1056
isl_local_space *ls = isl_local_space_from_space(dim);
1057
isl_aff *offset = isl_aff_zero_on_domain(ls);
1060
unsigned nparam, nvar;
1064
nparam = isl_constraint_dim(c, isl_dim_param);
1065
nvar = isl_constraint_dim(c, isl_dim_set);
1067
for (i = 0; i < nparam; ++i) {
1068
- isl_constraint_get_coefficient(c, isl_dim_param, i, &u);
1069
- isl_int_mul(u, u, stride->factor);
1070
- offset = isl_aff_set_coefficient(offset, isl_dim_param, i, u);
1071
+ u = isl_constraint_get_coefficient_val(c, isl_dim_param, i);
1072
+ u = isl_val_mul(u, cloog_int_to_isl_val(isl_constraint_get_ctx(c), stride->factor));
1073
+ offset = isl_aff_set_coefficient_val(offset, isl_dim_param, i, u);
1075
for (i = 0; i < nvar; ++i) {
1078
- isl_constraint_get_coefficient(c, isl_dim_set, i, &u);
1079
- isl_int_mul(u, u, stride->factor);
1080
- offset = isl_aff_set_coefficient(offset, isl_dim_in, i, u);
1082
- isl_constraint_get_constant(c, &u);
1083
- isl_int_mul(u, u, stride->factor);
1084
- offset = isl_aff_set_constant(offset, u);
1087
+ u = isl_constraint_get_coefficient_val(c, isl_dim_set, i);
1088
+ u = isl_val_mul(u, cloog_int_to_isl_val(isl_constraint_get_ctx(c), stride->factor));
1089
+ offset = isl_aff_set_coefficient_val(offset, isl_dim_in, i, u);
1091
+ u = isl_constraint_get_constant_val(c);
1092
+ u = isl_val_mul(u, cloog_int_to_isl_val(isl_constraint_get_ctx(c), stride->factor));
1093
+ offset = isl_aff_set_constant_val(offset, u);
1097
@@ -953,9 +1048,9 @@ CloogConstraint *cloog_constraint_stride
1098
offset = extract_stride_offset(stride_c, level, stride);
1100
lower = isl_aff_sub(lower, isl_aff_copy(offset));
1101
- lower = isl_aff_scale_down(lower, stride->stride);
1102
+ lower = isl_aff_scale_down_val(lower, cloog_int_to_isl_val(isl_constraint_get_ctx(stride_c), stride->stride));
1103
lower = isl_aff_ceil(lower);
1104
- lower = isl_aff_scale(lower, stride->stride);
1105
+ lower = isl_aff_scale_val(lower, cloog_int_to_isl_val(isl_constraint_get_ctx(stride_c), stride->stride));
1106
lower = isl_aff_add(lower, offset);
1107
lower = isl_aff_neg(lower);
1108
lower = isl_aff_add_coefficient_si(lower, isl_dim_in, level - 1, 1);
1109
Index: b/test/reservoir/QR.c
1110
===================================================================
1111
--- a/test/reservoir/QR.c
1112
+++ b/test/reservoir/QR.c
1114
/* Generated from ../../../git/cloog/test/./reservoir/QR.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.21s. */
1117
+ if ((M <= 0) && (N >= 2)) {
1123
if ((M >= 1) && (N == 1)) {
1124
for (c4=0;c4<=M-1;c4++) {
1126
@@ -28,12 +34,6 @@ if (N >= 1) {
1131
- if ((M <= 0) && (N >= 2)) {
1137
for (c2=2;c2<=min(M,N-1);c2++) {
1138
for (c4=c2-1;c4<=N-1;c4++) {