Почему clang не может развернуть цикл (который развертывает gcc)? - PullRequest
0 голосов
/ 29 апреля 2019

Я пишу на C и компилирую с использованием clang.Я пытаюсь развернуть петлю.Цикл не развернут и есть предупреждение.

цикл не развернут: оптимизатору не удалось выполнить запрошенное преобразование;преобразование может быть отключено или указано как часть неподдерживаемого порядка преобразования [-Wpass-failed = transform-warning]

Результаты можно найти здесь: https://godbolt.org/z/4flN-k

int foo(int c)
{   
    size_t w = 0;
    size_t i = sizeof(size_t);

    #pragma unroll
    while(i--)
    {
        w = (w << 8) | c;
    }

    return w;
}

GCCможно развернуть цикл с -O3, и поэтому я предполагаю, что clang также должен развернуть его.

1 Ответ

1 голос
/ 29 апреля 2019

Я не знаю, но это возможно, если вы используете те же параметры:

https://godbolt.org/z/VYn0CA

enter image description here

Разница в ценеразмер целого числа

...