I want to have my code autovectorized by compiler, but I can't seem to get it right.
In particular the message I am getting from it with `-ftree-vectorizer-verbose=6`
option on is `125: not vectorized: not suitable for gather D.32476_34 = *D.32475_33;`.

Now my question is what whole this message means and what do those numbers stand for ? 

Bellow, I have created a simple test example that produces the same message,
so I assume the issues will be related.

```
static void not_suitable_for_gather(unsigned char * __restrict__ pixels, int * __restrict__ indices, int indices_num)
{   
  for (int i = 0; i < indices_num; ++i)
  {
    int idx = indices[i] * 4;

    float r = pixels[idx + 0];
    float g = pixels[idx + 1];
    float b = pixels[idx + 2];
    float a = pixels[idx + 3] / 255.0f;

    pixels[idx + 0] = r;
    pixels[idx + 1] = g;
    pixels[idx + 2] = b;
    pixels[idx + 3] = a * 255.0f;
  }

  return;
}

```

Also, while creating my example, I came across a whole bunch of other messages,
that I am not really sure about their meaning or why would the particular construct
be problematic to vectorize, so is there any guide, book, tutorial, blog, whatever
that would explain these things to me ?

If that matters, I am using MingW 4.7 32-bit with QtCreator 2.7.0.

EDIT: The conclusion:

According to my tests and suggestions from this post, the message is most likely related to accessing data indirectly via an auxiliary index array, which leads to [gather/scatter addressing scheme](http://en.wikipedia.org/wiki/Gather-scatter_%28vector_addressing%29) and at present `GCC` is not able (or does not want) to vectorize this. I was able to produce vectorized code with `clang++ 3.2-1` though.