blob: c561402101cd7a3634d69bd5b2575cab5ae6b8f7 [file] [log] [blame]
salut,
je testais ta librairie cloog et je suis tombé sur un point qui m'a fait
perdre un peu de temps, je pense que si ce n'est pas le cas, ça serait pas
mal de le préciser dans la doc pour éviter des déboires. je te passe les
détails du pourquoi, en fait je suis tombé sur un core dont voici la trace
d'appels :
#0 0x1b907460 in _vgi__soname$3Alibc$2Eso$2E6$3Afree (p=0x0) at vg_replace_malloc.c:153
#1 0x1bb1e2f2 in cloog_statement_free (statement=0x1bb58d30) at source/statement.c:118
#2 0x1bb19390 in cloog_loop_free_parts (loop=0x1bb66280, domain=1, statement=1, inner=0, next=0) at source/loop.c:170
#3 0x1bb1aba5 in cloog_loop_simplify (loop=0x1bb66280, context=0x1bb662c8, level=3, nb_par=0) at source/loop.c:1096
#4 0x1bb1a9c7 in cloog_loop_simplify (loop=0x1bb66530, context=0x1bb68820, level=2, nb_par=0) at source/loop.c:1040
#5 0x1bb1a9c7 in cloog_loop_simplify (loop=0x1bb68a60, context=0x1bb58b98, level=1, nb_par=0) at source/loop.c:1040
#6 0x1bb18e32 in cloog_program_generate (program=0x1bb57cc8, options=0x1bb57c68) at source/program.c:712
en fait il s'agit du ``nom'' des statements : le champ loop->statement->body.
et bien pour que ta librairie marche, il faut qu'il soit initialisé et
désallouable par un free. ce ne peut être un champ statique style
"statement" comme je l'avais mis au début. c'est un détail mais qui peut
être piégeur.
point différent : le champ 'name' des options, il semble important de le
définir avant de faire un print, mais celui là pas forcément avec un malloc
car il n'est pas désalloué par un quelconque free de cloog_options_free.
ces petits détails pris en compte, ça à l'air de mieux marcher.
a+
,fb
----------------------------------------------------------------------------
>Salut Fabrice,
>> il faut que tu arrêtes d'allonger ma pile de choses à m'occuper
>> 'rapidement' sinon j'en ai pour jusqu'en 2006 !
allez, une dernière, pareil c'est pas urgent, stocke, j'ai pas besoin de
réponse pour l'instant. en fait lorsque tu as pas de paramètres à ton
problème, tu passes le polyhèdre :
1 2
1 1
comme dans l'exemple ci-dessous :
# ----------------------------------------------------------------------
# language: C
c
# parameters {m, n | 4<=m<=n}
1 2
1 1
0
1 # Number of statements
1
# {i, j | 1<=i<=n 1<=j<=m}
4 4
# i j m n 1
1 1 0 5
1 -1 0 5
1 0 1 5
1 0 -1 5
0 0 0
0
0 # Scattering functions
# ----------------------------------------------------------------------
qui donne parfaitement :
/* Generated from a.cloog by CLooG v0.12.2 64 bits in 0.00s. */
for (i=-5;i<=5;i++) {
for (j=-5;j<=5;j++) {
S1 ;
}
}
par contre, si je décide de lui passer à la place :
1 2
0 1
là il ne m'afficher plus de solution. c'est bizarre ou c'est normal ?
en fait le polyhèdre ci dessus est intéressant, car il correspond au
polyhèdre retourné par la fonction Empty_Polyhedron de la polylib.
cprog->context=Empty_Polyhedron(0);
,fb