次のプログラムで 2 番目のループを選択的に展開しようとしています。
#include <stdio.h>
int main()
{
int in[1000], out[1000];
int i,j;
#pragma nounroll
for (i = 100; i < 1000; i++)
{
in[i]+= 10;
}
#pragma unroll 2
for (j = 100; j < 1000; j++)
{
out[j]+= 10;
}
return 1;
}
次のオプションを指定して clang (3.5) を実行すると、両方のループが 4 回展開されます。
clang -std=c++11 -O3 -fno-slp-vectorize -fno-vectorize -mllvm -unroll-count=4 -mllvm -debug-pass=Arguments -emit-llvm -c *.cpp
私は何を間違っていますか?また、フラグを追加-fno-unroll-loops
またはスキップすると、-unroll-count=4
ループが展開されません。
また、プラグマエラーをデバッグする方法に関するヒントはありますか?