Понимание вывода автоматической векторизации gcc 4.9.2

Я пытаюсь изучить модуль автоматической векторизации 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

person malat    schedule 18.05.2015    source источник


Ответы (1)


На самом деле, копаясь в онлайн-документе gcc, я наконец обнаружил, что вместо этого я должен использовать: -fopt-info-vec-optimized (или, может быть, -fopt-info-vec-all). См. здесь и здесь:

optimized: Распечатать информацию об успешном применении оптимизации. Это до прохода, чтобы решить, какая информация относится к делу. Например, векторизатор проходит печать исходного местоположения петель, которые успешно векторизованы.

missed: Распечатать информацию о пропущенных оптимизациях. Отдельные проходы контролируют, какую информацию включать в вывод.

note: Печатать подробную информацию об оптимизациях, таких как определенные преобразования, более подробные сообщения о решениях и т. д.

all: печать подробной информации об оптимизации. Сюда входят «оптимизировано», «пропущено» и «примечание».

person malat    schedule 18.05.2015