Bonjour,

J'utilise le compilateur croisé gcc 6.3 sur cible MPC5566

Je souhaite affiner mes options d'optimisation afin de conserver les ruptures de séquence (comparaisons puis branches) sur chaque condition dans une décision.

Nous utilisons les options -c -mcpu=8540 -Og -I. -Wa,-adhln.

le code exemple est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
   if (a != 0 || b != 0 || c != 0 || d != 0) { 
        d -= 1;                                  
    }
    else {
        d += 1;                                 
    }
le code généré
    7 0000 7CA53378              or 5,5,6
    8 0004 7CA52378              or 5,5,4
    9 0008 3886FFFF              addi 4,6,-1
   10 000c 39260001              addi 9,6,1
   11 0010 7CAA1B79              or. 10,5,3
   12 0014 7D29209E              isel 9,9,4,2
   13 0018 5523083C              slwi 3,9,1
   14 001c 7C634A14              add 3,3,9
   15 0020 4E800020              blr
Je dois réussir à trouver l'option qui combinée à -Og permet de générer des ruptures de séquence sur les tests de a, b, c et d comme le fait le compilateur avec l'option -O0

  14 001c 813F0008              lwz 9,8(31)
  15 0020 2F890000              cmpwi 7,9,0
  16 0024 409E0028              bne 7,.L2
  17 0028 813F000C              lwz 9,12(31)
  18 002c 2F890000              cmpwi 7,9,0
  19 0030 409E001C              bne 7,.L2
  20 0034 813F0010              lwz 9,16(31)
  21 0038 2F890000              cmpwi 7,9,0
  22 003c 409E0010              bne 7,.L2
  23 0040 813F0014              lwz 9,20(31)
  24 0044 2F890000              cmpwi 7,9,0
  25 0048 419E0014              beq 7,.L3
  26                    .L2:
Note: J'ai essayé de remplacer l'option -Og par l'ensemble des options équivalent défini dans la documentation: le code généré est différent ce qui m'empêche de faire une analyse précise.

Merci de votre aide