Разница между clang и gcc [закрыто]

Я использовал оба этих компилятора в разных проектах.

Чем они отличаются с точки зрения обработки кода и выходных поколений? Например, обаgcc а такжеclang имеет-O2 варианты оптимизации. Они работают одинаково (высокий уровень) с точки зрения оптимизации кода? Я сделал небольшой тест, например, если у меня есть следующий код:

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

Ниже приведены выходные сборки с clang и gcc с -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

как видно, на выходе есть разные инструкции. Поэтому мой вопрос: имеет ли один из них преимущество над другим в разных проектах?

Ответы на вопрос(2)

Ваш ответ на вопрос