------- Comment #10 from irar at il dot ibm dot com 2009-08-13 11:34 ------- Reduced testcase:
#include <stdlib.h> #include <stdio.h> #define N 4 long int a[N]; int main () { int k; for (k = 0; k < N; ++k) a[k] = a[k] != 5 ? 12 : 10; for (k = 0; k < N; ++k) printf ("%u ", a[k]); printf ("\n"); return 0; } %gcc -O3 t.c % ./a.out 0 0 0 0 %gcc -O2 t.c % ./a.out 12 12 12 12 If the type of 'a' is int, there is no problem. The vectorizer produces almost the same code in both cases (except for number of iterations and types). I am attaching the assembly for int and long int versions. Ira -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41019