2 /**-------------------------------------------------------------------**
4 **-------------------------------------------------------------------**
6 **-------------------------------------------------------------------**
7 ** First version: april 17th 2005 **
8 **-------------------------------------------------------------------**/
11 /******************************************************************************
12 * CLooG : the Chunky Loop Generator (experimental) *
13 ******************************************************************************
15 * Copyright (C) 2005 Cedric Bastoul *
17 * This is free software; you can redistribute it and/or modify it under the *
18 * terms of the GNU General Public License as published by the Free Software *
19 * Foundation; either version 2 of the License, or (at your option) any later *
22 * This software is distributed in the hope that it will be useful, but *
23 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
24 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
27 * You should have received a copy of the GNU General Public License along *
28 * with software; if not, write to the Free Software Foundation, Inc., *
29 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
31 * CLooG, the Chunky Loop Generator *
32 * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr *
34 ******************************************************************************/
37 #ifndef CLOOG_CONSTRAINTS_H
38 #define CLOOG_CONSTRAINTS_H
40 #if defined(CLOOG_POLYLIB)
41 #include <cloog/polylib/matrix.h>
42 #elif defined(CLOOG_ISL)
43 #include <cloog/isl/matrix.h>
45 struct cloogconstraintset
;
46 typedef struct cloogconstraintset CloogConstraintSet
;
47 struct cloogequalities
;
48 typedef struct cloogequalities CloogEqualities
;
51 #if defined(__cplusplus)
56 /******************************************************************************
57 * Equalities spreading functions *
58 ******************************************************************************/
59 CloogEqualities
*cloog_equal_alloc(int n
, int nb_levels
,
61 void cloog_equal_free(CloogEqualities
*equal
);
62 int cloog_equal_count(CloogEqualities
*equal
);
63 int cloog_equal_type(CloogEqualities
*equal
, int level
);
64 void cloog_equal_del(CloogEqualities
*equal
, int level
);
65 int cloog_equal_total_dimension(CloogEqualities
*equal
);
67 /******************************************************************************
68 * Processing functions *
69 ******************************************************************************/
70 void cloog_constraint_set_normalize(CloogConstraintSet
*, int);
71 void cloog_constraint_set_free(CloogConstraintSet
*);
72 int cloog_constraint_set_contains_level(CloogConstraintSet
*constraints
,
73 int level
, int nb_parameters
);
74 int cloog_constraint_set_total_dimension(CloogConstraintSet
*constraints
);
75 CloogConstraintSet
*cloog_constraint_set_copy(CloogConstraintSet
*);
76 CloogConstraintSet
*cloog_constraint_set_simplify(CloogConstraintSet
*, CloogEqualities
*, int, int);
78 #if defined(CLOOG_POLYLIB) || defined(CLOOG_ISL)
80 CloogConstraint
cloog_constraint_first(CloogConstraintSet
*constraints
);
81 int cloog_constraint_is_valid(CloogConstraint constraint
);
82 CloogConstraint
cloog_constraint_next(CloogConstraint constraint
);
83 CloogConstraint
cloog_constraint_copy(CloogConstraint constraint
);
84 void cloog_constraint_release(CloogConstraint constraint
);
85 CloogConstraint
cloog_constraint_invalid(void);
86 int cloog_constraint_total_dimension(CloogConstraint constraint
);
88 CloogConstraint
cloog_equal_constraint(CloogEqualities
*equal
, int j
);
89 void cloog_equal_add(CloogEqualities
*equal
,
90 CloogConstraintSet
*constraints
,
91 int level
, CloogConstraint line
, int nb_par
);
93 CloogConstraint
cloog_constraint_set_defining_equality(
94 CloogConstraintSet
*constraints
, int level
);
95 CloogConstraint
cloog_constraint_set_defining_inequalities(
96 CloogConstraintSet
*constraints
,
97 int level
, CloogConstraint
*lower
, int nb_parameters
);
98 int cloog_constraint_involves(CloogConstraint constraint
, int v
);
99 int cloog_constraint_is_lower_bound(CloogConstraint constraint
, int v
);
100 int cloog_constraint_is_upper_bound(CloogConstraint constraint
, int v
);
101 int cloog_constraint_is_equality(CloogConstraint constraint
);
102 void cloog_constraint_constant_get(CloogConstraint constraint
,
104 void cloog_constraint_coefficient_get(CloogConstraint constraint
,
105 int var
, cloog_int_t
*val
);
106 void cloog_constraint_coefficient_set(CloogConstraint constraint
,
107 int var
, cloog_int_t val
);
108 void cloog_constraint_clear(CloogConstraint constraint
);
109 void cloog_constraint_copy_coefficients(CloogConstraint constraint
,
114 #if defined(__cplusplus)
117 #endif /* define _H */