25 #include "pips_config.h"
106 for (debut =
true; ind1 != NULL; ind1 =
CDR(ind1))
112 fprintf(stderr,
"\n expression->vecteur:");
119 fprintf(stderr,
"\n nouvelle expression:");
146 (void)
fprintf(stderr,
"Loop body :\n");
154 (void)
fprintf(stderr,
"New loop body :\n");
166 for(l=1; l <= dim; l++) {
234 Pbase tile_basis_in_tile_basis,
235 Pbase tile_basis_in_initial_basis,
237 int first_parallel_level,
238 int last_parallel_level)
240 pips_assert(
"true", last_parallel_level==last_parallel_level);
244 Psysteme ordered_tile_domain = SC_UNDEFINED;
252 debug(8,
"make_scanning_over_tiles",
"begin for module %s\n",
263 tile_basis_in_tile_basis,
264 tile_basis_in_initial_basis,tile);
269 tile_basis_in_initial_basis,
280 (void)
fprintf(stderr,
"Tile basis -> initial basis:\n");
286 for(l=1; l <= id; l++) {
288 tile_domain = sc_projection_pure(tile_domain, (
Variable) ind);
293 for(l=1; l <= td; l++) {
295 tile_domain = sc_projection_pure(tile_domain, (
Variable) ind);
299 (void)
fprintf(stderr,
"Constraints on tile indices:\n");
304 ordered_tile_domain =
309 (void)
fprintf(stderr,
"Ordered constraints on tile indices:\n");
322 for(t = td; t >= 1; t--) {
324 sctmp =
sc_dup(ordered_tile_domain);
331 fprintf(stderr,
"indice de tuile inutile %d, %s\n",t,
333 keep_indice[t] =
false;
337 for (t=1;t<=td && keep_indice[t]==
false;t++);
338 first_indice = (t==td+1) ? td:t;
340 fprintf(stderr,
"first tile index %d, %s\n",first_indice,
344 for(t = td; t >= 1; t--)
362 tile_basis_in_tile_basis,
369 if(t !=first_parallel_level ||
386 if(t==first_parallel_level &&
429 (void)
fprintf(stderr,
"Loop nest over tiles:\n");
476 tile, initial_basis, local_basis,
477 tile_basis_in_tile_basis,
478 tile_basis_in_initial_basis,
480 first_parallel_level,
487 Pbase tile_basis_in_tile_basis;
488 Pbase tile_basis_in_initial_basis;
490 int first_parallel_level,last_parallel_level;
492 pips_assert(
"true", first_parallel_level==first_parallel_level);
494 Psysteme ordered_tile_domain = SC_UNDEFINED;
495 Psysteme origin_domain = SC_UNDEFINED;
502 debug(8,
"make_scanning_over_one_tile",
"begin for module %s\n",
513 tile_basis_in_tile_basis,
514 tile_basis_in_initial_basis,tile);
519 for(l=1; l <= id; l++) {
534 tile_basis_in_initial_basis,
543 (void)
fprintf(stderr,
"Full system before projections:\n");
549 for(l=1; l <= td; l++) {
551 tile_domain = sc_projection_pure(tile_domain, (
Variable) ind);
556 "Constraints on local tile indices parametrized by tile origin and initial indices:\n");
561 for(l=1; l <= id; l++) {
563 tile_domain = sc_projection_pure(tile_domain, (
Variable) ind);
568 "Constraints on local tile indices parametrized by tile origin:\n");
577 origin_domain =
sc_dup(tile_domain);
580 for(l=1; l <= id; l++) {
582 origin_domain = sc_projection_pure(origin_domain, (
Variable) ind);
587 "Absolute constraints on tile origins:\n");
592 tile_domain =
sc_append(origin_domain, tile_domain);
596 "Constraints on local tile indices parametrized by tile origin, with redundant information:\n");
600 pv =tile_basis_in_tile_basis;
615 (void)
fprintf(stderr,
"Ordered constraints on local indices:\n");
625 for (t =
id; t >= 1; t--) {
634 for(t =
id; t >= 1; t--) {
666 strdup(
"C To scan each iteration of the current tile\n");
668 (void)
fprintf(stderr,
"Loop nest over tiles:\n");
672 debug(8,
"make_scanning_over_one_tile",
"end\n");
680 tile, initial_basis, local_basis,
681 tile_basis_in_tile_basis,
682 tile_basis_in_initial_basis,
683 iteration_domain,first_parallel_level,last_parallel_level)
692 Pbase tile_basis_in_tile_basis;
693 Pbase tile_basis_in_initial_basis;
695 int first_parallel_level,last_parallel_level;
701 tile_basis_in_tile_basis,local_basis,tile);
704 tile, initial_basis, local_basis,
705 tile_basis_in_tile_basis,
706 tile_basis_in_initial_basis,
707 iteration_domain,first_parallel_level,last_parallel_level);
724 tile_indices,local_basis,tile)
731 Pbase initial_basis,tile_indices,local_basis;
748 initial_basis,tile_indices, local_basis,tile);
761 lt, r_to_llv, offsets,
763 tile_indices,local_basis,tile);
779 initial_basis, local_basis);
791 debug(8,
"reference_conversion_statement",
"return statement: \n");
805 Pbase tile_local_indices,
825 tile_local_indices,i);
841 tile_indices, tile_local_indices,tile);
874 debug(8,
"reference_conversion_expression",
"begin expression:");
877 (void) fputc(
'\n', stderr);
902 initial_basis, local_basis);
915 initial_basis, local_basis);
924 debug(8,
"reference_conversion_expression",
"end expression:\n");
927 (void) fputc(
'\n', stderr);
946 debug(8,
"uniform_dependence_p",
"begin\n");
950 for (; uniform && ind1 != NULL && ind2!= NULL;
951 ind1 =
CDR(ind1), ind2=
CDR(ind2))
967 debug(8,
"uniform_dependence_p",
"end\n");
979 list plr,lr,bllr,lr2;
984 debug(8,
"classify_reference",
"begin\n");
985 for (plr = llr,bllr =
NIL; plr !=
NIL && !trouve; plr =
CDR(plr)) {
1000 debug(8,
"classify_reference",
"end\n");
1015 Pbase *new_index_base;
1032 debug(8,
"build_sc_with_several_uniform_ref",
"begin\n");
1035 (void)
fprintf(stderr,
"Associated reference list:");
1036 for(crefs=lr; !
ENDP(crefs);
POP(crefs)) {
1040 (void) putc(
'\n', stderr);
1042 (
void) putc(
',', stderr);
1055 for (expr = ind;expr!= NULL; expr =
CDR(expr)) {
1064 else pc3->
succ = pc;
1066 sc_array_function->
nb_ineq ++;
1083 for (lr =
CDR(lr); lr !=
NIL;lr =
CDR(lr)) {
1087 for (expr = ind,pc = sc_array_function->
inegalites,
1089 expr!= NULL; expr =
CDR(expr), pc=pc->
succ,pc2 = pc2->
succ) {
1126 sc_add_ineg(sc_domain,pc1);
1130 sc_add_ineg(sc_domain,pc2);
1134 (void)
fprintf(stderr,
" The array function :\n");
1138 debug(8,
"build_sc_with_several_uniform_ref",
"end\n");
1141 return(sc_array_function);
1181 Pbase loop_body_indices,
1183 int pn,
int bn,
int ls,
1187 int first_parallel_level,
1188 int last_parallel_level)
1190 pips_assert(
"true", last_parallel_level==last_parallel_level
1191 && first_parallel_level==first_parallel_level);
1195 Psysteme sc_image,sc_array_function;
1213 debug(8,
"make_store_blocks",
1214 "begin variable=%s, shared_variable=%s, local_variable=%s\n",
1220 (void)
fprintf(stderr,
"Associated reference list:");
1221 for(crefs=lrefs; !
ENDP(crefs);
POP(crefs)) {
1225 (void) putc(
'\n', stderr);
1227 (
void) putc(
',', stderr);
1234 for (lrs =lrefs ; !
ENDP(lrs) ;
POP(lrs)) {
1237 receive_code =
false;
1241 receive_code =
true;
1252 for ( lrs = lrefs; lrs !=
NIL ; lrs =
CDR(lrs) ) {
1261 for (ldr = lldr;ldr !=
NIL;ldr =
CDR(ldr)) {
1266 sc_domain,&new_index_base);
1267 new_index_base =
vect_add(new_index_base,
1272 sc_array_function,new_index_base,
1273 &const_base,Proc_id,bank_indices,
1274 tile_indices,&new_tile_indices,
1278 sc_image2 =
sc_dup(sc_image);
1280 receive_code =
true;
1285 shared_variable,sc_image,
1286 const_base,bank_indices,
1288 var_id,loop_body_indices,n,dim_h);
1291 receive_code =
false;
1296 local_variable,sc_image2,
1297 const_base,bank_indices,
1299 var_id,loop_body_indices,n,dim_h);
1307 *bank_store_block = bsb;
1309 debug(8,
"make_store_blocks",
"end\n");
1312 void make_load_blocks(initial_module,compute_module,memory_module,var,shared_variable,local_variable,lrefs,
1314 index_base,bank_indices,tile_indices,loop_body_indices, Proc_id,
1316 load_block, bank_load_block,first_parallel_level,last_parallel_level
1333 Pbase loop_body_indices;
1339 int first_parallel_level,last_parallel_level;
1341 pips_assert(
"true", last_parallel_level==last_parallel_level &&
1342 first_parallel_level==first_parallel_level);
1346 Psysteme sc_image,sc_array_function;
1364 debug(8,
"make_load_blocks",
1365 "begin variable=%s, shared_variable=%s, local_variable=%s\n",
1371 (void)
fprintf(stderr,
"Associated reference list:");
1372 for(crefs=lrefs; !
ENDP(crefs);
POP(crefs)) {
1376 (void) putc(
'\n', stderr);
1378 (
void) putc(
',', stderr);
1385 for (lrs =lrefs ; !
ENDP(lrs) ;
POP(lrs)) {
1389 receive_code =
true;
1392 receive_code =
false;
1402 for (lrs =lrefs ; !
ENDP(lrs) ;
POP(lrs)) {
1411 for (lur=llur; lur !=
NIL; lur =
CDR(lur)) {
1415 sc_domain,&new_index_base);
1416 new_index_base =
vect_add(new_index_base,
1420 sc_array_function,new_index_base,
1421 &const_base,Proc_id,bank_indices,
1422 tile_indices,&new_tile_indices,
1426 sc_image2=
sc_dup(sc_image);
1428 receive_code =
false;
1435 shared_variable,sc_image,
1436 const_base,bank_indices,new_tile_indices,
1437 var_id, loop_body_indices,n,dim_h);
1440 receive_code =
true;
1447 local_variable,sc_image2,
1448 const_base,bank_indices,new_tile_indices,
1449 var_id, loop_body_indices,n,dim_h);
1458 *bank_load_block=blb;
1460 debug(8,
"make_load_blocks",
"end\n");
1481 debug(8,
"tile_membership",
"begin\n");
1487 (void)
fprintf(stderr,
"Partitioning matrix P:\n");
1498 (void)
fprintf(stderr,
"Inverse of partitioning matrix, IP:\n");
1502 for ( i=1; i<=d; i++) {
1505 for ( j=1; j<=d; j++) {
1524 (void)
fprintf(stderr,
"Tile membership conditions:\n");
1528 debug(8,
"tile_membership",
"end\n");
execution make_execution(enum execution_utype tag, void *val)
loop make_loop(entity a1, range a2, statement a3, entity a4, execution a5, list a6)
range make_range(expression a1, expression a2, expression a3)
struct _newgen_struct_entity_ * entity
static reference ref
Current stmt (an integer)
static bool member(region reg, list reg_list)
tests if reg and any member of reg_list are same_reg_ignore_action
#define value_minus(v1, v2)
#define value_notzero_p(val)
#define value_uminus(val)
unary operators on values
#define value_eq(v1, v2)
bool operators on values
#define value_mult(v, w)
whether the default is protected or not this define makes no sense any more...
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,...
Pbase vect_add_variable(Pbase b, Variable v)
package vecteur - routines sur les bases
Pvecteur make_loop_indice_equation(Pbase loop_indices, tiling tile, Pvecteur tile_delay, Pvecteur tile_indices, Pvecteur tile_local_indices, int rank)
PACKAGE MOVEMENTS.
Psysteme tile_membership(matrice P, Pbase origin, Pbase member)
Psysteme tile_membership(P, origin, member):
static void ref_found_p(reference ref)
static Variable var_to_evaluate
Value offset_dim1
include "generation.h"
void eval_variable_in_statement(entity module, statement s, Variable v, int min)
void make_store_blocks(entity initial_module, entity compute_module, entity memory_module, entity var, entity shared_variable, entity local_variable, list lrefs, hash_table r_to_ud, Psysteme sc_domain, Pbase index_base, Pbase bank_indices, Pbase tile_indices, Pbase loop_body_indices, entity Proc_id, int pn, int bn, int ls, statement *store_block, statement *bank_store_block, int first_parallel_level, int last_parallel_level)
void reference_conversion_expression(expression e, hash_table r_to_llv, Pvecteur offsets, Pbase initial_basis, Pbase local_basis)
static void initialize_offsets(list lt)
dg_vertex_label vertex_label
static void eval_var(reference ref)
static bool ref_in_statement1
dg_arc_label arc_label
Code Generation for Distributed Memory Machines.
statement make_scanning_over_tiles(entity module, list body, entity proc_id, int pn, tiling tile, Pbase initial_basis, Pbase tile_basis_in_tile_basis, Pbase tile_basis_in_initial_basis, Psysteme iteration_domain, int first_parallel_level, int last_parallel_level)
make_scanning_over_tiles()
list reference_conversion_statement(entity module, statement body, list *lt, hash_table r_to_llv, Pvecteur offsets, Pbase initial_basis, Pbase tile_indices, Pbase local_basis, tiling tile)
void reference_conversion_statement(body, r_to_llv, offsets, initial_basis, local_basis):
list classify_reference(list llr, reference r)
This function classifies the references in lists.
static entity tile_indice_entity1
static bool reference_in_statement_p(statement l, entity v)
void make_load_blocks(entity initial_module, entity compute_module, entity memory_module, entity var, entity shared_variable, entity local_variable, list lrefs, hash_table r_to_ud, Psysteme sc_domain, Pbase index_base, Pbase bank_indices, Pbase tile_indices, Pbase loop_body_indices, entity Proc_id, int pn, int bn, int ls, statement *load_block, statement *bank_load_block, int first_parallel_level, int last_parallel_level)
list reference_conversion_computation(entity compute_module, list *lt, expression expr, Pbase initial_basis, Pbase tile_indices, Pbase tile_local_indices, tiling tile)
static void nullify_offsets()
entity reference_translation(reference r, Pbase initial_basis, Pbase local_basis)
void tile_change_of_basis(Psysteme tile_domain, Pbase initial_basis, Pbase tile_basis, Pbase tile_init_basis, tiling tile)
list make_compute_block(entity module, statement body, Pvecteur offsets, hash_table r_to_llv, tiling tile, Pbase initial_basis, Pbase local_basis, Pbase tile_basis_in_tile_basis, Pbase tile_basis_in_initial_basis, Psysteme iteration_domain, int first_parallel_level, int last_parallel_level)
statement make_scanning_over_one_tile(entity module, statement body, tiling tile, Pbase initial_basis, Pbase local_basis, Pbase tile_basis_in_tile_basis, Pbase tile_basis_in_initial_basis, Psysteme iteration_domain, int first_parallel_level, int last_parallel_level)
make_scanning_over_one_tile():
Psysteme build_sc_with_several_uniform_ref(entity module, cons *lr, Psysteme sc_domain, Pbase *new_index_base)
build_sc_with_several_uniform_ref():
bool uniform_dependence_p(reference r1, reference r2)
This function checks if two references have a uniform dependence.
#define contrainte_vecteur(c)
passage au champ vecteur d'une contrainte "a la Newgen"
Pcontrainte contrainte_make(Pvecteur pv)
Pcontrainte contrainte_make(Pvecteur pv): allocation et initialisation d'une contrainte avec un vecte...
Pcontrainte contrainte_dup(Pcontrainte c_in)
Pcontrainte contrainte_dup(Pcontrainte c_in): allocation d'une contrainte c_out prenant la valeur de ...
Pcontrainte contrainte_new(void)
package contrainte - allocations et desallocations
void contrainte_chg_sgn(Pcontrainte)
void contrainte_chg_sgn(Pcontrainte eq): changement de signe d'une contrainte, i.e.
static entity new_variable
entity to be replaced, the primary?
#define gen_recurse(start, domain_number, flt, rwt)
statement make_block_statement(list)
Make a block statement from a list of statement.
bool gen_true(__attribute__((unused)) gen_chunk *unused)
Return true and ignore the argument.
#define ENDP(l)
Test if a list is empty.
#define POP(l)
Modify a list pointer to point on the next element of the list.
#define NIL
The empty list (nil in Lisp)
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
#define CAR(pcons)
Get the value of the first element of a list.
#define CDR(pcons)
Get the list less its first element.
#define MAPL(_map_list_cp, _code, _l)
Apply some code on the addresses of all the elements of a list.
#define MAP(_map_CASTER, _map_item, _map_code, _map_list)
Apply/map an instruction block on all the elements of a list (old fashioned)
statement make_assign_statement(expression, expression)
statement make_continue_statement(entity)
void * hash_get(const hash_table htp, const void *key)
this function retrieves in the hash table pointed to by htp the couple whose key is equal to key.
void vect_fprint(FILE *f, Pvecteur v, get_variable_name_t variable_name)
void vect_fprint(FILE * f, Pvecteur v, char * (*variable_name)()): impression d'un vecteur creux v su...
int vect_size(Pvecteur v)
package vecteur - reductions
void wp65_debug_print_text(entity m, statement s)
include "values.h"
statement make_movement_scalar_wp65(entity module, bool receive_code, reference r, entity var_id)
statement make_movement_scalar_wp65(receive_code,r)
#define DENOMINATOR(matrix)
int DENOMINATEUR(matrix): acces au denominateur global d'une matrice matrix La combinaison *(&()) est...
#define ACCESS(matrix, column, i, j)
Macros d'acces aux elements d'une matrice.
#define matrice_new(n, m)
Allocation et desallocation d'une matrice.
Value * matrice
package matrice
void matrice_general_inversion(matrice a, matrice inv_a, int n)
void matrice_general_inversion(matrice a; matrice inv_a; int n) calcul de l'inversion du matrice gene...
void matrice_normalize(matrice a, int n, int m)
void matrice_normalize(matrice a, int n, int m)
void matrice_fprint(FILE *, matrice, int, int)
matrice_io.c
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
#define pips_internal_error
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
Psysteme sc_image_computation(entity module, entity entity_var, Psysteme sc_domain, Psysteme sc_array_function, Pbase index_base, Pbase *const_base, entity proc_id, Pbase bank_indices, Pbase tile_indices, Pbase *new_tile_indices, int pn, int bn, int ls, int *n, int *dim_h)
This function computes the system of constraints characterizing the image by the array function of th...
statement movement_computation(entity module, bool used_def, bool bank_code, bool receive_code, entity private_entity, Psysteme sc_image, Pbase const_base, Pbase bank_indices, Pbase tile_indices, Pbase ppid, Pbase loop_body_indices, int n, int dim_h)
Calcul des nouvelles bornes des boucles et de la nouvelle fonction d'acces a une reference d'un table...
Variable sc_add_new_variable_name(entity, Psysteme)
sc_add_variable.c
string concatenate(const char *,...)
Return the concatenation of the given strings.
#define HASH_UNDEFINED_VALUE
value returned by hash_get() when the key is not found; could also be called HASH_KEY_NOT_FOUND,...
void print_reference(reference r)
list Words_Expression(expression obj)
of string
static void norm(struct rproblem *RR)
cette procedure normalise la fonction cout, calcule les valeurs des seconds membres resultant d'une n...
#define instruction_block_p(i)
#define loop_to_statement(l)
#define PLUS_OPERATOR_NAME
#define MOD_INTRINSIC_NAME
#define NORMALIZE_EXPRESSION(e)
#define STATEMENT_NUMBER_UNDEFINED
default values
#define is_instruction_block
soft block->sequence transition
#define instruction_block(i)
void make_bound_expression(Variable index, Pbase base, Psysteme sc, expression *lower, expression *upper)
void make_bound_expression(variable index, Pbase base, Psysteme sc, expression *lower,...
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...
entity local_name_to_top_level_entity(const char *n)
This function try to find a top-level entity from a local name.
entity make_loop_label(int __attribute__((unused)) desired_number, entity module)
const char * module_local_name(entity e)
Returns the module local user name.
expression make_vecteur_expression(Pvecteur pv)
make expression for vector (Pvecteur)
expression entity_to_expression(entity e)
if v is a constant, returns a constant call.
expression MakeBinaryCall(entity f, expression eg, expression ed)
Creates a call expression to a function with 2 arguments.
expression int_to_expression(_int i)
transform an int into an expression and generate the corresponding entity if necessary; it is not cle...
entity make_new_module_variable(entity, int)
Make a new module integer variable of name X<d>.
void AddEntityToDeclarations(entity, entity)
END_EOLE.
#define REFERENCE(x)
REFERENCE.
#define storage_formal_p(x)
#define syntax_reference(x)
#define normalized_linear_p(x)
#define reference_variable(x)
#define instruction_loop(x)
#define entity_storage(x)
#define EXPRESSION(x)
EXPRESSION.
#define reference_domain
newgen_range_domain_defined
#define expression_undefined
@ is_instruction_unstructured
#define instruction_tag(x)
struct _newgen_struct_normalized_ * normalized
#define reference_indices(x)
#define statement_instruction(x)
#define statement_comments(x)
#define instruction_call(x)
@ is_execution_sequential
#define call_arguments(x)
#define statement_number(x)
#define normalized_linear(x)
#define expression_syntax(x)
#define statement_undefined
#define STATEMENT(x)
STATEMENT.
void sc_creer_base(Psysteme ps)
void sc_creer_base(Psysteme ps): initialisation des parametres dimension et base d'un systeme lineair...
void sc_add_egalite(Psysteme p, Pcontrainte e)
void sc_add_egalite(Psysteme p, Pcontrainte e): macro ajoutant une egalite e a un systeme p; la base ...
Psysteme sc_new(void)
Psysteme sc_new(): alloue un systeme vide, initialise tous les champs avec des valeurs nulles,...
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...
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
void sc_force_variable_to_zero(Psysteme ps, Variable var)
void sc_force_variable_to_zero(Psysteme ps, Variable var): force la variable var a prendre la valeur ...
bool sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, Value *pmax)
void sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, *pmax): examine un systeme pour tr...
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Variable variable_of_rank()
Psysteme sc_append(Psysteme s1, Psysteme s2)
Psysteme sc_append(Psysteme s1, Psysteme s2): calcul de l'intersection des polyedres definis par s1 e...
void sc_fprint(FILE *fp, Psysteme ps, get_variable_name_t nom_var)
void sc_fprint(FILE * f, Psysteme ps, char * (*nom_var)()): cette fonction imprime dans le fichier po...
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
Psysteme new_loop_bound(Psysteme scn, Pbase base_index)
Psysteme new_loop_bound(Psysteme scn, Pbase base_index) computation of the new iteration space (given...
Psysteme sc_normalize(Psysteme ps)
Psysteme sc_normalize(Psysteme ps): normalisation d'un systeme d'equation et d'inequations lineaires ...
void vect_chg_sgn(Pvecteur v)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
struct Scontrainte * succ
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
The structure used to build lists in NewGen.
void print_words(FILE *fd, cons *lw)
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
struct Svecteur * Pvecteur
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
#define VARIABLE_UNDEFINED
#define base_dimension(b)
#define BASE_NULLE
MACROS SUR LES BASES.
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Pvecteur vect_add(Pvecteur v1, Pvecteur v2)
package vecteur - operations binaires
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2)
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2): allocation d'un vecteur v dont la valeur est la di...
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val)
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val): mise de la coordonnee var du vecteur *pp...