Getting llvm-gcc to generate vectors

I wrote the following program:

#include <stdio.h>

int main() {
  float a=1, b=2, c=3, d=4;
  float e=1, f=2, g=3, h=4;
  for (int i=0; i<1000000000; ++i) {
    a += e;
    b += f;
    c += g;
    d += h;
    e /= a;
    f /= b;
    g /= c;
    h /= d;
  }
  printf("%f %f %f %f\n", a, b, c, d);
  return 0;
}

and compiled it with:

  llvm-gcc -std=c99 -O3 -msse3 vector.c -o vector

But it did not generate the vector code that I was expecting and my hand
written IR is 2.5x faster. Is it possible to get llvm-gcc to do this
optimization and, if so, how?

LLVM doesn't have an auto-vectorization pass at the moment, so it
can't do the optimization in question. That said, you can explicitly
write vectors in C using something like "typedef float v4f
__attribute__((vector_size(16)));".

-Eli