brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.1 KiB · 4e8cb82 Raw
293 lines · c
1#include <stdio.h>2#include <isl_int.h>3#include <isl/map.h>4#include <isl/mat.h>5#include <isl_morph.h>6#include <isl/polynomial.h>7#include <isl_reordering.h>8#include "isl_list_private.h"9 10struct isl_poly {11	int ref;12	struct isl_ctx *ctx;13 14	int var;15};16typedef struct isl_poly isl_poly;17 18struct isl_poly_cst {19	struct isl_poly poly;20	isl_int n;21	isl_int d;22};23typedef struct isl_poly_cst isl_poly_cst;24 25struct isl_poly_rec {26	struct isl_poly poly;27	int n;28 29	size_t size;30	isl_poly *p[];31};32typedef struct isl_poly_rec isl_poly_rec;33 34/* dim represents the domain space.35 */36struct isl_qpolynomial {37	int ref;38 39	isl_space *dim;40	struct isl_mat *div;41	isl_poly *poly;42};43 44#undef EL45#define EL isl_qpolynomial46 47#include <isl_list_templ.h>48 49struct isl_term {50	int ref;51 52	isl_int n;53	isl_int d;54 55	isl_space *dim;56	struct isl_mat *div;57 58	int pow[1];59};60 61struct isl_pw_qpolynomial_piece {62	struct isl_set *set;63	struct isl_qpolynomial *qp;64};65 66struct isl_pw_qpolynomial {67	int ref;68 69	isl_space *dim;70 71	int n;72 73	size_t size;74	struct isl_pw_qpolynomial_piece p[1];75};76 77#undef PW78#define PW isl_pw_qpolynomial79 80#include <isl_pw_templ.h>81 82#undef EL83#define EL isl_pw_qpolynomial84 85#include <isl_list_templ.h>86 87/* dim represents the domain space.88 */89struct isl_qpolynomial_fold {90	int ref;91 92	enum isl_fold type;93	isl_space *dim;94 95	isl_qpolynomial_list *list;96};97 98struct isl_pw_qpolynomial_fold_piece {99	struct isl_set *set;100	struct isl_qpolynomial_fold *fold;101};102 103struct isl_pw_qpolynomial_fold {104	int ref;105 106	enum isl_fold type;107	isl_space *dim;108 109	int n;110 111	size_t size;112	struct isl_pw_qpolynomial_fold_piece p[1];113};114 115#undef PW116#define PW isl_pw_qpolynomial_fold117 118#include <isl_pw_templ.h>119 120#undef EL121#define EL isl_pw_qpolynomial_fold122 123#include <isl_list_templ.h>124 125void isl_term_get_num(__isl_keep isl_term *term, isl_int *n);126 127__isl_give isl_poly *isl_poly_zero(struct isl_ctx *ctx);128__isl_give isl_poly *isl_poly_copy(__isl_keep isl_poly *poly);129__isl_give isl_poly *isl_poly_cow(__isl_take isl_poly *poly);130__isl_give isl_poly *isl_poly_dup(__isl_keep isl_poly *poly);131__isl_null isl_poly *isl_poly_free(__isl_take isl_poly *poly);132__isl_give struct isl_poly *isl_poly_mul(__isl_take struct isl_poly *poly1,133	__isl_take struct isl_poly *poly2);134 135isl_bool isl_poly_is_cst(__isl_keep isl_poly *poly);136isl_bool isl_poly_is_zero(__isl_keep isl_poly *poly);137isl_bool isl_poly_is_one(__isl_keep isl_poly *poly);138isl_bool isl_poly_is_negone(__isl_keep isl_poly *poly);139__isl_keep isl_poly_cst *isl_poly_as_cst(__isl_keep isl_poly *poly);140__isl_keep isl_poly_rec *isl_poly_as_rec(__isl_keep isl_poly *poly);141 142__isl_give isl_poly *isl_poly_sum(__isl_take isl_poly *poly1,143	__isl_take isl_poly *poly2);144__isl_give struct isl_poly *isl_poly_mul_isl_int(145	__isl_take isl_poly *poly, isl_int v);146 147__isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_space *space,148	unsigned n_div, __isl_take isl_poly *poly);149__isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp);150__isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp);151 152__isl_give isl_qpolynomial *isl_qpolynomial_cst_on_domain(153	__isl_take isl_space *domain,154	isl_int v);155__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(156	__isl_take isl_space *domain, const isl_int n, const isl_int d);157__isl_give isl_qpolynomial *isl_qpolynomial_var_pow_on_domain(158	__isl_take isl_space *domain,159	int pos, int power);160isl_bool isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp);161isl_bool isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp);162isl_bool isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp,163	isl_int *n, isl_int *d);164 165unsigned isl_qpolynomial_domain_offset(__isl_keep isl_qpolynomial *qp,166	enum isl_dim_type type);167 168__isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain(169	__isl_keep isl_set *dom,170	__isl_take isl_qpolynomial *qp1,171	__isl_take isl_qpolynomial *qp2);172 173int isl_qpolynomial_plain_cmp(__isl_keep isl_qpolynomial *qp1,174	__isl_keep isl_qpolynomial *qp2);175 176int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly);177__isl_give isl_qpolynomial *isl_qpolynomial_coeff(178	__isl_keep isl_qpolynomial *poly,179	enum isl_dim_type type, unsigned pos, int deg);180 181__isl_give isl_vec *isl_qpolynomial_extract_affine(182	__isl_keep isl_qpolynomial *qp);183__isl_give isl_qpolynomial *isl_qpolynomial_from_affine(184	__isl_take isl_space *space, isl_int *f, isl_int denom);185 186__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_cow(187	__isl_take isl_pw_qpolynomial *pwqp);188 189__isl_keep isl_qpolynomial *isl_pw_qpolynomial_peek_base_at(190	__isl_keep isl_pw_qpolynomial *pwqp, int pos);191 192__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_piece(193	__isl_take isl_pw_qpolynomial *pwqp,194	__isl_take isl_set *set, __isl_take isl_qpolynomial *qp);195int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp);196 197__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_out(198	__isl_take isl_pw_qpolynomial *pwqp,199	enum isl_dim_type type, unsigned first, unsigned n);200 201__isl_give isl_val *isl_qpolynomial_opt_on_domain(202	__isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max);203 204enum isl_fold isl_fold_type_negate(enum isl_fold type);205 206__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow(207	__isl_take isl_qpolynomial_fold *fold);208__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup(209	__isl_keep isl_qpolynomial_fold *fold);210 211__isl_keep isl_qpolynomial_list *isl_qpolynomial_fold_peek_list(212	__isl_keep isl_qpolynomial_fold *fold);213 214__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_cow(215	__isl_take isl_pw_qpolynomial_fold *pwf);216 217__isl_keep isl_qpolynomial_fold *isl_pw_qpolynomial_fold_peek_base_at(218	__isl_keep isl_pw_qpolynomial_fold *pwf, int pos);219 220__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain(221	__isl_keep isl_set *set,222	__isl_take isl_qpolynomial_fold *fold1,223	__isl_take isl_qpolynomial_fold *fold2);224__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain(225	__isl_keep isl_set *set,226	__isl_take isl_qpolynomial_fold *fold1,227	__isl_take isl_qpolynomial_fold *fold2);228 229int isl_qpolynomial_fold_plain_cmp(__isl_keep isl_qpolynomial_fold *fold1,230	__isl_keep isl_qpolynomial_fold *fold2);231 232__isl_give isl_val *isl_qpolynomial_fold_opt_on_domain(233	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max);234 235isl_bool isl_pw_qpolynomial_fold_covers(236	__isl_keep isl_pw_qpolynomial_fold *pwf1,237	__isl_keep isl_pw_qpolynomial_fold *pwf2);238 239__isl_give isl_qpolynomial *isl_qpolynomial_morph_domain(240	__isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph);241__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_morph_domain(242	__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_morph *morph);243__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph_domain(244	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph);245__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_morph_domain(246	__isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_morph *morph);247 248__isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp,249	__isl_take isl_space *space);250__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift(251	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space);252 253__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities(254	__isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq);255__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities(256	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq);257__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist(258	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context);259 260__isl_give isl_qpolynomial *isl_qpolynomial_realign_domain(261	__isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r);262__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign_domain(263	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r);264 265__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_reset_space(266	__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_space *space);267__isl_give isl_qpolynomial *isl_qpolynomial_reset_domain_space(268	__isl_take isl_qpolynomial *qp, __isl_take isl_space *space);269__isl_give isl_qpolynomial *isl_qpolynomial_reset_space_and_domain(270	__isl_take isl_qpolynomial *qp, __isl_take isl_space *space,271	__isl_take isl_space *domain);272__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_domain_space(273	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space);274__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_space_and_domain(275	__isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space,276	__isl_take isl_space *domain);277__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_domain_space(278	__isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_space *space);279 280__isl_give isl_val *isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp);281__isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int(282	__isl_take isl_qpolynomial *qp, isl_int v);283__isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int(284	__isl_take isl_qpolynomial *qp, isl_int v);285 286__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale(287	__isl_take isl_qpolynomial_fold *fold, isl_int v);288 289__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int(290	__isl_take isl_qpolynomial_fold *fold, isl_int v);291 292ISL_DECLARE_LIST_FN_PRIVATE(qpolynomial)293