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:
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
Partager