extract isl_map_align_divs from isl_affine_hull.c
[platform/upstream/isl.git] / isl_sample_piplib.c
1 #include "isl_vec.h"
2 #include "isl_piplib.h"
3 #include "isl_sample_piplib.h"
4
5 struct isl_vec *isl_pip_basic_set_sample(struct isl_ctx *ctx,
6         struct isl_basic_set *bset)
7 {
8         PipOptions      *options = NULL;
9         PipMatrix       *domain = NULL;
10         PipQuast        *sol = NULL;
11         struct isl_basic_map *bmap = (struct isl_basic_map *)bset;
12         struct isl_vec *vec = NULL;
13         unsigned        dim;
14
15         if (!bmap)
16                 goto error;
17         dim = bmap->nparam + bmap->n_in + bmap->n_out;
18         domain = isl_basic_map_to_pip(bmap, 0, 0, 0);
19         if (!domain)
20                 goto error;
21
22         options = pip_options_init();
23         if (!options)
24                 goto error;
25         options->Simplify = 1;
26         options->Urs_unknowns = -1;
27         sol = pip_solve(domain, NULL, -1, options);
28         if (!sol)
29                 goto error;
30         if (!sol->list)
31                 vec = isl_vec_alloc(ctx, 0);
32         else {
33                 PipList *l;
34                 int i;
35                 vec = isl_vec_alloc(ctx, 1 + dim);
36                 if (!vec)
37                         goto error;
38                 isl_int_set_si(vec->block.data[0], 1);
39                 for (i = 0, l = sol->list; l && i < dim; ++i, l = l->next) {
40                         isl_seq_cpy_from_pip(&vec->block.data[1+i],
41                                         &l->vector->the_vector[0], 1);
42                         if (entier_zero_p(l->vector->the_deno[0]))
43                                 isl_int_set_si(vec->block.data[0], 0);
44                 }
45                 if (i != dim)
46                         goto error;
47         }
48
49         pip_quast_free(sol);
50         pip_options_free(options);
51         pip_matrix_free(domain);
52
53         isl_basic_map_free(ctx, bmap);
54         return vec;
55 error:
56         isl_vec_free(ctx, vec);
57         isl_basic_map_free(ctx, bmap);
58         if (sol)
59                 pip_quast_free(sol);
60         if (domain)
61                 pip_matrix_free(domain);
62         return NULL;
63 }