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 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. *
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. *
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 *
32 * CLooG, the Chunky Loop Generator *
33 * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr *
35 ******************************************************************************/
38 #ifndef CLOOG_CONSTRAINTS_H
39 #define CLOOG_CONSTRAINTS_H
41 struct cloogconstraint
;
42 typedef struct cloogconstraint CloogConstraint
;
43 struct cloogconstraintset
;
44 typedef struct cloogconstraintset CloogConstraintSet
;
45 struct cloogequalities
;
46 typedef struct cloogequalities CloogEqualities
;
48 #if defined(__cplusplus)
53 /******************************************************************************
54 * Equalities spreading functions *
55 ******************************************************************************/
56 CloogEqualities
*cloog_equal_alloc(int n
, int nb_levels
,
58 void cloog_equal_free(CloogEqualities
*equal
);
59 int cloog_equal_count(CloogEqualities
*equal
);
60 int cloog_equal_type(CloogEqualities
*equal
, int level
);
61 void cloog_equal_del(CloogEqualities
*equal
, int level
);
62 int cloog_equal_total_dimension(CloogEqualities
*equal
);
64 /******************************************************************************
65 * Processing functions *
66 ******************************************************************************/
67 void cloog_constraint_set_normalize(CloogConstraintSet
*, int);
68 void cloog_constraint_set_free(CloogConstraintSet
*);
69 int cloog_constraint_set_contains_level(CloogConstraintSet
*constraints
,
70 int level
, int nb_parameters
);
71 int cloog_constraint_set_total_dimension(CloogConstraintSet
*constraints
);
72 int cloog_constraint_set_n_iterators(CloogConstraintSet
*constraints
,
74 CloogConstraintSet
*cloog_constraint_set_copy(CloogConstraintSet
*);
75 CloogConstraintSet
*cloog_constraint_set_simplify(CloogConstraintSet
*, CloogEqualities
*, int, int);
77 int cloog_constraint_needs_reduction(CloogConstraint
*upper
, int level
);
78 CloogConstraintSet
*cloog_constraint_set_for_reduction(CloogConstraint
*upper
,
79 CloogConstraint
*lower
);
80 CloogConstraintSet
*cloog_constraint_set_reduce(CloogConstraintSet
*constraints
,
81 int level
, CloogEqualities
*equal
, int nb_par
, cloog_int_t
*bound
);
82 int cloog_constraint_set_foreach_constraint(CloogConstraintSet
*constraints
,
83 int (*fn
)(CloogConstraint
*constraint
, void *user
), void *user
);
84 int cloog_constraint_is_valid(CloogConstraint
*constraint
);
85 CloogConstraint
*cloog_constraint_copy(CloogConstraint
*constraint
);
86 void cloog_constraint_release(CloogConstraint
*constraint
);
87 CloogConstraint
*cloog_constraint_invalid(void);
88 int cloog_constraint_total_dimension(CloogConstraint
*constraint
);
90 CloogConstraint
*cloog_equal_constraint(CloogEqualities
*equal
, int j
);
91 void cloog_equal_add(CloogEqualities
*equal
,
92 CloogConstraintSet
*constraints
,
93 int level
, CloogConstraint
*line
, int nb_par
);
95 CloogConstraint
*cloog_constraint_set_defining_equality(
96 CloogConstraintSet
*constraints
, int level
);
97 CloogConstraint
*cloog_constraint_set_defining_inequalities(
98 CloogConstraintSet
*constraints
,
99 int level
, CloogConstraint
**lower
, int nb_parameters
);
100 int cloog_constraint_involves(CloogConstraint
*constraint
, int v
);
101 int cloog_constraint_is_lower_bound(CloogConstraint
*constraint
, int v
);
102 int cloog_constraint_is_upper_bound(CloogConstraint
*constraint
, int v
);
103 int cloog_constraint_is_equality(CloogConstraint
*constraint
);
104 void cloog_constraint_constant_get(CloogConstraint
*constraint
,
106 void cloog_constraint_coefficient_get(CloogConstraint
*constraint
,
107 int var
, cloog_int_t
*val
);
108 void cloog_constraint_coefficient_set(CloogConstraint
*constraint
,
109 int var
, cloog_int_t val
);
110 void cloog_constraint_copy_coefficients(CloogConstraint
*constraint
,
112 CloogConstraintSet
*cloog_constraint_set_drop_constraint(
113 CloogConstraintSet
*constraints
, CloogConstraint
*constraint
);
115 struct clast_expr
*cloog_constraint_variable_expr(CloogConstraint
*constraint
,
116 int level
, CloogNames
*names
);
118 #if defined(__cplusplus)
121 #endif /* define _H */