PIPS
sc_build_sc_nredund.c
Go to the documentation of this file.
1 /*
2 
3  $Id: sc_build_sc_nredund.c 1671 2019-06-26 19:14:11Z coelho $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of Linear/C3 Library.
8 
9  Linear/C3 Library is free software: you can redistribute it and/or modify it
10  under the terms of the GNU Lesser General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  Linear/C3 Library is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with Linear/C3 Library. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 
25 #ifdef HAVE_CONFIG_H
26  #include "config.h"
27 #endif
28 
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include "linear_assert.h"
32 
33 #include "boolean.h"
34 #include "arithmetique.h"
35 #include "vecteur.h"
36 #include "contrainte.h"
37 #include "sc.h"
38 
39 /* This function returns true if the inequation ineq is redundant for the
40  * system ps and false otherwise.
41  * sc and ineq are not modified by the function.
42  *
43  * Inequality ineq may not be redundant wrt ps for rational numbers and
44  * nevertheless true is returned if it is redundant wrt integer points.
45  *
46  * A bug found here: if we have input sc==NULL with ineq=NULL, then we'll have to test the satisfiability
47  * of a sc that has a base null and an ineq (core dump): because in sc_add_inegalite, we test only if the
48  * pointers (sc,ineg) are null.
49  * The encountered case is that the pointer not null but his all elements are null
50  * or except only one element. This means the constraint is not valid.
51  *
52  * DN 2/1/2003
53  * The same with eq_redund_with_sc_p
54  * Modifs:
55  * - change _dup to _copy
56  * - correct the bug
57  */
58 
59 bool ineq_redund_with_sc_p(sc, ineq)
60 Psysteme sc;
61 Pcontrainte ineq;
62 {
63  Psysteme ps;
64  Pcontrainte ineg;
65  bool result = false;
66 
67  if (CONTRAINTE_NULLE_P(ineq)) {
68  /*nothing to test: 0==0 is intrinsically redundant */
69  return true;
70  }
71 
72  ps = sc_copy(sc);
73  ineg = contrainte_copy(ineq);
74  contrainte_reverse(ineg);
75  sc_add_inegalite(ps,ineg);
76 
77  base_rm(sc_base(ps));
78  sc_base(ps) = BASE_NULLE;
79  sc_creer_base(ps);
80 
81  /* test de sc_faisabilite avec la nouvelle inegalite */
83  result = true;
84  sc_rm(ps);
85  return(result);
86 }
87 
88 
89 /* bool eq_redund_with_sc_p(sc, eq)
90  * Psysteme sc;
91  * Pcontrainte eq;
92  *
93  * IN: sc, eq
94  * OUT: returned boolean
95  *
96  * true if eq is redundant with sc
97  * (c) FC 16/05/94
98  */
100 Psysteme sc;
102 {
103  if (!ineq_redund_with_sc_p(sc, eq)) /* eq considered as an inequality */
104  return(false);
105  else
106  {
108  c = contrainte_copy(eq);
109  bool
110  res = ineq_redund_with_sc_p(sc, (contrainte_chg_sgn(c), c));
111  contrainte_free(c);
112  return(res);
113  }
114 }
115 
116 
117 /* Psysteme extract_nredund_subsystem(s1, s2)
118  * Psysteme s1, s2;
119  *
120  * IN: s1, s2
121  * OUT: returned Psysteme
122  *
123  * returns the constraints of s1 that are not redundant with s2
124  *
125  * (c) FC 16/05/94
126  */
128 Psysteme s1, s2;
129 {
130  Psysteme
131  new = SC_UNDEFINED;
136  cnew = CONTRAINTE_UNDEFINED; /* temporary */
137 
138  /* inequalities
139  */
140  for(c=sc_inegalites(s1);
142  c=c->succ)
143  /* could be inlined to avoid costly sc_copy inside ineq_redund_with_sc_p
144  */
145  if (!ineq_redund_with_sc_p(s2, c))
146  cnew = contrainte_copy(c),
147  cnew->succ = in,
148  in = cnew;
149 
150  /* equalities
151  */
152  for(c=sc_egalites(s1);
154  c=c->succ)
155  if (!eq_redund_with_sc_p(s2, c))
156  cnew = contrainte_copy(c),
157  cnew->succ = eq,
158  eq = cnew;
159 
160  new = sc_make(eq, in);
161  return(sc_nredund(&new), new);
162 }
163 
164 
165 /* Psysteme build_sc_nredund_1pass_ofl_ctrl(Psysteme ps, int ofl_ctrl)
166  * input : a system in which redundancies must be eliminated, and an
167  * integer indicating how overflow errors must be handled.
168  * output : Computes a new system sc from the system ps, where each
169  * constraint of the system ps is added to the new system sc,
170  * if the constraint is not redundant with the system sc
171  * previously computed.
172  * modifies :
173  * comment :
174  * The set of equalities is copied as such and ignored by
175  * redundancy checks.
176  *
177  * if ofl_ctrl == 0 overflow errors are trapped in the
178  * routine which checks if the system is feasible.
179  * if ofl_ctrl == 2 overflow errors are trapped in the
180  * sc_rational_feasibility_ofl_ctrl routine that
181  * keeps the constraint in the system whatever its redundancy
182  * characteristic
183  * if ofl_ctrl == 1 overflow errors are forwarded to the
184  * calling routine.
185  *
186  * the redundancy elimination assumes integer points. The
187  * rational set defined by sc may be enlarged.
188  *
189  */
191 Psysteme volatile *psc;
192 int ofl_ctrl;
193 {
194 
195  Psysteme sc;
196  Psysteme ps = *psc;
197  Pcontrainte ineq, ineg;
198  int init_exception_thrown = linear_number_of_exception_thrown;
199 
200  if (SC_UNDEFINED_P(ps) || sc_rn_p(ps) || sc_empty_p(ps))
201  return;
202 
203  sc = sc_init_with_sc(ps);
205  sc=sc_empty(base_dup(ps->base));
206  sc_rm(ps);
207  *psc =sc;
208  return;
209  }
210 
212  sc->nb_eq = ps->nb_eq;
213  for (ineq = ps->inegalites;
214  !CONTRAINTE_UNDEFINED_P(ineq) &&
215  /* if more than 6 exceptions are thrown from within the loop,
216  the loop is stopped. */
217  linear_number_of_exception_thrown-init_exception_thrown<7;
218  ineq=ineq->succ)
219  {
220  ineg = contrainte_copy(ineq);
221  contrainte_reverse(ineg);
222 
223  sc_add_inegalite(sc,ineg);
224 
225  if (sc_rational_feasibility_ofl_ctrl(sc,ofl_ctrl,true))
226  contrainte_reverse(ineg);
227  else {
228  sc->inegalites = sc->inegalites->succ;
229  ineg->succ = NULL;
230  contrainte_rm(ineg);
231  sc->nb_ineq--;
232  }
233  }
234 
235  if (linear_number_of_exception_thrown-init_exception_thrown>=7)
236  fprintf(stderr, "[build_sc_nredund_1pass_ofl_ctrl] "
237  "too many exceptions in redundancy elimination... function stopped.\n");
238 
239  sc_rm(ps);
240  *psc = sc;
241 }
242 
244 Psysteme volatile *ps;
245 {
246 
247  if (!sc_rn_p(*ps) && !sc_empty_p(*ps))
248  {
249  Pbase b = base_copy(sc_base(*ps));
250  /* *ps = sc_sort_constraints_simplest_first(*ps, b); see version 1.16*/
252  if (*ps == SC_EMPTY)
253  *ps = sc_empty(b);
254  else {
255  base_rm(sc_base(*ps));
256  (*ps)->base = base_copy(b);
257  }
258  }
259 }
260 
261 
262 /* Computation of a new system sc from the system ps, where each
263  * constraint of the system ps is added to the new system sc,
264  * if the constraint is not redundant with the system sc previously
265  * computed.
266  *
267  * The set of equalities is copied as such and ignored by redundancy checks.
268  */
270 Psysteme volatile *ps;
271 {
273 }
274 
276 Psysteme volatile *psc;
277 int ofl_ctrl;
278 {
279  Psysteme ps = *psc;
280  static int francois_check = 0;
281  Pvecteur ip;
282  if(francois_check && !SC_UNDEFINED_P(ps))
283  ip = vect_make_dense(ps->base, 1LL, 0LL, 0LL, 100LL, 0LL);
284 
285  if (SC_UNDEFINED_P(ps) || sc_rn_p(ps) || sc_empty_p(ps))
286  return;
287 
288  *psc = sc_normalize(ps);
289  if(francois_check)
290  assert(sc_belongs_p(*psc, ip));
291 ifscdebug(5) {
292  fprintf(stderr, "after normalize: \n");
293  sc_default_dump(*psc);
294  }
295  assert(!SC_UNDEFINED_P(*psc));
296  build_sc_nredund_1pass_ofl_ctrl(psc, ofl_ctrl);
297  if(francois_check)
298  assert(sc_belongs_p(*psc, ip));
299 ifscdebug(5) {
300  fprintf(stderr, "after first nredund: \n");
301  sc_default_dump(*psc);
302  }
303  build_sc_nredund_1pass_ofl_ctrl(psc, ofl_ctrl);
304  if(francois_check)
305  assert(sc_belongs_p(*psc, ip));
306 }
307 
308 
310 Psysteme volatile *ps;
311 {
312 
313  if (!sc_rn_p(*ps) && !sc_empty_p(*ps))
314  {
315  Pbase b = base_copy(sc_base(*ps));
317  if (*ps == SC_EMPTY)
318  *ps = sc_empty(b);
319  else {
320  base_rm(sc_base(*ps));
321  (*ps)->base = base_copy(b);
322  }
323  }
324 }
325 
326 /* void build_sc_nredund_2pass
327  * Psysteme *psc;
328  *
329  */
330 
331 void build_sc_nredund_2pass(Psysteme volatile *psc)
332 {
333  if (SC_UNDEFINED_P(*psc))
334  return;
335  else
337 }
338 
339 
340 /* This function returns true if the constraint ineq can be eliminated
341  * from the system sc and false oterwise.
342  * It assumes that two constraints at least must be kept for constraining
343  * the variable "var_hr" in the system.
344  * the array "tab_info" contains the useful informations allowing to know
345  * the number of constraints constraining each variable as upper or
346  * lower bounds.
347 */
348 
350  (pc2,index_base,ineq,var_hr,tab_info,rank_max)
351 Pcontrainte pc2;
352 Pbase index_base;
353 Pcontrainte ineq;
354 Variable var_hr;
355 int tab_info[][4];
356 int *rank_max;
357 {
358  int rank_hr = rank_of_variable(index_base,var_hr);
359  Value coeff = vect_coeff(var_hr,ineq->vecteur);
360  int sign = value_sign(coeff);
361  bool result=false;
362  bool trouve=false;
363  *rank_max=rank_hr;
364 
365  if (tab_info[rank_hr][1]) {
366 
367  /* This condition is true if the variable is a loop index.
368  As the constraint constrains directly the variable,
369  this constraint must be kept if there is not enough
370  remainding constraints
371  */
372 
373  if (((sign >0) && (tab_info[rank_hr][2]>1))
374  || ((sign <0) && (tab_info[rank_hr][3]>1)))
375  result = true;
376  }
377  else {
378  register Pcontrainte pc;
379 
380  for (pc = pc2;
381  !CONTRAINTE_UNDEFINED_P(pc) && !trouve;
382  pc = pc->succ) {
383 
384  Value coeff2 = vect_coeff(var_hr,pc->vecteur);
385  int sign2 = value_sign(coeff2);
386  int right_rank, left_rank;
387  Value right_coeff, left_coeff;
388  Variable right_var,left_var;
389 
390  if (value_notzero_p(coeff2) && sign == -sign2) {
391  constraint_integer_combination(index_base,ineq,pc,rank_hr,
392  &right_var,&right_rank,&right_coeff,
393  &left_var,&left_rank,&left_coeff);
394  *rank_max = MAX(right_rank,left_rank);
395  if (((right_rank>left_rank)
396  && (((value_pos_p(right_coeff)) &&
397  (tab_info[right_rank][2] <=1))
398  || (value_neg_p(right_coeff) &&
399  (tab_info[right_rank][3] <=1))))
400  || ((right_rank<left_rank)
401  && ((value_pos_p(left_coeff) &&
402  (tab_info[left_rank][2]<=1))
403  || (value_neg_p(left_coeff) &&
404  (tab_info[left_rank][3] <=1)))))
405  trouve = true;
406  }
407  }
408  if (!trouve) result = true;
409  }
410  return result;
411 
412 }
413 
414 
415 /* Computation of a new system sc from the system ps, where each
416  * constraint of the system ps is added to the new system sc,
417  * if the constraint is not redundant with the system sc previously
418  * computed.
419  *
420  * The difference with the function build_sc_nredund is that at least
421  * 2 constraints are kept for each variable: one for the upper bound
422  * and the other for the lower bound.
423  *
424  * The rational set defined by ps may be enlarged by this procedure
425  * because an integer constraint negation is used.
426  *
427  * Modifs:
428  * - change _dup to _copy.
429  * - the parameters of contrainte_dup, _copy, _reverse are not changed like base_dup, so it's ok.
430  */
431 
433  volatile Psysteme ps,
434  Pbase index_base,
435  int tab_info[][4],
436  int loop_level,
437  int dim_h __attribute__ ((unused)),
438  int n __attribute__ ((unused)))
439 {
440 
441  volatile Psysteme sc = sc_new();
442  Pcontrainte eq;
443  // Automatic variables read in a CATCH block need to be declared volatile as
444  // specified by the documentation
445  volatile Pcontrainte ineq, pred;
446  int rank_hr,rank_max = 0;
447  Variable var_hr;
448  Value coeff;
449  volatile int sign;
450 
451  if (SC_UNDEFINED_P(ps) || SC_EMPTY_P(ps) || sc_empty_p(ps) )
452  return ps;
453  sc->base = base_copy(ps->base);
454  sc->dimension = ps->dimension;
455 
456  for (eq = ps->egalites;
459  sc_add_eg(sc,pc);
460  }
461 
463 
465  sc->nb_ineq +=1;
466  for (pred = ps->inegalites,ineq = (ps->inegalites)->succ;
467  !CONTRAINTE_UNDEFINED_P(ineq); ineq=ineq->succ) {
468 
469  Pcontrainte volatile ineg = contrainte_copy(ineq);
470  sc_add_inegalite(sc,ineg);
471 
472  // search the characteristics of the variable of higher rank in
473  // the constraint ineq
474  if (( rank_hr= search_higher_rank(ineq->vecteur,index_base)) >0) {
475  var_hr=variable_of_rank(index_base,rank_hr);
476  coeff=vect_coeff(var_hr,ineq->vecteur);
477  sign = value_sign(coeff);
478 
480  (ps->inegalites,index_base,ineq, var_hr,tab_info, &rank_max)
481  && (rank_max >= loop_level)) {
482 
483  /* this condition is true if the constraint can be
484  eliminated from the system, that means if this is
485  not the last constraint on the variable or if all
486  the constraints on this variable can be
487  eliminated (the rank of variable is greater the
488  number of loops) */
489 
490  contrainte_reverse(ineg);
492  pred = pred->succ;
493  contrainte_reverse(ineg);
494  }
495  TRY {
496  // test de sc_faisabilite avec la nouvelle inegalite
498 
499  // si le systeme est non faisable ==>
500  // inegalite redondante ==> elimination de cette inegalite
501  sc->inegalites = sc->inegalites->succ;
502  ineg->succ = NULL;
503  contrainte_rm(ineg);
504  sc->nb_ineq -=1;
505  pred->succ = ineq->succ;
506 
507  // mise a jour du nombre de contraintes restantes
508  // contraingnant la variable de rang rank_hr
509  if (sign >0) tab_info[rank_hr][2] --;
510  else if (sign <0) tab_info[rank_hr][3]--;
511  }
512  else {
513  pred = pred->succ;
514  contrainte_reverse(ineg);
515  }
517  }
518  }
519  }
520  }
521  }
522  return sc;
523 }
524 
525 /* This function returns true if the constraint C (resulting of the
526  * combination of the two constraints ineq1 and ineq2) is redundant
527  * for the system sc, and false otherwise.
528  *
529  * Assume that ineq1 = coeff1 (positive) * var + E1 <=0
530  * ineq2 = coeff2 (negative) * var +E2 <=0
531  * C = coeff1 * E2 - coeff2 * E1 - coeff1*coeff2-coeff1 <=0
532  *
533 */
534 
535 bool bound_redund_with_sc_p(sc,ineq1,ineq2,var)
536 Psysteme sc;
537 Pcontrainte ineq1,ineq2;
538 Variable var;
539 {
540 
541  volatile Pcontrainte posit, negat;
543  bool result = false;
544 
545  if (!CONTRAINTE_UNDEFINED_P(ineq1) && !CONTRAINTE_UNDEFINED_P(ineq2)) {
546 
547  if (value_pos_p(vect_coeff(var,ineq1->vecteur))) {
548  posit = contrainte_copy(ineq1);
549  negat = contrainte_copy(ineq2);
550  }
551  else {
552  posit = contrainte_copy(ineq2);
553  negat = contrainte_copy(ineq1);
554  }
555 
557  result = false;
558  TRY {
559  ineg = sc_integer_inequalities_combination_ofl_ctrl
560  (sc, posit, negat, var, &result, FWD_OFL_CTRL);
561  contrainte_rm(ineg);
563  }
564 
565  contrainte_rm(posit);
566  contrainte_rm(negat);
567  }
568  return result;
569 }
float a2sf[2] __attribute__((aligned(16)))
USER generates a user error (i.e., non fatal) by printing the given MSG according to the FMT.
Definition: 3dnow.h:3
#define CATCH(what)
@ overflow_error
#define UNCATCH(what)
#define TRY
#define value_pos_p(val)
#define value_sign(v)
trian operators on values
#define value_notzero_p(val)
int Value
#define value_neg_p(val)
int linear_number_of_exception_thrown
int rank_of_variable(Pbase base, Variable var)
this function returns the rank of the variable var in the base 0 encodes TCST, but I do not know why,...
Definition: base.c:497
int search_higher_rank(Pvecteur vect, Pbase base)
int search_higher_rank(): this fonction returns the rank of the variable of higher rank in the vecteu...
Definition: base.c:541
#define CONTRAINTE_UNDEFINED_P(c)
#define CONTRAINTE_NULLE_P(c)
contrainte nulle (non contrainte 0 == 0 ou 0 <= 0)
#define CONTRAINTE_UNDEFINED
#define contrainte_rm(c)
the standard xxx_rm does not return a value
Pcontrainte contraintes_copy(Pcontrainte c_in)
Pcontrainte contraintes_copy(Pcontrainte c_in) a list of constraints is copied with the same order In...
Definition: alloc.c:270
Pcontrainte contrainte_free(Pcontrainte c)
Pcontrainte contrainte_free(Pcontrainte c): liberation de l'espace memoire alloue a la contrainte c a...
Definition: alloc.c:184
Pcontrainte contrainte_copy(Pcontrainte c_in)
Have a look at contrainte_dup and contraintes_dup which reverse the order of the list This copy versi...
Definition: alloc.c:254
void contrainte_reverse(Pcontrainte)
void contrainte_reverse(Pcontrainte eq): changement de signe d'une contrainte, i.e.
Definition: unaires.c:67
void contrainte_chg_sgn(Pcontrainte)
void contrainte_chg_sgn(Pcontrainte eq): changement de signe d'une contrainte, i.e.
Definition: unaires.c:56
#define assert(ex)
Definition: newgen_assert.h:41
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg)
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg): allocation et initialisation d'un systeme d'equ...
Definition: sc.c:78
bool sc_rn_p(Psysteme sc)
bool sc_rn_p(Psysteme sc): check if the set associated to sc is the whole space, rn
Definition: sc_alloc.c:369
Psysteme sc_empty(Pbase b)
Psysteme sc_empty(Pbase b): build a Psysteme with one unfeasible constraint to define the empty subsp...
Definition: sc_alloc.c:319
void sc_creer_base(Psysteme ps)
void sc_creer_base(Psysteme ps): initialisation des parametres dimension et base d'un systeme lineair...
Definition: sc_alloc.c:129
void sc_rm(Psysteme ps)
void sc_rm(Psysteme ps): liberation de l'espace memoire occupe par le systeme de contraintes ps;
Definition: sc_alloc.c:277
Psysteme sc_new(void)
Psysteme sc_new(): alloue un systeme vide, initialise tous les champs avec des valeurs nulles,...
Definition: sc_alloc.c:55
Psysteme sc_init_with_sc(Psysteme sc)
This function returns a new empty system which has been initialized with the same dimension and base ...
Definition: sc_alloc.c:303
bool sc_empty_p(Psysteme sc)
bool sc_empty_p(Psysteme sc): check if the set associated to sc is the constant sc_empty or not.
Definition: sc_alloc.c:350
void sc_add_inegalite(Psysteme p, Pcontrainte i)
void sc_add_inegalite(Psysteme p, Pcontrainte i): macro ajoutant une inegalite i a un systeme p; la b...
Definition: sc_alloc.c:406
Psysteme sc_copy(Psysteme ps)
Psysteme sc_copy(Psysteme ps): duplication d'un systeme (allocation et copie complete des champs sans...
Definition: sc_alloc.c:230
bool sc_belongs_p(Psysteme ps, Pvecteur v)
package sc
Definition: sc_belong.c:51
void build_sc_nredund_1pass(Psysteme volatile *ps)
Computation of a new system sc from the system ps, where each constraint of the system ps is added to...
static bool sc_elim_triang_integer_redund_constraint_p(Pcontrainte pc2, Pbase index_base, Pcontrainte ineq, Variable var_hr, tab_info, int *rank_max)
This function returns true if the constraint ineq can be eliminated from the system sc and false oter...
void build_sc_nredund_2pass_ofl_ctrl(Psysteme volatile *psc, int ofl_ctrl)
bool ineq_redund_with_sc_p(Psysteme sc, Pcontrainte ineq)
This function returns true if the inequation ineq is redundant for the system ps and false otherwise.
void sc_safe_build_sc_nredund_2pass(Psysteme volatile *ps)
void build_sc_nredund_2pass(Psysteme volatile *psc)
void build_sc_nredund_2pass Psysteme *psc;
Psysteme build_integer_sc_nredund(volatile Psysteme ps, Pbase index_base, int tab_info[][4], int loop_level, int dim_h __attribute__((unused)), int n __attribute__((unused)))
Computation of a new system sc from the system ps, where each constraint of the system ps is added to...
bool bound_redund_with_sc_p(Psysteme sc, Pcontrainte ineq1, Pcontrainte ineq2, Variable var)
This function returns true if the constraint C (resulting of the combination of the two constraints i...
Psysteme extract_nredund_subsystem(Psysteme s1, Psysteme s2)
Psysteme extract_nredund_subsystem(s1, s2) Psysteme s1, s2;.
bool eq_redund_with_sc_p(Psysteme sc, Pcontrainte eq)
bool eq_redund_with_sc_p(sc, eq) Psysteme sc; Pcontrainte eq;
void sc_safe_build_sc_nredund_1pass(Psysteme volatile *ps)
void build_sc_nredund_1pass_ofl_ctrl(Psysteme volatile *psc, int ofl_ctrl)
Psysteme build_sc_nredund_1pass_ofl_ctrl(Psysteme ps, int ofl_ctrl) input : a system in which redunda...
bool sc_rational_feasibility_ofl_ctrl(Psysteme sc, int ofl_ctrl, bool ofl_res)
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
Variable variable_of_rank()
void constraint_integer_combination(Pbase index_base, Pcontrainte ineq1, Pcontrainte ineq2, int rank, Variable *right_var, int *right_rank, Value *right_coeff, Variable *left_var, int *left_rank, Value *left_coeff)
This function computes the coefficients of the constraint resulting from the elimination of the varia...
void sc_default_dump(Psysteme sc)
void sc_default_dump(Psysteme sc): dump to stderr
Definition: sc_io.c:170
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
Psysteme sc_normalize(Psysteme ps)
Psysteme sc_normalize(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires ...
s1
Definition: set.c:247
#define MAX(x, y)
Definition: string.c:110
Pvecteur vecteur
struct Scontrainte * succ
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70
Pbase base
Definition: sc-local.h:75
int dimension
Definition: sc-local.h:74
int nb_ineq
Definition: sc-local.h:73
int nb_eq
Definition: sc-local.h:72
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
#define base_rm(b)
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60
#define FWD_OFL_CTRL
#define BASE_NULLE
MACROS SUR LES BASES.
#define OFL_CTRL
I do thing that overflows are managed in a very poor manner.
Pbase base_dup(Pbase b)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
Definition: alloc.c:268
Pvecteur vect_make_dense(Pbase b, Value val,...)
Allocate a new vector v whose coefficient are given by the list of values ad whose dimension is given...
Definition: alloc.c:198
Pbase base_copy(Pbase b)
Direct duplication.
Definition: alloc.c:300
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228