Я пытаюсь изучить модуль автоматической векторизации gcc. После прочтения документации из здесь.
Вот что я пробовал (debian jessie amd64):
$ cat ex1.c
int a[256], b[256], c[256];
foo () {
int i;
for (i=0; i<256; i++){
a[i] = b[i] + c[i];
}
}
И тогда я просто запускаю:
$ gcc -x c -Ofast -msse2 -c -ftree-vectorize -fopt-info-vec-missed ex1.c
ex1.c:5:3: note: misalign = 0 bytes of ref b[i_11]
ex1.c:5:3: note: misalign = 0 bytes of ref c[i_11]
ex1.c:5:3: note: misalign = 0 bytes of ref a[i_11]
ex1.c:5:3: note: virtual phi. skip.
ex1.c:5:3: note: num. args = 4 (not unary/binary/ternary op).
ex1.c:5:3: note: not ssa-name.
ex1.c:5:3: note: use not simple.
ex1.c:5:3: note: num. args = 4 (not unary/binary/ternary op).
ex1.c:5:3: note: not ssa-name.
ex1.c:5:3: note: use not simple.
ex1.c:2:1: note: not vectorized: not enough data-refs in basic block.
ex1.c:6:13: note: not vectorized: no vectype for stmt: vect__4.5_1 = MEM[(int *)vectp_b.3_9];
scalar_type: vector(4) int
ex1.c:6:13: note: not vectorized: not enough data-refs in basic block.
ex1.c:2:1: note: not vectorized: not enough data-refs in basic block.
ex1.c:8:1: note: not vectorized: not enough data-refs in basic block.
Согласно документации, я бы предположил, что строка, говорящая что-то вроде:
ex1.c:5: note: LOOP VECTORIZED.
Но это не тот случай. Я использовал параметр командной строки: -fopt-info-vec-missed
, так как параметр командной строки: -ftree-vectorizer-verbose
теперь не работает, как за отчет.
Итак, мой вопрос: как мне прочитать приведенный выше вывод, чтобы извлечь, что каким-то образом цикл был фактически векторизован?
В случае, если это поможет:
$ gcc -dumpversion
4.9.2