【问题标题】:Why does clang is unable to unroll a loop (that gcc unrolls)?为什么 clang 无法展开循环(即 gcc 展开)?
【发布时间】:2019-09-18 08:31:18
【问题描述】:

我正在用 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 也应该展开它。

【问题讨论】:

  • clang 也可以使用 -O3 展开。

标签: c gcc clang loop-unrolling


【解决方案1】:

我不知道,但如果你使用相同的选项,它可以:

https://godbolt.org/z/VYn0CA

唯一的区别是整数的大小

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多