------- 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