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 41 struct cloogconstraint; 42 typedef struct cloogconstraint CloogConstraint; 43 struct cloogconstraintset; 44 typedef struct cloogconstraintset CloogConstraintSet; 45 struct cloogequalities; 46 typedef struct cloogequalities CloogEqualities; 47 48 #if defined(__cplusplus) 49 extern "C" 50 { 51 #endif 52 53 /****************************************************************************** 54 * Equalities spreading functions * 55 ******************************************************************************/ 56 CloogEqualities *cloog_equal_alloc(int n, int nb_levels, 57 int nb_parameters); 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); 63 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, 73 int nb_parameters); 74 CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *); 75 CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *, CloogEqualities *, int, int); 76 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); 89 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); 94 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, 105 cloog_int_t *val); 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, 111 cloog_int_t *dst); 112 CloogConstraintSet *cloog_constraint_set_drop_constraint( 113 CloogConstraintSet *constraints, CloogConstraint *constraint); 114 115 struct 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