• [^] # Re: -Os et les boucles

    Posté par (courriel, site web personnel) . En réponse à la dépêche LLVM 3.4 et Clang 3.4. Évalué à 10. Dernière modification le 14 janvier 2014 à 13:49.

    Je me suis posé la même question mais en fait c'est évident. Pour certaines boucles plus ou moins triviales, les dérouler réduit la taille du code généré puisqu'il n'y a plus besoin de maintenir le compteur de boucle. Par exemple:

    for (int i = 0; i < 3; i++)
     frob(i);

    Dont la traduction naïve pourrait donner :

     .cfi_startproc
     pushq %rbp
     .cfi_def_cfa_offset 16
     movq %rsp, %rbp
     .cfi_offset 6, -16
     .cfi_def_cfa_register 6
     subq 16ドル, %rsp
     movl 0ドル, -4(%rbp)
     jmp .L2
     .L3:
     movl -4(%rbp), %eax
     movl %eax, %edi
     call frob
     addl 1ドル, -4(%rbp)
     .L2:
     cmpl 2ドル, -4(%rbp)
     jle .L3
     leave
     ret
     .cfi_endproc

    Alors qu'en déroulant on pourrait avoir :

     .cfi_startproc
     subq 8ドル, %rsp
     .cfi_def_cfa_offset 16
     xorl %edi, %edi
     call frob
     movl 1ドル, %edi
     call frob
     popq %rax
     movl 2ドル, %edi
     jmp frob
     .cfi_endproc

    Par ailleurs je tiens à nouveau à me plaindre du système de mise en forme de DLFP qui nécessite de passer 5 minutes à éditer son code pour qu'il soit rendu de manière plus ou moins lisible (oui, j'ai déjà ouvert des suivis à ce sujet).

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.