[英]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 也應該展開它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.