GCC は間違いなくベクトル化できます。次の内容のファイル reduce.c があるとします。
int foo(int *x, int N)
{
int acc, i;
for( i = 0; i < N; ++i )
{
acc += x[i];
}
return acc;
}
コマンドラインでコンパイルします(gcc 4.7.2を使用しました):
$ gcc -O3 -S reduc.c -ftree-vectorize -msse2
これで、アセンブラーでベクトル化されたループを確認できます。
また、詳細なベクトライザー出力をオンにすることもできます
$ gcc -O3 -S reduc.c -ftree-vectorize -msse2 -ftree-vectorizer-verbose=1
これで、コンソール レポートが表示されます。
Analyzing loop at reduc.c:5
Vectorizing loop at reduc.c:5
5: LOOP VECTORIZED.
reduc.c:1: note: vectorized 1 loops in function.
GCC がベクトル化できるケースとできないケースをよりよく理解するには、公式ドキュメントを参照してください。