/// @brief Create an isl map from a OpenScop matrix. /// /// @param m The OpenScop matrix to translate. /// @param Space The dimensions that are contained in the OpenScop matrix. /// /// @return An isl map representing m. isl_map *mapFromMatrix(scoplib_matrix_p m, __isl_take isl_space *Space, unsigned scatteringDims) { isl_basic_map *bmap = isl_basic_map_universe(isl_space_copy(Space)); for (unsigned i = 0; i < m->NbRows; ++i) { isl_constraint *c; c = constraintFromMatrixRow(m->p[i], isl_space_copy(Space)); mpz_t minusOne; mpz_init(minusOne); mpz_set_si(minusOne, -1); isl_constraint_set_coefficient(c, isl_dim_out, i, minusOne); bmap = isl_basic_map_add_constraint(bmap, c); } for (unsigned i = m->NbRows; i < scatteringDims; i++) { isl_constraint *c; c = isl_equality_alloc(isl_local_space_from_space(isl_space_copy(Space))); mpz_t One; mpz_init(One); mpz_set_si(One, 1); isl_constraint_set_coefficient(c, isl_dim_out, i, One); bmap = isl_basic_map_add_constraint(bmap, c); } isl_space_free(Space); return isl_map_from_basic_map(bmap); }
/// @brief Create an isl map from a OpenScop matrix. /// /// @param m The OpenScop matrix to translate. /// @param Space The dimensions that are contained in the OpenScop matrix. /// /// @return An isl map representing m. isl_map *mapFromMatrix(scoplib_matrix_p m, __isl_take isl_space *Space) { isl_basic_map *bmap = isl_basic_map_universe(isl_space_copy(Space)); for (unsigned i = 0; i < m->NbRows; ++i) { isl_constraint *c; c = constraintFromMatrixRowFull(m->p[i], isl_space_copy(Space)); bmap = isl_basic_map_add_constraint(bmap, c); } isl_space_free(Space); return isl_map_from_basic_map(bmap); }
/* Construct a map from a len-dimensional domain to * a (len-n)-dimensional domain that projects out the n coordinates * starting at first. * "dim" prescribes the parameters. */ __isl_give isl_map *project_out(__isl_take isl_space *dim, int len, int first, int n) { int i, j; isl_basic_map *bmap; dim = isl_space_add_dims(dim, isl_dim_in, len); dim = isl_space_add_dims(dim, isl_dim_out, len - n); bmap = isl_basic_map_universe(dim); for (i = 0, j = 0; i < len; ++i) { if (i >= first && i < first + n) continue; bmap = isl_basic_map_equate(bmap, isl_dim_in, i, isl_dim_out, j); ++j; } return isl_map_from_basic_map(bmap); }