PIPS
adg_prettyprint.c
Go to the documentation of this file.
1 /*
2 
3  $Id: adg_prettyprint.c 23065 2016-03-02 09:05:50Z coelho $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of PIPS.
8 
9  PIPS is free software: you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  PIPS 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 General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 #ifdef HAVE_CONFIG_H
25  #include "pips_config.h"
26 #endif
27 /* Name : adg_prettyprint.c
28  * Package : array_dfg
29  * Author : Arnauld LESERVOT and Alexis PLATONOFF
30  * Date : 93/06/27
31  * Modified :
32  * Documents: "Implementation du Data Flow Graph dans PIPS"
33  * Comments :
34  */
35 
36 #define GRAPH_IS_DG
37 #include "local.h"
38 
39 #define IS_INEG 0
40 #define IS_EG 1
41 #define IS_VEC 2
42 
43 /*============================================================================*/
44 /* void fprint_dfg(FILE *fp, graph obj): prints in the file "fp" the Data
45  * Flow Graph "obj".
46  */
47 void fprint_dfg(fp, obj)
48 FILE *fp;
49 graph obj;
50 {
51  list nodes_l, su_l, df_l;
53  int source_stmt, sink_stmt, source_nb, sink_nb;
54 
55  fprintf(fp,"\n Array Data Flow Graph:\n");
56  fprintf(fp,"=======================\n");
57 
58  for(nodes_l = graph_vertices(obj); nodes_l != NIL; nodes_l = CDR(nodes_l))
59  {
60  vertex crt_v = VERTEX(CAR(nodes_l));
61 
64 
65  if(source_stmt == ENTRY_ORDER) {
66  source_nb = 0;
67  fprintf(fp,"\nENTRY:\n******\n");
68  }
69  else {
70  source_nb = source_stmt-BASE_NODE_NUMBER;
71  fprintf(fp,"\nINS_%d:\n********\n", source_nb);
72  }
73 
75  fprintf(fp, " Execution Domain for %d:\n", source_nb);
76  fprint_pred(fp, exec_dom);
77  }
78  else fprintf(fp, " Execution Domain for %d: Nil\n", source_nb);
79  fprintf(fp, "\n");
80 
81  su_l = vertex_successors(crt_v);
82 
83  for( ; su_l != NIL; su_l = CDR(su_l))
84  {
85  successor su = SUCCESSOR(CAR(su_l));
86  vertex su_ver = successor_vertex(su);
87 
88  sink_stmt = vertex_int_stmt(su_ver);
89  sink_nb = sink_stmt-BASE_NODE_NUMBER;
91 
92  for( ; df_l != NIL; df_l = CDR(df_l))
93  fprint_dataflow(fp, sink_nb, DATAFLOW(CAR(df_l)));
94 
95  /* AP, Nov 28th 1995: Ronan asked me to add the execution domain of
96  the destination. Only done if it is not equal to the source. */
97  if(sink_nb != source_nb) {
100  fprintf(fp, " Execution Domain for %d:\n", sink_nb);
101  fprint_pred(fp, exec_dom);
102  }
103  }
104 
105  fprintf(fp, "\n");
106  }
107  }
108 }
109 
110 #define ADFG_EXT ".adfg_file"
111 
112 /*============================================================================*/
114 const char* module_name;
115 {
116  char *localfilename;
117  FILE *fd;
118  char *filename;
119  graph the_dfg;
120 
121  debug_on( "PRINT_ARRAY_DFG__DEBUG_LEVEL" );
122 
123  if (get_debug_level() > 1)
124  user_log("\n\n *** PRINTING ARRAY DFG for %s\n", module_name);
125 
126  the_dfg = (graph) db_get_memory_resource(DBR_ADFG, module_name, true);
127 
128  localfilename = strdup(concatenate(module_name, ADFG_EXT, NULL));
130  "/", localfilename, NULL));
131 
132  fd = safe_fopen(filename, "w");
133  fprint_dfg(fd, the_dfg);
134  safe_fclose(fd, filename);
135 
136  DB_PUT_FILE_RESOURCE(DBR_ADFG_FILE, strdup(module_name), localfilename);
137 
138  free(filename);
139 
140  debug_off();
141 
142  return(true);
143 
144 }
145 
146 /*============================================================================*/
147 /* void imprime_special_quast(fp, qu) AL 04/11/93
148  * Input : An output file fp and a quast qu.
149  * Output : Print in fp quast qu with real number of leal_labels.
150  */
152 FILE *fp;
153 quast qu;
154 {
155  Psysteme paux = NULL;
156  predicate pred_aux = predicate_undefined;
157  conditional cond_aux = NULL;
158  quast_value quv = NULL;
159  quast_leaf qul = NULL;
160  leaf_label ll = NULL;
161  list sol = NULL;
162 
163  if( (qu == quast_undefined) || (qu == NULL) ) {
164  fprintf(fp, " quast_vide ");
165  return;
166  }
167  quv = quast_quast_value(qu);
168  if( quv == quast_value_undefined ) {
169  fprintf(fp, " quast_value_undefined\n");
170  return;
171  }
172  quv = quast_quast_value(qu);
173 
174  switch( quast_value_tag(quv)) {
176  cond_aux = quast_value_conditional(quv);
177  pred_aux = conditional_predicate(cond_aux);
178  if (pred_aux != predicate_undefined)
179  paux = (Psysteme) predicate_system(pred_aux);
180 
181  fprintf(fp, "\nIF\n");
182  fprint_psysteme(fp, paux);
183 
184  fprintf(fp, "\nTHEN\n");
186  fprintf(fp, "\nELSE\n");
188  fprintf(fp, "\nFI\n");
189  break;
190 
192  qul = quast_value_quast_leaf( quv );
193  if (qul == quast_leaf_undefined) {
194  fprintf(fp,"quast_leafundefined\n");
195  break;
196  }
197  sol = quast_leaf_solution( qul );
198  ll = quast_leaf_leaf_label( qul );
199  if (ll != leaf_label_undefined) {
200  fprintf(fp, "Leaf label number : %d ", leaf_label_statement(ll) );
201  fprintf(fp, "Depth : %d\n", leaf_label_depth(ll) );
202  }
203  fprintf(fp, "Solutions : ");
204  while (sol != NIL) {
205  fprintf(fp, " %s, ",
207  sol = CDR(sol);
208  }
209  fprintf(fp, "\n");
210  break;
211  }
212 }
213 
214 /*============================================================================*/
215 /* static void adg_contrainte_fprint(FILE *fp, Pcontrainte c, int is_what,
216  * char *(*variable_name)()):
217  *
218  * prints in the file "fp" the constraint "c", of type equality, inequality or
219  * vector according to the value of the integer argument "is_what", using the
220  * function "variable_name" for the name of the variables.
221  *
222  * The function contrainte_fprint() exists, it is defined in contrainte.c (C3
223  * library). We redefine this function because:
224  *
225  * 1. we want the constant term in the left hand side
226  * 2. we want a third type of contrainte (vector) which does not print the
227  * inequality or equality symbol.
228  * 3. we do not want a line feed at the end of the constraint
229  *
230  * We consider that CONTRAINTE_UNDEFINED => CONTRAINTE_NULLE
231  *
232  * Results for a constraint containing the following Pvecteur (2*I) (-J) (-4):
233  *
234  * equality: 2 * I - J - 4 = 0
235  * inequality: 2 * I - J - 4 <= 0
236  * vector: 2 * I - J - 4
237  *
238  */
239 static void adg_contrainte_fprint(fp,c,is_what,variable_name)
240 FILE *fp;
241 Pcontrainte c;
242 int is_what;
243 char * (*variable_name)();
244 {
245  Pvecteur v = NULL;
246  short int debut = 1;
247  Value constante = VALUE_ZERO;
248 
250  else v = VECTEUR_NUL;
251 
252  if(!vect_check(v)) pips_internal_error("Non coherent vector");
253 
254  while (!VECTEUR_NUL_P(v)) {
255  if (v->var!=TCST) {
256  char signe = (char) NULL;
257  Value coeff = v->val;
258 
259  if (value_notzero_p(coeff)) {
260  if (value_pos_p(coeff)) signe = (debut) ? ' ' : '+';
261  else { signe = '-'; value_oppose(coeff); };
262  debut = 0;
263  if (value_one_p(coeff))
264  fprintf(fp,"%c %s ", signe, variable_name(v->var));
265  else
266  { fprintf(fp,"%c ", signe);
267  fprint_Value(fp, coeff);
268  fprintf(fp, " %s ", variable_name(v->var)); }
269  }
270  }
271  /* on admet plusieurs occurences du terme constant!?! */
272  else value_addto(constante, v->val);
273 
274  v = v->succ;
275  }
276 
277  /* sign */
278  if (value_pos_p(constante))
279  fprintf(fp, "+ ");
280  else if (value_neg_p(constante))
281  value_oppose(constante), fprintf(fp, "- ");
282 
283  /* value */
284  if (value_notzero_p(constante))
285  fprint_Value(fp, constante), fprintf(fp, " ");
286 
287  /* trail */
288  if (is_what == IS_INEG)
289  fprintf (fp,"<= 0 ,");
290  else if(is_what == IS_EG)
291  fprintf (fp,"== 0 ,");
292  else /* IS_VEC */
293  fprintf (fp," ,");
294 }
295 
296 /*============================================================================*/
297 /* void adg_inegalite_fprint(FILE *fp, Pcontraint ineg,
298  * char *(*variable_name)()):
299  * Redefinition of inegalite_fprint(). See adg_contrainte_fprint() for details.
300  */
302 FILE *fp;
303 Pcontrainte ineg;
304 char * (*variable_name)();
306 
307 /*============================================================================*/
308 /* void adg_egalite_fprint(FILE *fp, Pcontraint eg, char *(*variable_name)()):
309  * Redefinition of egalite_fprint(). See adg_contrainte_fprint() for details.
310  */
312 FILE *fp;
313 Pcontrainte eg;
314 char * (*variable_name)();
315 {
317 }
318 
319 /*============================================================================*/
320 /* void adg_vecteur_fprint(FILE *fp, Pcontraint vec char *(*variable_name)()):
321  * See adg_contrainte_fprint() for details.
322  */
324 FILE *fp;
325 Pcontrainte vec;
326 char * (*variable_name)();
328 
329 /*============================================================================*/
330 /* void adg_fprint_dataflow(FILE *fp, int sink, dataflow df): prints in
331  * the file "fp" the dataflow "df" with a sink statement "sink".
332  */
333 void adg_fprint_dataflow(fp, sink, df)
334 FILE *fp;
335 int sink;
336 dataflow df;
337 {
342 
343  fprintf(fp,"\t -> ins_%d:%s [", sink, words_to_string(words_reference(ref)));
345  fprintf(fp,"]\n");
346 
347  fprintf(fp,"\t\t gov pred ");
349  else fprintf(fp, "{nil} \n");
350 
351  if(comm == communication_undefined) {/*fprintf(fp, "\t\t Communication general \n");*/}
352  else {
353  predicate pred = NULL;
354 
355  pred = communication_broadcast(comm);
356  if(pred != predicate_undefined){
357  fprintf(fp,"\t\t Vecteur(s) de diffusion :");
359  }
360 
361  pred = communication_reduction(comm);
362  if(pred != predicate_undefined){
363  fprintf(fp,"\t\t Vecteur(s) de reduction :");
365  }
366 
367  pred = communication_shift(comm);
368  if(pred != predicate_undefined){
369  fprintf(fp,"\t\t Vecteur(s) de shift :");
371  }
372  }
373 }
374 
375 /*============================================================================*/
376 /* void adg_fprint_dfg(FILE *fp, graph obj): prints in the file "fp" the Data
377  * Flow Graph "obj".
378  */
379 void adg_fprint_dfg(fp, obj)
380 FILE *fp;
381 graph obj;
382 {
383  list nodes_l = NULL, su_l = NULL, df_l = NULL;
384  predicate exec_dom = NULL;
385  int source_stmt = (int) NULL, sink_stmt = (int) NULL;
386 
387  fprintf(fp,"\n Array Data Flow Graph:\n");
388  fprintf(fp,"=======================\n");
389 
390  for(nodes_l = graph_vertices(obj); nodes_l != NIL; nodes_l = CDR(nodes_l)){
391  vertex crt_v = VERTEX(CAR(nodes_l));
392 
393  source_stmt = vertex_int_stmt(crt_v);
395 
396  fprintf(fp,"ins_%d: ", source_stmt);
398  else fprintf(fp, "{nil} \n");
399 
400  su_l = vertex_successors(crt_v);
401 
402  for( ; su_l != NIL; su_l = CDR(su_l)){
403  successor su = SUCCESSOR(CAR(su_l));
404 
407 
408  for( ; df_l != NIL; df_l = CDR(df_l))
410  }
411  }
412 }
413 
414 
415 /*============================================================================*/
416 /* void adg_fprint_list_of_exp(FILE *fp, list exp_l): prints in the file "fp"
417  * the list of expression "exp_l". We separate the expressions with a colon
418  * (","). We do not end the print with a line feed.
419  */
420 void adg_fprint_list_of_exp(fp, exp_l)
421 FILE *fp;
422 list exp_l;
423 {
424  list aux_l = NULL;
425  expression exp = NULL;
426 
427  for(aux_l = exp_l; aux_l != NIL; aux_l = CDR(aux_l)) {
428  exp = EXPRESSION(CAR(aux_l));
430  if(CDR(aux_l) != NIL) fprintf(fp,",");
431  }
432 }
433 
434 /*============================================================================*/
435 /* void adg_fprint_pred(FILE *fp, predicate pred): prints in the file "fp" the
436  * predicate "pred".
437  */
438 void adg_fprint_pred(fp, pred)
439 FILE *fp;
440 predicate pred;
441 {
442  Psysteme ps = NULL;
443 
444  debug(9,"adg_fprint_pred", "begin\n");
445  if ((pred != predicate_undefined) && (pred != (predicate) NIL)) {
446  ps = (Psysteme) predicate_system(pred);
447  adg_fprint_psysteme(fp, ps);
448  }
449  else fprintf(fp, "{nil} \n");
450  debug(9,"adg_fprint_pred", "end\n");
451 }
452 
453 /*============================================================================*/
454 /* void adg_fprint_psysteme(FILE *fp, Psysteme ps): prints in the file "fp" the
455  * Psysteme "ps". Each constraint is printed either with adg_inegalite_fprint()
456  * or adg_egalite_fprint(), both redefined above. See adg_contrainte_fprint()
457  * for details.
458  */
460 FILE *fp;
461 Psysteme ps;
462 {
463  Pcontrainte peq;
464 
465  if (ps != NULL) {
466  fprintf(fp,"{ ");
467  for (peq = ps->inegalites; peq!=NULL;
468  adg_inegalite_fprint(fp,peq,entity_local_name),peq=peq->succ);
469  for (peq = ps->egalites; peq!=NULL;
470  adg_egalite_fprint(fp,peq,entity_local_name),peq=peq->succ);
471  fprintf(fp," } \n");
472  }
473  else fprintf(fp,"(nil)\n");
474 }
475 
476 /*============================================================================*/
477 /* void adg_fprint_sc_pvecteur(FILE *fp, Psysteme ps): prints in the file "fp"
478  * the Psysteme "ps" as a list of vectors. Each constraint is printed with
479  * adg_vecteur_fprint() defined above. See adg_contrainte_fprint() for details.
480  */
482 FILE *fp;
483 Psysteme ps;
484 {
485  Pcontrainte peq = NULL;
486 
487  if (ps != NULL) {
488  fprintf(fp,"{ ");
489  for (peq = ps->inegalites; peq!=NULL;
490  adg_vecteur_fprint(fp,peq,entity_local_name),peq=peq->succ);
491  for (peq = ps->egalites; peq!=NULL;
492  adg_vecteur_fprint(fp,peq,entity_local_name),peq=peq->succ);
493  fprintf(fp," } \n");
494  }
495  else fprintf(fp,"(nil)\n");
496 }
497 
498 
499 /*============================================================================*/
500 /* void adg_fprint_predicate_list( file* fp, list sc_l ) AL 15/07/93
501  * Input : pointer on file fp, list of psysteme sc_l
502  * Output : A prettyprint of psystemes.
503  */
505 FILE* fp;
506 list sc_l;
507 {
508  predicate pred = NULL;
509 
510  debug(9, "adg_fprint_predicate_list", "begin\n");
511  for(; !ENDP( sc_l ); POP( sc_l )) {
512  pred = PREDICATE(CAR( sc_l ));
514  }
515  debug(9, "adg_fprint_predicate_list", "end\n");
516 }
517 
518 /*============================================================================*/
void user_log(const char *format,...)
Definition: message.c:234
bool print_array_dfg(char *module_name) const
===========================================================================
void adg_fprint_sc_pvecteur(FILE *fp, Psysteme ps)
===========================================================================
void adg_fprint_psysteme(FILE *fp, Psysteme ps)
===========================================================================
static void adg_contrainte_fprint(FILE *fp, Pcontrainte c, int is_what, char *(*variable_name)())
===========================================================================
void adg_vecteur_fprint(FILE *fp, Pcontrainte vec, char *(*variable_name)())
===========================================================================
void adg_fprint_pred(FILE *fp, predicate pred)
===========================================================================
#define ADFG_EXT
void fprint_dfg(FILE *fp, graph obj)
===========================================================================
void adg_fprint_list_of_exp(FILE *fp, list exp_l)
===========================================================================
void adg_fprint_dataflow(FILE *fp, int sink, dataflow df)
===========================================================================
void adg_inegalite_fprint(FILE *fp, Pcontrainte ineg, char *(*variable_name)())
===========================================================================
void adg_fprint_dfg(FILE *fp, graph obj)
===========================================================================
#define IS_EG
void adg_fprint_predicate_list(FILE *fp, list sc_l)
===========================================================================
#define IS_INEG
#define IS_VEC
void imprime_special_quast(FILE *fp, quast qu)
===========================================================================
void adg_egalite_fprint(FILE *fp, Pcontrainte eg, char *(*variable_name)())
===========================================================================
static int sink_stmt
Current source node.
Definition: adg_read_paf.c:160
static list trans_l
Current list of nodes.
Definition: adg_read_paf.c:168
static int source_stmt
Current sink statement.
Definition: adg_read_paf.c:161
static predicate exec_dom
Current governing predicate.
Definition: adg_read_paf.c:166
static reference ref
Current stmt (an integer)
Definition: adg_read_paf.c:163
static predicate gov_pred
Current expression.
Definition: adg_read_paf.c:165
#define value_pos_p(val)
#define VALUE_ZERO
#define value_oppose(ref)
#define value_notzero_p(val)
void const char const char const int
#define value_one_p(val)
int Value
#define value_addto(ref, val)
#define value_neg_p(val)
void fprint_Value(FILE *, Value)
Definition: io.c:42
#define ENTRY_ORDER
#define CONTRAINTE_UNDEFINED_P(c)
#define contrainte_vecteur(c)
passage au champ vecteur d'une contrainte "a la Newgen"
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
FILE * safe_fopen(const char *filename, const char *what)
Definition: file.c:67
int safe_fclose(FILE *stream, const char *filename)
Definition: file.c:77
void free(void *)
#define successor_vertex(x)
Definition: graph.h:118
#define successor_arc_label(x)
Definition: graph.h:116
struct _newgen_struct_graph_ * graph
Definition: graph.h:31
#define vertex_vertex_label(x)
Definition: graph.h:152
#define vertex_successors(x)
Definition: graph.h:154
#define SUCCESSOR(x)
SUCCESSOR.
Definition: graph.h:86
#define graph_vertices(x)
Definition: graph.h:82
#define VERTEX(x)
VERTEX.
Definition: graph.h:122
#define ENDP(l)
Test if a list is empty.
Definition: newgen_list.h:66
#define POP(l)
Modify a list pointer to point on the next element of the list.
Definition: newgen_list.h:59
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define CAR(pcons)
Get the value of the first element of a list.
Definition: newgen_list.h:92
#define CDR(pcons)
Get the list less its first element.
Definition: newgen_list.h:111
string db_get_memory_resource(const char *rname, const char *oname, bool pure)
Return the pointer to the resource, whatever it is.
Definition: database.c:755
#define DB_PUT_FILE_RESOURCE
Put a file resource into the current workspace database.
Definition: pipsdbm-local.h:85
bool vect_check(Pvecteur cv)
bool vect_check(Pvecteur v): renvoie true si le vecteur v est coherent avec les specifications du pac...
Definition: reductions.c:529
#define debug_on(env)
Definition: misc-local.h:157
#define pips_internal_error
Definition: misc-local.h:149
#define debug_off()
Definition: misc-local.h:160
int get_debug_level(void)
GET_DEBUG_LEVEL returns the current debugging level.
Definition: debug.c:67
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
Definition: debug.c:189
string concatenate(const char *,...)
Return the concatenation of the given strings.
Definition: string.c:183
#define BASE_NODE_NUMBER
int vertex_int_stmt(vertex)
===========================================================================
Definition: utils.c:866
void fprint_psysteme(FILE *, Psysteme)
===========================================================================
Definition: print.c:302
void fprint_pred(FILE *, predicate)
===========================================================================
Definition: print.c:287
void fprint_dataflow(FILE *, int, dataflow)
===========================================================================
Definition: print.c:229
#define communication_shift(x)
Definition: paf_ri.h:265
#define conditional_true_quast(x)
Definition: paf_ri.h:302
#define dataflow_communication(x)
Definition: paf_ri.h:346
#define DATAFLOW(x)
DATAFLOW.
Definition: paf_ri.h:308
#define dataflow_transformation(x)
Definition: paf_ri.h:342
#define quast_undefined
Definition: paf_ri.h:603
#define quast_value_undefined
Definition: paf_ri.h:639
#define leaf_label_statement(x)
Definition: paf_ri.h:451
@ is_quast_value_quast_leaf
Definition: paf_ri.h:654
@ is_quast_value_conditional
Definition: paf_ri.h:655
#define dfg_arc_label_dataflows(x)
Definition: paf_ri.h:378
#define conditional_false_quast(x)
Definition: paf_ri.h:304
#define communication_undefined
Definition: paf_ri.h:236
#define quast_leaf_solution(x)
Definition: paf_ri.h:591
#define quast_value_tag(x)
Definition: paf_ri.h:672
#define dataflow_governing_pred(x)
Definition: paf_ri.h:344
#define communication_reduction(x)
Definition: paf_ri.h:263
#define quast_leaf_undefined
Definition: paf_ri.h:567
#define leaf_label_undefined
Definition: paf_ri.h:427
#define dataflow_reference(x)
Definition: paf_ri.h:340
#define leaf_label_depth(x)
Definition: paf_ri.h:453
#define communication_broadcast(x)
Definition: paf_ri.h:261
#define quast_value_quast_leaf(x)
Definition: paf_ri.h:675
#define quast_leaf_leaf_label(x)
Definition: paf_ri.h:593
#define quast_quast_value(x)
Definition: paf_ri.h:627
#define dfg_vertex_label_exec_domain(x)
Definition: paf_ri.h:415
#define conditional_predicate(x)
Definition: paf_ri.h:300
#define quast_value_conditional(x)
Definition: paf_ri.h:678
string db_get_current_workspace_directory(void)
Definition: workspace.c:96
list words_expression(expression obj, list *ppdl)
This one is exported.
Definition: misc.c:2611
list words_reference(reference obj, list *ppdl)
Definition: misc.c:781
graph the_dfg
The placement function.
Definition: prgm_mapping.c:99
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
#define PREDICATE(x)
PREDICATE.
Definition: ri.h:2040
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
#define predicate_undefined
Definition: ri.h:2046
#define predicate_system(x)
Definition: ri.h:2069
struct Ssysteme * Psysteme
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
char * strdup()
char * variable_name(Variable v)
polynome_ri.c
Definition: polynome_ri.c:73
struct Scontrainte * succ
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
string words_to_string(cons *lw)
Definition: print.c:211
#define exp
Avoid some warnings from "gcc -Wshadow".
Definition: vasnprintf.c:207
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_NUL_P(v)