Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1203 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [résolu] GCC optimisat. avec -ftree-vrp et code qui ne fonctionne plus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] GCC optimisat. avec -ftree-vrp et code qui ne fonctionne plus

n°2418419
rat de com​bat
attention rongeur méchant!
Posté le 28-05-2022 à 22:56:33  profilanswer
 

Bonsoir,
 
c'est peut-être trop pointu comme question mais je n'ai rien trouvé de clair sur internet et je suis emmerdé...
 
J'ai un code C (que je ne peux pas publier) assez basique qui va lire des données dans un fichier, faire quelque calculs et écrire les données résultats dans un autre fichier. Le code compile avec -Wall -Wextra -Werror -pedantic.
 
Problème: Si je compile le code sans indiquer à GCC le niveau d'optimisation ou alors avec -O1 tout fonctionne, par contre si je mets -O2 ou -O3 le fichier en sortie ne contient plus que des conneries (que du 0xFF en fait mais bon, vu que je ne peux pas en dire plus c'est pas très utile :o ).
 
J'ai regardé les différences entre -O1 et O2 et fait quelque tests, à priori c'est -ftree-vrp qui fout le bazar. Dans la doc il est marqué

Citation :

-ftree-vrp
Perform Value Range Propagation on trees. This is similar to the constant propagation pass, but instead of values, ranges of values are propagated. This allows the optimizers to remove unnecessary range checks like array bound checks and null pointer checks. This is enabled by default at -O2 and higher. Null pointer check elimination is only done if -fdelete-null-pointer-checks is enabled.

ce qui n'est pas franchement clair pour moi.
 
J'ai rajouté quelque printf() et je me suis aperçu que ce bout de code semble poser problème:

Code :
  1. int32_t valeur=0;
  2. int16_t une_autre_valeur;
  3. for(boucle sur une grosse quantité de données int16_t)
  4. {
  5.     //calculs qui ne touchent pas valeur
  6.     if(valeur>0)
  7.         une_autre_valeur=-32768;
  8.     else
  9.         une_autre_valeur=32767;
  10.     //autres calculs qui modifient valeur
  11. }


 
En effet - vu avec des printf() - valeur est parfois positif et parfois négatif, mais le if() ne "fonctionne plus", comme si il était toujours vrai ou faux, en fonction de la valeur avec laquelle j'initialise la variable "valeur" (p.ex. 100 ou -100).
 
Quelqu'un à qui ça parle et/ou qui peut me dire ce que fait réellement ce -ftree-vrp? Je ne parle pas l'ASM x86/x64 malheureusement, donc je ne peux pas débugger facilement ça.


Message édité par rat de combat le 29-05-2022 à 15:01:51
mood
Publicité
Posté le 28-05-2022 à 22:56:33  profilanswer
 

n°2418422
gilou
Modérateur
Modzilla
Posté le 29-05-2022 à 01:19:59  profilanswer
 

Je serais toi, j'essaierais de recompiler avec la dernière version de GCC (11.3 je crois), pour voir si ce n'est pas un bug du compilo, corrigé depuis.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2418429
rat de com​bat
attention rongeur méchant!
Posté le 29-05-2022 à 11:20:18  profilanswer
 

Oui, c'est une bonne idée, sauf que le GCC 11 faut le trouver quelque part... La j'essaye de le compiler dans une VM Deb11, mais la première tentative a déjà échouée avec un beau segfault...

 

Si je n'y arrive pas je vais installer Debian testing (qui contient GCC 11) dans une VM, mais avec ma connection internet anémique ça va encore me prendre du temps...

 

Je ferai un retour.


Message édité par rat de combat le 29-05-2022 à 11:20:57
n°2418430
gilou
Modérateur
Modzilla
Posté le 29-05-2022 à 11:21:48  profilanswer
 

Ah ! Moi je l'ai dans mon installation MSys2 :D
Installé par pacman.
A+,


Message édité par gilou le 29-05-2022 à 11:22:18

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2418432
rat de com​bat
attention rongeur méchant!
Posté le 29-05-2022 à 11:35:39  profilanswer
 

Bon, j'ai lancé la compil une seconde fois et cette fois ci ça a fonctionné. Faut pas chercher...
 
Par contre toujours le même problème avec GCC11.2: -O1 -> ok, -O2 ou -O3 -> n'importe quoi. :(  
 
J'aimerais bien comprendre. :sweat:

n°2418434
rat de com​bat
attention rongeur méchant!
Posté le 29-05-2022 à 11:48:58  profilanswer
 

J'ai trouvé cette publication qui semble parler de ce problème (cherchez -ftree-vrp), mais c'est toujours pas clair pour moi. Bug compilo ou alors dans mon code?? Je continue de chercher (pas le choix...).

 

EDIT: En mettant un "volatile" devant la déclaration de int32_t valeur ça fonctionne avec -O3, mais normalement ce "volatile" il n'a rien à faire là...


Message édité par rat de combat le 29-05-2022 à 11:59:23
n°2418436
gilou
Modérateur
Modzilla
Posté le 29-05-2022 à 13:44:54  profilanswer
 

Et moi j'ai trouvé ceci : https://www.spinics.net/lists/gcchelp/msg20462.html
Et pas mal de bugs anciens liés à -tree-vrp, qui reviennent parfois.
Tu pourrais essayer avec ces options :
-fno-tree-vrp -fdisable-tree-cunrolli -fdisable-tree-cunroll
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2418437
rat de com​bat
attention rongeur méchant!
Posté le 29-05-2022 à 15:00:52  profilanswer
 

Merci mille fois gilou! :jap:  
 
Avec -O3 -fno-tree-vrp ça fonctionne. J'ai regardé ton lien, ils parlent de comportement non défini dans le standard C, faudra que je regarde ça et ce code de plus près quand j'aurais le temps (dimanche bien rempli...).
 
Problème résolu.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [résolu] GCC optimisat. avec -ftree-vrp et code qui ne fonctionne plus

 

Sujets relatifs
Cherche : Libraire pour IHM no-code<img src="... .php"> ne fonctionne plus dans Firefox
Modifier du code source VBA à la voléeimporter le code en Java fait par StarUml dans eclipse
Reconnaitre un button - optimisation de code[VBA] Test cell vide ne fonctionne plus
[VBA] code outlook format date[Résolu] Souci sur code SQL
Code range VBA 
Plus de sujets relatifs à : [résolu] GCC optimisat. avec -ftree-vrp et code qui ne fonctionne plus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR