为什么 clang 无法展开循环(gcc 展开)?
Why does clang is unable to unroll a loop (that gcc unrolls)?
我正在用 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 也应该展开它。
我不知道,但如果你使用相同的选项就可以:
唯一的区别是整数的大小
我正在用 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 也应该展开它。
我不知道,但如果你使用相同的选项就可以:
唯一的区别是整数的大小