簡體   English   中英

為什么 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 也應該展開它。

我不知道,但如果您使用相同的選項,它可以:

https://godbolt.org/z/VYn0CA

在此處輸入圖片說明

唯一的區別是整數的大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM