Differenz zwischen clang und gcc [closed]

Ich habe beide Compiler in verschiedenen Projekten verwendet.

Wie unterscheiden sie sich hinsichtlich der Codeverarbeitung und der Ausgabegenerationen? Zum Beispiel beidegcc undclang hat-O2 optionen zur optimierung. Funktionieren sie in Bezug auf die Codeoptimierung gleich (auf hohem Niveau)? Ich habe einen kleinen Test gemacht, zum Beispiel, wenn ich den folgenden Code habe:

int foo(int num) {
    if(num % 2 == 1)
        return num * num;
    else
        return num * num +1;  
}

das Folgende sind die Ausgabebaugruppen mit clang und gcc mit -O2:

----gcc 5.3.0-----                              ----clang 3.8.0----
foo(int):                                       foo(int):
        movl    %edi, %edx                              movl    %edi, %eax
        shrl    $31, %edx                               shrl    $31, %eax
        leal    (%rdi,%rdx), %eax                       addl    %edi, %eax
        andl    $1, %eax                                andl    $-2, %eax
        subl    %edx, %eax                              movl    %edi, %ecx
        cmpl    $1, %eax                                subl    %eax, %ecx
        je      .L5                                     imull   %edi, %edi
        imull   %edi, %edi                              cmpl    $1, %ecx
        leal    1(%rdi), %eax                           setne   %al
        ret                                             movzbl  %al, %eax
.L5:                                                    addl    %edi, %eax
        movl    %edi, %eax                              retq
        imull   %edi, %eax
        ret

ie zu sehen ist, hat die Ausgabe unterschiedliche Anweisungen. Meine Frage ist also, ob einer von ihnen in verschiedenen Projekten einen Vorteil gegenüber dem anderen ha