1
2   /**-------------------------------------------------------------------**
3    **                               CLooG                               **
4    **-------------------------------------------------------------------**
5    **                           constraints.h                           **
6    **-------------------------------------------------------------------**
7    **                    First version: april 17th 2005                 **
8    **-------------------------------------------------------------------**/
9
10
11/******************************************************************************
12 *               CLooG : the Chunky Loop Generator (experimental)             *
13 ******************************************************************************
14 *                                                                            *
15 * Copyright (C) 2005 Cedric Bastoul                                          *
16 *                                                                            *
17 * This library is free software; you can redistribute it and/or              *
18 * modify it under the terms of the GNU Lesser General Public                 *
19 * License as published by the Free Software Foundation; either               *
20 * version 2.1 of the License, or (at your option) any later version.         *
21 *                                                                            *
22 * This library is distributed in the hope that it will be useful,            *
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU          *
25 * Lesser General Public License for more details.                            *
26 *                                                                            *
27 * You should have received a copy of the GNU Lesser General Public           *
28 * License along with this library; if not, write to the Free Software        *
29 * Foundation, Inc., 51 Franklin Street, Fifth Floor,                         *
30 * Boston, MA  02110-1301  USA                                                *
31 *                                                                            *
32 * CLooG, the Chunky Loop Generator                                           *
33 * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr                         *
34 *                                                                            *
35 ******************************************************************************/
36
37
38#ifndef CLOOG_CONSTRAINTS_H
39#define CLOOG_CONSTRAINTS_H
40
41struct cloogconstraint;
42typedef struct cloogconstraint CloogConstraint;
43struct cloogconstraintset;
44typedef struct cloogconstraintset CloogConstraintSet;
45struct cloogequalities;
46typedef struct cloogequalities CloogEqualities;
47
48#if defined(__cplusplus)
49extern "C"
50  {
51#endif
52
53/******************************************************************************
54 *                        Equalities spreading functions                      *
55 ******************************************************************************/
56CloogEqualities *cloog_equal_alloc(int n, int nb_levels,
57			int nb_parameters);
58void		 cloog_equal_free(CloogEqualities *equal);
59int              cloog_equal_count(CloogEqualities *equal);
60int              cloog_equal_type(CloogEqualities *equal, int level);
61void             cloog_equal_del(CloogEqualities *equal, int level);
62int              cloog_equal_total_dimension(CloogEqualities *equal);
63
64/******************************************************************************
65 *                            Processing functions                            *
66 ******************************************************************************/
67void          cloog_constraint_set_normalize(CloogConstraintSet *, int);
68void          cloog_constraint_set_free(CloogConstraintSet *);
69int           cloog_constraint_set_contains_level(CloogConstraintSet *constraints,
70			int level, int nb_parameters);
71int           cloog_constraint_set_total_dimension(CloogConstraintSet *constraints);
72int           cloog_constraint_set_n_iterators(CloogConstraintSet *constraints,
73			int nb_parameters);
74CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *);
75CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *, CloogEqualities *, int, int);
76
77int cloog_constraint_needs_reduction(CloogConstraint *upper, int level);
78CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper,
79	       CloogConstraint *lower);
80CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints,
81	int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound);
82int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints,
83	int (*fn)(CloogConstraint *constraint, void *user), void *user);
84int              cloog_constraint_is_valid(CloogConstraint *constraint);
85CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint);
86void             cloog_constraint_release(CloogConstraint *constraint);
87CloogConstraint *cloog_constraint_invalid(void);
88int              cloog_constraint_total_dimension(CloogConstraint *constraint);
89
90CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j);
91void             cloog_equal_add(CloogEqualities *equal,
92				  CloogConstraintSet *constraints,
93				  int level, CloogConstraint *line, int nb_par);
94
95CloogConstraint *cloog_constraint_set_defining_equality(
96			CloogConstraintSet *constraints, int level);
97CloogConstraint *cloog_constraint_set_defining_inequalities(
98			CloogConstraintSet *constraints,
99			int level, CloogConstraint **lower, int nb_parameters);
100int           cloog_constraint_involves(CloogConstraint *constraint, int v);
101int           cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v);
102int           cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v);
103int           cloog_constraint_is_equality(CloogConstraint *constraint);
104void          cloog_constraint_constant_get(CloogConstraint *constraint,
105			cloog_int_t *val);
106void          cloog_constraint_coefficient_get(CloogConstraint *constraint,
107			int var, cloog_int_t *val);
108void          cloog_constraint_coefficient_set(CloogConstraint *constraint,
109			int var, cloog_int_t val);
110void          cloog_constraint_copy_coefficients(CloogConstraint *constraint,
111			cloog_int_t *dst);
112CloogConstraintSet *cloog_constraint_set_drop_constraint(
113	CloogConstraintSet *constraints, CloogConstraint *constraint);
114
115struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint,
116			int level, CloogNames *names);
117
118#if defined(__cplusplus)
119  }
120#endif
121#endif /* define _H */
122