PIPS
sc_elim_redund.c File Reference
#include <stdio.h>
#include <string.h>
#include "arithmetique.h"
#include "boolean.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
+ Include dependency graph for sc_elim_redund.c:

Go to the source code of this file.

Functions

Psysteme sc_inequations_elim_redund (Psysteme ps)
 package sc More...
 
Psysteme sc_elim_redund (Psysteme ps)
 Psysteme sc_elim_redund(Psysteme ps): elimination des contraintes lineaires redondantes dans le systeme par test de faisabilite. More...
 
Psysteme sc_safe_elim_redund (Psysteme ps)
 Same as above, but the basis is preserved and sc_empty is returned is the system is not feasible. More...
 

Function Documentation

◆ sc_elim_redund()

Psysteme sc_elim_redund ( Psysteme  ps)

Psysteme sc_elim_redund(Psysteme ps): elimination des contraintes lineaires redondantes dans le systeme par test de faisabilite.

Les tests de faisabilite sont appliques sur tout le systeme. L'elimination des redondances est donc totale.

resultat retourne par la fonction :

Psysteme : Le systeme initial est modifie. Il est egal a NULL si le systeme initial est non faisable.

Les parametres de la fonction :

Psysteme ps : systeme lineaire

Definition at line 100 of file sc_elim_redund.c.

101 {
102  Pcontrainte eq;
103 
104  for (eq = ps->egalites; eq != NULL; eq=eq->succ)
106 
107  ps = sc_kill_db_eg(ps);
108 
109  if (SC_UNDEFINED_P(ps))
110  return ps;
111 
113  {
114  sc_rm(ps);
115  return NULL;
116  }
117 
119  return ps;
120 }
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_kill_db_eg(Psysteme ps)
Psysteme sc_kill_db_eg(Psysteme ps): elimination des egalites et des inegalites identiques ou inutile...
Definition: sc_elim_eq.c:133
Psysteme sc_inequations_elim_redund(Psysteme ps)
package sc
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
Pvecteur vecteur
struct Scontrainte * succ
Pcontrainte egalites
Definition: sc-local.h:70
#define OFL_CTRL
I do thing that overflows are managed in a very poor manner.
void vect_normalize(Pvecteur v)
void vect_normalize(Pvecteur v): division de tous les coefficients de v par leur pgcd; "normalisation...
Definition: unaires.c:59

References Ssysteme::egalites, eq, OFL_CTRL, sc_inequations_elim_redund(), sc_kill_db_eg(), sc_rational_feasibility_ofl_ctrl(), sc_rm(), Scontrainte::succ, vect_normalize(), and Scontrainte::vecteur.

Referenced by adg_update_dfg(), sc_build_triang_elim_redund(), sc_safe_elim_redund(), simplify_minmax_contrainte(), and transformer_pattern_fix_point().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sc_inequations_elim_redund()

Psysteme sc_inequations_elim_redund ( Psysteme  ps)

package sc

Psysteme sc_inequations_elim_redund(Psysteme ps):

Elimination des contraintes lineaires redondantes dans le systeme par test de faisabilite. Le polyedre rationnel definit par ps peut etre augmente par cette procedure qui utilise contrainte_reverse() et un test de faisabilite: E(ps) peut etre strictement inclu dans E(ps'). Les sommets rationnels du systeme generateur de ps ne sont pas respectes.

Remarque: il ne faut pas appliquer de normalisation du systeme apres inversion de la contrainte et avant le test de faisabilite en RATIONELS, car l'elimination des redondances n'est alors pas necessairement correcte en entiers.

resultat retourne par la fonction :

Psysteme : Le systeme initial est modifie. Il est egal a NULL si le systeme initial est non faisable.

Les parametres de la fonction :

Psysteme ps : systeme lineaire

Definition at line 63 of file sc_elim_redund.c.

64 {
65  Pcontrainte eq, eq1;
66 
67  // hmmm... in order to prevent overflows and keep systems simple,
68  // there may be some strategy to try to remove bad constraints first?
69 
70  // hmmm... why choosing "eq" to scan inequalities?
71  for (eq = ps->inegalites;eq != NULL; eq = eq1) {
72  eq1 = eq->succ;
76  else {
79  }
80  }
81  return ps;
82 }
void eq_set_vect_nul(Pcontrainte)
void_eq_set_vect_nul(Pcontrainte c): transformation d'une contrainte en une contrainte triviale 0 == ...
Definition: unaires.c:84
void contrainte_reverse(Pcontrainte)
void contrainte_reverse(Pcontrainte eq): changement de signe d'une contrainte, i.e.
Definition: unaires.c:67
void sc_rm_empty_constraints(Psysteme ps, bool process_equalities)
package sc: elimination de redondance simple
Definition: sc_elim_eq.c:56
Pcontrainte inegalites
Definition: sc-local.h:71

References contrainte_reverse(), eq, eq_set_vect_nul(), Ssysteme::inegalites, OFL_CTRL, sc_rational_feasibility_ofl_ctrl(), sc_rm_empty_constraints(), and Scontrainte::succ.

Referenced by sc_elim_redund().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sc_safe_elim_redund()

Psysteme sc_safe_elim_redund ( Psysteme  ps)

Same as above, but the basis is preserved and sc_empty is returned is the system is not feasible.

ps is assumed to be a consistent system of constraints.

if (SC_UNDEFINED_P(ps)) return(ps);

Definition at line 125 of file sc_elim_redund.c.

126 {
127  Pbase b = base_copy(sc_base(ps));
128 
129  /* if (SC_UNDEFINED_P(ps)) return(ps); */
130 
131  ps = sc_elim_redund(ps);
132 
133  if(ps==NULL) {
134  ps = sc_empty(b);
135  }
136  else {
137  base_rm(b);
138  }
139 
140  return ps;
141 }
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
Psysteme sc_elim_redund(Psysteme ps)
Psysteme sc_elim_redund(Psysteme ps): elimination des contraintes lineaires redondantes dans le syste...
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
#define base_rm(b)
Pbase base_copy(Pbase b)
Direct duplication.
Definition: alloc.c:300

References base_copy(), base_rm, sc_elim_redund(), and sc_empty().

Referenced by region_to_statement(), and transformer_normalize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: